Skip to main content

Basics

About 3 minShellBasicsbashlinuxmacosterminalaliastailmultiline

Basics ๊ด€๋ จ


if statement

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ if-else ๊ตฌ๋ฌธ์˜ ํ˜•์‹

if command; then
   # <commands>
fi

bash ์‰˜์€ if๋ฌธ ์ค„์— ์ •์˜๋œ ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค. ์ด ๋ช…๋ น์˜ ์ข…๋ฃŒ ์ƒํƒœ๊ฐ€ 0(๋ช…๋ น์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋จ) ์ด๋ผ๋ฉด then ์•„๋ž˜์— ์žˆ๋Š” ๋ช…๋ น์ด ์‹คํ–‰๋œ๋‹ค. ๋ช…๋ น์˜ ์ข…๋ฃŒ ์ƒํƒœ๊ฐ€ 0์ด ์•„๋‹ˆ๋ผ๋ฉด then ์•„๋ž˜์— ์žˆ๋Š” ๋ช…๋ น์€ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ , bash ์‰˜์€ ์Šคํฌ๋ฆฝํŠธ์˜ ๋‹ค๋ฅธ ๋ช…๋ น์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

if-then-else
if command; then
    # <commands>
else
    # <commands>
fi

if๋ฌธ ์ค„์˜ ๋ช…๋ น์ด 0์ด ์•„๋‹Œ ์ข…๋ฃŒ ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ๋Œ๋ ค์ฃผ๋ฉด bash ์‰˜์€ else ๋ถ€๋ถ„์˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค.

์ค‘์ฒฉ๋œ if๋ฌธ
if command1; then
    # <commands>
elif command2; then
    # <more commands>
fi

elif๋Š” if-then ๊ตฌ๋ฌธ์˜ else ๋ถ€๋ถ„์„ ์ด์–ด ๋‚˜๊ฐ„๋‹ค. elif ๋ช…๋ น์˜ ์ข…๋ฃŒ ์ƒํƒœ ์ฝ”๋“œ๊ฐ€ 0์ด๋ผ๋ฉด bash๋Š” ๋‘ ๋ฒˆ์งธ then๋ฌธ ๋ถ€๋ถ€๋„ˆ์˜ ๋ช…๋ น๋“ค(more commands)์„ ์‹คํ–‰ํ•œ๋‹ค.

ํ…Œ์ŠคํŠธ ๋ช…๋ น ์จ๋ณด๊ธฐ
if test condition; then
    ๋ช…๋ น
fi

ํ…Œ์ŠคํŠธ ๋ช…๋ น์— ๋‚˜์™€์žˆ๋Š” ์กฐ๊ฑด์ด ์ฐธ์œผ๋กœ ํ‰๊ฐ€๋˜๋ฉด ํ…Œ์ŠคํŠธ ๋ช…๋ น์€ ์ข…๋ฃŒ ์ƒํƒœ ์ฝ”๋“œ๋ฅผ 0์œผ๋กœ ๋Œ๋ ค์ค€๋‹ค.

bash ์‰˜์€ if-then ๊ตฌ๋ฌธ์—์„œ ํ…Œ์ŠคํŠธ ๋ช…๋ น์„ ์“ฐ์ง€ ์•Š๊ณ ๋„ ์กฐ๊ฑด์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.

if [ condition ]; then
    ๋ช…๋ น
fi

๋Œ€๊ด„ํ˜ธ๋Š” ํ…Œ์ŠคํŠธ ์กฐ๊ฑด์„ ์ •์˜ํ•œ๋‹ค. ํ•œ ๊ฐ€์ง€ ์ฃผ์˜ํ•  ์ ์ด ์žˆ๋‹ค. ์—ฌ๋Š” ๋Œ€๊ด„ํ˜ธ ๋’ค์™€ ๋‹ซ๋Š” ๋Œ€๊ด„ํ˜ธ ์•ž์— ๊ฐ๊ฐ ๋นˆ ์นธ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์•ˆ๊ทธ๋Ÿฌ๋ฉด ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค. ํ…Œ์ŠคํŠธ ๋ช…๋ น ๋ฐ ํ…Œ์ŠคํŠธ ์กฐ๊ฑด์€ ์„ธ ๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ์กฐ๊ฑด์„ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค(ํŒŒ์ผ ๋น„๊ต, ์ˆซ์ž ๋น„๊ต, ๋ฌธ์ž์—ด ๋น„๊ต).

ํŒŒ์ผ ๋น„๊ต

์‰˜ ์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•˜๊ณ  ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋น„๊ต๋‹ค. ๋ฆฌ๋ˆ…์Šค ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์ƒํƒœ๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋น„๊ต์„ค๋ช…
-d fileํŒŒ์ผ์ด ์กด์žฌํ•˜๊ณ  ๋””๋ ‰ํ† ๋ฆฌ์ธ์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค
-e fileํŒŒ์ผ์ด ์กด์žฌํ•˜๋Š”์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค
-f fileํŒŒ์ผ์ด ์กด์žฌํ•˜๊ณ  ํŒŒ์ผ์ธ์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค
-L fileํŒŒ์ผ์ด ์‹ฌ๋ณผ๋ฆญ ๋งํฌ์ด๋ฉด ์ฐธ
-r fileํŒŒ์ผ์ด ์กด์žฌํ•˜๊ณ  ์ฝ์„ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค
-s fileํŒŒ์ผ์ด ์กด์žฌํ•˜๊ณ  ๋น„์–ด ์žˆ์ง€ ์•Š์€์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค
-w fileํŒŒ์ผ์ด ์กด์žฌํ•˜๊ณ  ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค
-x fileํŒŒ์ผ์ด ์กด์žฌํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค
-O fileํŒŒ์ผ์ด ์กด์žฌํ•˜๊ณ  ํ˜„์žฌ ์‚ฌ์šฉ์ž๊ฐ€ ์†Œ์œ ํ•œ ๊ฒƒ์ธ์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค
-G fileํŒŒ์ผ์ด ์กด์žฌํ•˜๊ณ  ๊ธฐ๋ณธ ๊ทธ๋ฃน์ด ํ˜„์žฌ ์‚ฌ์šฉ์ž์™€ ๊ฐ™์€์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค
file1 -nt file2file1์ด file2๋ณด๋‹ค ์ƒˆ๊ฒƒ์ธ์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค
file1 -ot file2file1์ด file2๋ณด๋‹ค ์˜ค๋ž˜๋œ ๊ฒƒ์ธ์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค

๋””๋ ‰ํ† ๋ฆฌ ํ™•์ธํ•˜๊ธฐ

์ง€์ •๋œ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์‹œ์Šคํ…œ์— ์กด์žฌํ•˜๋Š”์ง€ ๋ณด๋ ค๋ฉด -d ๊ฒ€์‚ฌ๋ฅผ ํ•œ๋‹ค. ๋ณดํ†ต์€ ๋””๋ ‰ํ† ๋ฆฌ์— ํŒŒ์ผ์„ ์“ฐ๊ฑฐ๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „์— ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค.

jump_directory=/home/arthur

if [ -d $jump_directory ]; then
    echo "hi"
fi

๊ฐœ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€ ๊ฒ€์‚ฌํ•˜๊ธฐ

location=$HOME
file_name="bong"

if [ -e $location ]; then # Directory does exist
    if [ -e $location/$file_name ]; then
        echo "file does exist"
    else
        echo "file doesn't exist"
    fi
else
    echo "Directory doesn't exist"
fi

์Šคํฌ๋ฆฝํŠธ์—์„œ ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์ด ๊ฐœ์ฑ„๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด -e ๋น„๊ต๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค(-e ๋น„๊ต๋Š” ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ† ๋ฆฌ ์–‘์ชฝ ๋ชจ๋‘์— ์ ์šฉ๋œ๋‹ค).

์ˆซ์ž ๋น„๊ต
๋น„๊ต์„ค๋ช…
n1 -eq n2n1๊ณผ n2๊ฐ€ ๊ฐ™์€์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค
n1 -ge n2n1์ด n2๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค
n1 -gt n2n1์ด n2๋ณด๋‹ค ํฐ์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค
n1 -le n2n1์ด n2๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค
n1 -lt n2n1์ด n2๋ณด๋‹ค ์ž‘์€์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค
n1 -ne n2n1๊ณผ n2๊ฐ€ ๊ฐ™์ง€ ์•Š์€์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค
if [ $val1 -gt 1 ]; then
   echo "hi"
fi
๋ฌธ์ž์—ด ๋น„๊ต
๋น„๊ต์„ค๋ช…
str1 = str2str1์ด str2์™€ ๊ฐ™์€์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค
str1 != str2str1์ด str2์™€ ๊ฐ™์ง€ ์•Š์€์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค
str1 < str2str1์ด str2๋ณด๋‹ค ์ž‘์€์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค
str1 > str2str1์ด str2๋ณด๋‹ค ํฐ์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค
-n str1str1์˜ ๊ธธ์ด๊ฐ€ 0๋ณด๋‹ค ํฐ์ง€(0์ด ์•„๋‹Œ์ง€) ๊ฒ€์‚ฌํ•œ๋‹ค
-z str1str1์˜ ๊ธธ์ด๊ฐ€ 0์ธ์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค

๋ฌธ์ž์—ด์ด ๊ฐ™์€๊ฐ€ ๊ฐ™์ง€ ์•Š์€๊ฐ€ ๋น„๊ตํ•  ๋•Œ๋Š” ๋ชจ๋“  ๋ฌธ์žฅ๋ถ€ํ˜ธ์™€ ๋Œ€๋ฌธ์ž๋„ ๊ณ ๋ ค๋œ๋‹ค๋Š” ์ ์„ ์žŠ์ง€ ๋ง์ž.

testuser=bong

if [ $USER = $testuser ]; then
    echo "hi"
fi

์–ด๋–ค ๋ฌธ์ž์—ด์ด ๋‹ค๋ฅธ ๋ฌธ์ž์—ด๋ณด๋‹ค ํฐ๊ฐ€ ์ž‘์€๊ฐ€๋ฅผ ํŒ๋‹จํ•  ๋•Œ๋ถ€ํ„ฐ ์ผ์ด ๋ณต์žกํ•ด์ง„๋‹ค. ๋ฌธ์ž์—ด์ด ํฐ์ง€์˜ ์—ฌ๋ถ€๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋‘๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

์ฒซ์งธ, ๋ถ€๋“ฑํ˜ธ ๊ธฐํ˜ธ๋ฅผ ์ด์Šค์ผ€์ดํ”„ ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์‰˜์€ ์ด๋ฅผ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๊ธฐํ˜ธ๋กœ ํ•ด์„ํ•ด์„œ ๋ฌธ์ž์—ด ๊ฐ’์„ ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

val1=baseball
val2=hockey

if [ $val1 \> $val2 ]
then
    echo "hi"
fi

๋‘˜์งธ, ์–ด๋Š ๊ฒƒ์ด ๋” ํฐ์ง€ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋…ผ๋ฆฌ๋Š” sort ๋ช…๋ น์—์„œ ์“ฐ์ด๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ง€ ์•Š๋‹ค.

๋น„๊ต ํ…Œ์ŠคํŠธ์—์„œ๋Š” ํ‘œ์ค€ ASCII ์ˆœ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ •๋ ฌ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๊ฐ ๋ฌธ์ž์˜ ASCII ์ˆซ์ž ์ฝ”๋“œ๊ฐ’์„ ์ด์šฉํ•œ๋‹ค. sort ๋ช…๋ น์€ ์‹œ์Šคํ…œ ๋กœ์ผ€์ผ์˜ ์–ธ์–ด ์„ค์ •์— ์ •์˜๋œ ์ •๋ ฌ ์ˆœ์„œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์˜์–ด๋ผ๋ฉด ๋กœ์ผ€์ผ ์„ค์ •์€ ์†Œ๋ฌธ์ž๋ฅผ ๋Œ€๋ฌธ์ž๋ณด๋‹ค ์•ž์„œ์„œ ์ •๋ ฌํ•˜๋„๋ก ์ง€์ •ํ•œ๋‹ค.

๋น„์–ด์žˆ๊ณ  ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋Š” ์‰˜ ์Šคํฌ๋ฆฝํŠธ ํ…Œ์ŠคํŠธ์— ์น˜๋ช…์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค. ๋ณ€์ˆ˜์˜ ๋‚ด์šฉ์ด ํ™•์‹คํ•˜์ง€ ์•Š์œผ๋ฉด ์ˆซ์ž ๋˜๋Š” ๋ฌธ์ž์—ด ๋น„๊ต๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— -n ๋˜๋Š” -z๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์„ ํฌํ•จํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹๋‹ค.

val1=testing

if [ -n $val1 ]; then
    echo "hi"
fi

if [ -z $val2 ]; then
    echo "hi"
fi

for๋ฌธ

FILE="/Users/bong"

for state in $(ls $FILE)
do
  echo $state
done
for i in ~/bong*.sh; do
    if [ -r "$i" ]; then
        . $i
    fi
done

for๋ฌธ ๋Œ๋ฆฌ๋ฉด์„œ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ์‹คํ–‰

C ์Šคํƒ€์ผ for๋ฌธ
TEST_TRIES=7
TEST_INTERVAL_SECONDS=5

for (( TRY_COUNT = 1; TRY_COUNT <= $TEST_TRIES; TRY_COUNT ++ )); do
    sleep $TEST_INTERVAL_SECONDS
    echo "Checking HTTP port. ("$TRY_COUNT"/$TEST_TRIES)"

    HTTP_STATUS_CODE=`curl -sL -o /dev/null -I -w "%{http_code}" $TEST_URL --max-time 10`
    if [ $HTTP_STATUS_CODE -gt 199 ] && [ $HTTP_STATUS_CODE -lt 300 ]; then
        echo "The Spring Boot process has started successfully."
        break
    fi
    if [ $TRY_COUNT = $TEST_TRIES ]; then
        echo "ERROR : The Spring Boot process failed to start."
        exit 1
    fi
done

while๋ฌธ

๊ธฐ๋ณธ while ํ˜•์‹
var1=10

while [ $var1 -gt 0 ]; do
  echo $var1
  var1=$[ $var1 - 1 ]
done
`getopts` ๋ช…๋ น์–ด ์‚ฌ์šฉ
# -a ์˜ต์…˜์ด ์žˆ๋Š”์ง€ ํ”Œ๋ž˜๊ทธ ๋ณ€์ˆ˜ a_flag์™€
# -p ์˜ต์…˜์˜ ๊ตฌ๋ถ„์ž๋ฅผ ์ •์˜ํ•˜๊ธฐ
a_flag=0
separator=""

while getopts "ap:" option
do
  case $option in
    a)
      a_flag=1
      ;;
    p)
      separator="$OPTARG"
      ;;
    \?)
      echo "Usage: getopts.sh [-a] [-p separator] target_dir" 1>&2
      exit 1
      ;;
    esac
done

case ๋ช…๋ น

case variable in
  pattern1 | pattern2) 
    commands1
    ;;
  pattern3) 
    commands2
    ;;
  *) 
    default commands
    ;;
esac
์˜ˆ์ œ

bong.sh

echo_host() {
  host=`hostname`
  echo "[$host] $1"
}

#### Main #####

OPTION=$1

case $OPTION in
  "start") start_nginx;;
  "stop") stop_nginx;;
  "restart") restart_nginx;;
  *) echo_host "option : $0 start|stop|restart";;
esac

bong.sh ์‹คํ–‰๊ฒฐ๊ณผ

./bong.sh ttt
# [MyMacBook] option : ./bong.sh start|stop|restart

์Šคํฌ๋ฆฝํŠธ ์ข…๋ฃŒํ•˜๊ธฐ

๋ฆฌ๋ˆ…์Šค ์ข…๋ฃŒ ์ƒํƒœ์ฝ”๋“œ

์ฝ”๋“œ์„ค๋ช…
0๋ช…๋ น์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋จ
1์ผ๋ฐ˜ ์•Œ ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜
2์‰˜ ๋ช…๋ น์„ ์ž˜๋ชป ์‚ฌ์šฉํ•จ
126๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Œ(Permission denied)
127๋ช…๋ น์„ ์ฐพ์„ ์ˆ˜ ์—†์Œ
128์ž˜๋ชป๋œ ์ข…๋ฃŒ ๋งค๊ฐœ๋ณ€์ˆ˜
128+x์น˜๋ช…์ ์ธ ์˜ค๋ฅ˜๋กœ ๋ฆฌ๋ˆ…์Šค ์‹ ํ˜ธ x๋ฅผ ํฌํ•จ
130Ctrl+C๋กœ ๋ช…๋ น์ด ์ข…๋ฃŒ๋จ
255๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ์ข…๋ฃŒ ์ƒํƒœ
์ข…๋ฃŒ ์ฝ”๋“œ ํ™•์ธํ•˜๋Š” ๋ช…๋ น์–ด
echo $?

cf) ์ข…๋ฃŒ ์ƒํƒœ ์ฝ”๋“œ๋Š” 0 ~ 255๊นŒ์ง€ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

exit ๋ช…๋ น

์‰˜ ์Šคํฌ๋ฆฝํŠธ๋Š” ๋งˆ์ง€๋ง‰ ๋ช…๋ น์˜ ์ข…๋ฃŒ ์ƒํƒœ๋กœ ๋๋งˆ์นœ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ์ข…๋ฃŒ ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ๋Œ๋ ค์ฃผ๋„๋ก ์ด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. exit ๋ช…๋ น์€ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ์ข…๋ฃŒ ์ƒํƒœ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

test13

#!/bin/bash
var1=10
var2=30
var3=$[$var1 + $var2]
echo The answer is $var3
exit5
#exit $var3 ์ฒ˜๋Ÿผ exit ๋ช…๋ น์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

๊ฒฐ๊ณผ

chmod u+x test13
./test13
# The answer is 40
echo $?
# 5

Multiline ์ž…๋ ฅ

\ ์„ ๋ถ™์—ฌ ์ปค๋งจ๋“œ ์ž…๋ ฅ

wsdl2java.sh -u -t -ss -sd -g -b \
    -o ./BmsSifDctToProcessMobService \
    -uri http://onnara.saas.gcloud.go.kr/bms/service/BmsSifDctToProcessMobService?wsdl

aliases

Basics

alias ls='ls -l'

with Argument(s)

alias wrap_args='f(){ echo before "$@" after;  unset -f f; }; f'
wrap_args x y z
# before x y z after

You can replace $@ with $1 if you only want the first argument.

Explanation

This creates a temporary function f, which is passed the arguments.

Alias arguments are only passed at the end. Note that f is called at the very end of the alias.

The unset -f removes the function definition as the alias is executed so it doesn't hang around afterwards.


์‰˜ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑํ›„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ๋ฌธ๋ฒ•์„ ํ™•์ธํ•˜๋Š” -n ์˜ต์…˜

sh -n script.sh

ps

`java` ํ”„๋กœ์„ธ์Šค PID ๋ฆฌ์ŠคํŠธ์—… ํ•ด์„œ ์ถœ๋ ฅ
ps -ef | grep java | awk '{print $2}'
`grep` ํ•˜๋ฉด ๋ฐฉ๊ธˆ ์‹คํ–‰ํ•œ ๊ฒƒ๋„ ์žกํžˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๊ฑฐ ์ œ์™ธํ•ด์ฃผ๋Š” ๋ช…๋ น์–ด
ps -ef | grep java | grep -v grep
pid๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ผ ๋•Œ checkํ•˜๋Š” if๋ฌธ ์ถ”๊ฐ€์ ์œผ๋กœ
ps -ef | grep nginx | grep -v grep | wc -l

์‘์šฉ: check_running()

check_running() {
    PID=`ps -ef | grep nginx | grep -v grep | awk '{print $2}'`
    if [[ -n $PID ]] ; then
        echo "nginx process already started (PID:$PID)"
        exit 1
    fi
}

Make tasks running in background

์ปค๋ฉ˜๋“œ ๋’ค์— & ์ถ”๊ฐ€

tail -f /var/log/messages &

๊ฒฐ๊ณผ์ฐฝ์— [1] 614์ด ๋‚˜์˜จ๋‹ค๋ฉด

fg 1

๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋‹ค์‹œ foreground๋กœ ๋ณต๊ท€


Quickly jump to frequently-used directories

CDPATH='.:~:/usr/local/apache/htdocs:/disk1/backups'
export CDPATH

cd ์ž…๋ ฅ ํ›„ ์ž์ฃผ ์ฐพ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์•Œ๋ ค์ค€๋‹ค.


Perform calculations

์ˆซ์ž๊ณ„์‚ฐ

echo $((16/2))
์ด์ฐฌํฌ (MarkiiimarK)
Never Stop Learning.