AI ์ด์ „์‹œ๋Œ€ (↓์„๊ธฐ์‹œ๋Œ€ IT)/11. Unix

UNIX SHELL PROGRAMING 3

๐Ÿ“ฆ DonzBox 2013. 11. 19. 14:23

์ธŒ์ฒ˜ : http://www.insford.com/wiki/Wiki.jsp?page=Shell%20Script

 

๋“ค์–ด๊ฐ€๋ฉฐ#

Shell Script๋ž€?#

์‰˜์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ ๋‹ค์Œ๋ฐฑ๊ณผ์‚ฌ์ „์˜ ์ •์˜๋ฅผ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑ๋˜์–ด ์žˆ๋‹ค.
์‰˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ช…๋ น์–ด๋“ค์˜ ์กฐํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ๋˜๊ณ  ์šด์˜ ์ฒด์ œ์˜ ๋ช…๋ น ํ•ด์„๊ธฐ์— ์˜ํ•ด ์‹คํ–‰๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ. ์œ ๋‹‰์Šค ๊ณ„์—ด์˜ Bourne ์‰˜, C ์‰˜, Korn ์‰˜์— ์‚ฌ์šฉ๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋“ค์ด ๋Œ€ํ‘œ์ ์ด๋‹ค. ์šด์˜ ์ฒด์ œ์— ๋”ฐ๋ผ์„œ๋Š” ๋ช…๋ น์–ด๋“ค์„ ํŒŒ์ดํ”„(|), ๋ฆฌ๋‹ค์ด๋ ‰์…˜(>), ํ•„ํ„ฐ ๋“ฑ์œผ๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์ข€ ๋” ๋ณต์žกํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ˆ˜ํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ๋ฌถ์—ฌ์ง„ ๋ช…๋ น์–ด ์กฐํ•ฉ์ด ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค๋ฉด ์ด๋ฅผ ์‰˜ ์Šคํฌ๋ฆฝํŠธํ™” ํ•˜์—ฌ ๋‹จ์ผ ๋ช…๋ น์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๋ฌธ์ž์—ด์„ ๋ช…๋ น์–ด์— ๋ถ€๊ฐ€ํ•ด ๋‘๊ณ  ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋…๋ฆฝ ๋ณ€์ˆ˜(argument)๋กœ์„œ ๋„˜๊ฒจ์ค„ ์ˆ˜๋„ ์žˆ๋‹ค.

๊ฐ„๋‹จํ•˜๊ฒŒ ์–˜๊ธฐํ•˜์ž๋ฉด ์‰˜์—์„œ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ž‘์—…๋“ค์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋™์ผํ•œ ์ž‘์—…๋“ค์ด ๋ฐ˜๋ณต์ ์œผ๋กœ ์ผ์–ด๋‚˜๊ฒŒ ๋œ๋‹ค๋ฉด ๋งค๋ฒˆ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•˜์ง€ ์•Š๊ณ  ํŒŒ์ผ์— ๊ธฐ๋กํ•˜์—ฌ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ด์šฉํ•˜๋Š”๊ฒƒ์ด ์‰˜์Šคํฌ๋ฆฝํŠธ ์ž…๋‹ˆ๋‹ค.

์‰˜์Šคํฌ๋ฆฝํŠธ ์—๋””ํ„ฐ ์ดํด๋ฆฝ์Šค ํ”Œ๋Ÿฌ๊ทธ์ธ#

๋ง‰์ƒ ์‚ฌ์šฉ์„ ํ•ด๋ณด๋‹ˆ๊นŒ ๋ณ„๋กœ๋„ค์š”, viํŽธ์ง‘๊ธฐ์—์„œ ๊ทธ๋ƒฅ ํ•˜๋Š”๊ฒŒ ์ข‹์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ใ…‹ใ…‹

์ฐธ๊ณ ๋‚ด์šฉ URL#

์‰˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹œ์ž‘ํ•˜๊ธฐ#

์‰˜ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ#

์‰˜ ์Šคํฌ๋ฆฝํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ vi์—๋””ํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž‘์„ฑํ•œ๋‹ค. ์•„์ง vi์—๋””ํ„ฐ์— ์ต์ˆ™ํ•˜์ง€ ์•Š๋‹ค๋ฉด ๋‹ค์Œ ๋งํฌ๋ฅผ ํ™•์ธํ•˜์ž. ์ž์ฃผ์“ฐ๋Š” vi์—๋””ํ„ฐ ๋ช…๋ น์–ด

์ƒ๋‹จ๋ถ€๋ถ„์€ ํ•ญ์ƒ #! ์œผ๋กœ ์‹œ์ž‘ํ•œ๋‹ค. #! ๋’ค์—๋Š” ํ•ด๋‹น์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ์ ˆ๋Œ€๊ฒฝ๋กœ์™€ ์‹คํ–‰์˜ต์…˜์„ ์ง€์ •ํ•œ๋‹ค. ๋ณดํ†ต #!/bin/bash, #!/bin/sh, #!/bin/csh ๋“ฑ์„ ๋งŽ์ด์“ด๋‹ค.

๊ทธ ์™ธ ๊ธฐ๋ณธ ๋ช…๋ น์–ด๋“ค

๋ช…๋ น์–ด ์„ค๋ช…
#ํ…์ŠคํŠธ ์ฃผ์„
clear ํ™”๋ฉด ์ง€์šฐ๊ธฐ
echo ํ…์ŠคํŠธ or ๋ณ€์ˆ˜ ํ™”๋ฉด์— ํ…์ŠคํŠธ ์ถœ๋ ฅ
  • ์ƒ˜ํ”Œ

#!/bin/bash # ์ฃผ์„์ž…๋‹ˆ๋‹ค. clear echo Hello World #ํ•˜๋‚˜์˜ ๋ผ์ธ์—์„œ 2๊ฐœ์˜ ๋ช…๋ น์–ด ์‹คํ–‰ ํ•  ๋•Œ์—๋Š” ; ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค. date;echo date

echo ์ปค๋งจ๋“œ์˜ต์…˜#

echo [์˜ต์…˜]] [ํ…์ŠคํŠธ, ๋ณ€์ˆ˜ ๋“ฑ]]

์˜ต์…˜

  1. -n ์ถœ๋ ฅ ํ›„ ์ค„๋ฐ”๊ฟˆ ์•ˆํ•จ
  2. -e ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ž๋ฅผ ํ…์ŠคํŠธ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒํ•œ๋‹ค.
\a alert (bell)
\b backspace
\c suppress trailing new line
\n new line
\r carriage return
\t horizontal tab
\ \ backslash

์‚ฌ์šฉ์ž ๋ณ€์ˆ˜#

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณ€์ˆ˜๋ช…=๊ฐ’ ์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•œ๋‹ค.
  • ๋ณ€์ˆ˜๋ช…์— ๊ฐ’์„ ํ• ๋‹นํ• ๋•Œ ๊ณต๋ฐฑ์„ ๋„ฃ์ง€ ์•Š๋Š”๋‹ค.
  • ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค.
  • ๋ณ€์ˆ˜๋ช…์— ? * ๋ฌธ์ž๋Š” ์‚ฌ์šฉ๊ธˆ์ง€
  • ์ƒ˜ํ”Œ

#!/bin/bash test=testValue1 test2=$test test3=testValue3 echo test=$test echo test2=$test2 echo test3=$test3
  • ๋ณ€์ˆ˜๋ช…๊ณผ ํ…์ŠคํŠธ๋ฅผ ๋ถ™์—ฌ์“ฐ๊ณ ์‹ถ์„๋•Œ
    echo "ํ…์ŠคํŠธ"$๋ณ€์ˆ˜๋ช…"ํ…์ŠคํŠธ"

์‹œ์Šคํ…œ๋ณ€์ˆ˜#

๋ณ€์ˆ˜๋ช… ์„ค๋ช…
BASH ์‰˜์ด๋ฆ„
BASH_VERSION ์‰˜ ๋ฒ„์ ผ
COLUMNS ์ปฌ๋Ÿผ
LINES ๋ผ์ธ
HOME ํ™ˆ๋””๋ ‰ํ† ๋ฆฌ
LOGNAME ๋กœ๊ทธ์ธ๋ช…
OSTYPE OSํƒ€์ž…
PATH ํŒจ์Šค์„ค์ •๊ฐ’
PS1 prompt์„ค์ •๊ฐ’
PWD working๋””๋ ‰ํ† ๋ฆฌ
SHELL ์‰˜์ด๋ฆ„
USERNAME ํ˜„์žฌํ”ผ์”จ๋กœ๋กœ๊ทธ์ธํ•œ์œ ์ €

๊ณ„์‚ฐ์‹ ์‚ฌ์šฉํ•˜๊ธฐ#

expr ๊ฐ’1 ์—ฐ์‚ฐ์ž ๊ฐ’2

ํ•ด๋‹น ๊ณต์‹์„ ๊ณ„์‚ฐํ•ด์„œ ํ™”๋ฉด์— ์ถœ๋ ฅํ•œ๋‹ค.

expr 1 + 3
expr 2 - 1
expr 10 / 2
expr 20 % 3
expr 10 \* 3
echo `expr 6 + 3`
  • ๋ณ€์ˆ˜์— ๋„ฃ๊ฑฐ๋‚˜, ํ™”๋ฉด์— ๊ณ„์‚ฐ๊ฐ’์„ ์ถœ๋ ฅํ•  ๋•Œ์—๋Š” ` ์„ ์ด์šฉํ•˜์—ฌ ์ž‘์„ฑํ•œ๋‹ค. ํ‚ค๋ณด๋“œ์— `๋Š” ~ํ‘œ์‹œ์™€ ๊ฐ™์€์œ„์น˜์— ์žˆ๋‹ค.

sum=`expr 1 + 5` echo $sum echo `expr 5 + 1` # ๊ณ„์‚ฐ๊ฐ’์ด ์ถœ๋ ฅ ๋จ. echo expr 5 + 1 # ์ด๋ถ€๋ถ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ๋œ๋‹ค. "expr 5 + 1"

quote ์ถœ๋ ฅ๊ทœ์น™#

" \, $ ๋ฌธ๋ฒ•์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
' \, $ ๋ฌธ๋ฒ•์„ ๋ฌด์‹œํ•˜๊ณ  ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค.
` `์•ˆ์—์žˆ๋Š” ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.
  • ์ƒ˜ํ”Œ

id=insford echo "Hello $id" # Hello insford ์ถœ๋ ฅ echo 'Hello $id' # Hello $id ์ถœ๋ ฅ echo 'expr 1 + 3' # expr 1 + 3 ์ถœ๋ ฅ echo `expr 1 + 3` # 4 ์ถœ๋ ฅ

์ข…๋ฃŒ์ƒํƒœ#

echo $?

์œ„ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ตœ๊ทผ์— ์‹คํ–‰ํ–ˆ๋˜ ๋ช…๋ น์–ด์˜ ์ข…๋ฃŒ์ƒํƒœ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

0 - ์„ฑ๊ณต

1~255 - ์‹คํŒจ

  • ์ƒ˜ํ”Œ

#!/bin/bash expr 1 + 3 echo $? # ์„ฑ๊ณต์ด๋ฏ€๋กœ 0์ด ์ถœ๋ ฅ exprrr 1 + 3 echo $? # command not found์ธ 127์ด ์ถœ๋ ฅ๋œ๋‹ค.

์—๋Ÿฌ์ฝ”๋“œ์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ ๋งํฌ๋ฅผ ์ฐธ์กฐํ•˜์ž http://tldp.org/LDP/abs/html/exitcodes.html

์ž…๋ ฅ๊ฐ’ ๋ฐ›๊ธฐ#

read ๋ณ€์ˆ˜

์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ๊ฐ’์„ ๋ฐ›๋Š” ๋ช…๋ น์–ด์ด๋‹ค.

  • ์ƒ˜ํ”Œ

#!/bin/bash echo "input your name" read name echo "your name is $name"

๋งค๊ฐœ๋ณ€์ˆ˜#

ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋‚˜, ์‰˜์Šคํฌ๋ฆฝํŠธํŒŒ์ผ์„ ์‹คํ–‰ํ•  ๋•Œ ๋’ค์— ๋„์–ด์“ฐ๊ธฐ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์ œ ์„ค๋ช…
$0 ์‰˜์Šคํฌ๋ฆฝํŠธ์ด๋ฆ„
$# ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜
$* ๋งค๊ฐœ๋ณ€์ˆ˜๋“ค์„ ๋ชจ์•„๋†“์€ ๋ฌธ์ž์—ด
$1 ~ $n ๋งค๊ฐœ๋ณ€์ˆ˜

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งค๊ฐœ๋ณ€์ˆ˜ ์ „๋‹ฌ ํ–ˆ์„ ๊ฒฝ์šฐ #] sh xxxx.sh param1 param2


#!/bin/bash echo $0 # xxxx.sh echo $# # 2 echo $* # param1 param2 echo $1 # param1 echo $2 # param2

 

๋ณ€์ˆ˜ ๋‚ด์šฉ ์กฐ์ž‘ํ•˜๊ธฐ#

์˜ˆ์ œ ์„ค๋ช…
${variable:-default} ๋ณ€์ˆ˜๊ฐ€์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด default๋กœ ๋Œ€์ฒดํ•œ๋‹ค.
${#variable} variable์˜ length๋ฅผ ์–ป๋Š”๋‹ค.
${variable%word} variable์˜ ๋์—์„œ๋ถ€ํ„ฐ word์™€ ์ฒซ๋ฒˆ์งธ๋กœ ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ œ๊ฑฐํ•œ๋‹ค.
${variable variable์˜ ๋์—์„œ๋ถ€ํ„ฐ word์™€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ œ๊ฑฐํ•œ๋‹ค.
${variable#word} variable์˜ ์‹œ์ž‘์—์„œ๋ถ€ํ„ฐ word์™€ ์ฒซ๋ฒˆ์งธ๋กœ ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ œ๊ฑฐํ•œ๋‹ค.
${variable##word} variable์˜ ์‹œ์ž‘์—์„œ๋ถ€ํ„ฐ word์™€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ œ๊ฑฐํ•œ๋‹ค.

word์—๋Š” ์™€์ผ๋“œ์นด๋“œ(*) ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


#!/bin/bash abc="I am a boy" echo ${abc:-default} # I am a boy echo ${abcd:-default} # default - abcd๋ณ€์ˆ˜๊ฐ€ ์—†์–ด์„œ default๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค. echo ${#abc} # 10 echo ${abc%a*} # I am echo ${abc%%a*} # I echo ${abc#*a} # m a boy echo ${abc##*a} # boy

 

๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ#

์กฐ๊ฑด์ ˆ ์ž…๋ ฅ ( test ๋ช…๋ น )#

if๋ฌธ ๋“ฑ์—์„œ์˜ ์กฐ๊ฑด์ ˆ์—์„œ ์ฐธ๊ณผ ๊ฑฐ์ง“์„ ๊ตฌ๋ถ„ํ•  ๋•Œ test ๋ช…๋ น์ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์“ฐ์ธ๋‹ค.
    ๋ฌธ์ž์—ด๋น„๊ต
    test "aa" = "aa"

test๋ช…๋ น์€ [ ๋ช…๋ น ] ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    [ "aa" = "aa" ]

AND ์™€ OR ์กฐ๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

    [ "aa" = "aa" ] && [ "bb" = "bb" ]
    [ "aa" = "aa" ] || [ "bb" = "bb" ]
  • ๋ฌธ์ž์—ด ๋น„๊ต ์กฐ๊ฑด
์‹ ์„ค๋ช…
[ string ] ๋นˆ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ๋ฉด true
[ string1 = string2 ] ๋ฌธ์ž์—ด์ด ๊ฐ™์œผ๋ฉด true
[ string1 != string2 ] ๋ฌธ์ž์—ด์ด ๋‹ค๋ฅด๋ฉด true
[ -n string ] ๋ฌธ์ž์—ด์ด null์ด ์•„๋‹ˆ๋ฉด true
[ -z string ] ๋ฌธ์ž์—ด์ด null์ด๋ฉด true
  • ์‚ฐ์ˆ  ๋น„๊ต ์กฐ๊ฑด
์‹ ์„ค๋ช…
[ expr1 -eq expr2 ] ๋‘ ํ‘œํ˜„์‹์ด ๊ฐ™์œผ๋ฉด true
[ expr1 -ne expr2 ] ๋‘ ํ‘œํ˜„์‹์ด ๊ฐ™์ง€ ์•Š์œผ๋ฉด true
[ expr1 -gt expr2 ] expr1 > expr2 ์ด๋ฉด true
[ expr1 -ge expr2 ] expr1 >= expr2 ์ด๋ฉด true
[ expr1 -lt expr2 ] expr1 < expr2 ์ด๋ฉด true
[ expr1 -le expr2 ] expr1 <= expr2 ์ด๋ฉด true
[ ! expr ] true์ด๋ฉด false, false์ด๋ฉด true
[ expr1 -a expr2 ] expr1 AND expr2 ์˜ ๊ฒฐ๊ณผ
[ expr1 -o expr2 ] expr1 OR expr2 ์˜ ๊ฒฐ๊ณผ
  • ํŒŒ์ผ ๋น„๊ต ์กฐ๊ฑด
์‹ ์„ค๋ช…
[ -b FILE ] FILE ์ด ๋ธ”๋Ÿญ ๋””๋ฐ”์ด์Šค์ด๋ฉด true
[ -c FILE ] FILE ์ด ๋ฌธ์ž ๋””๋ฐ”์ด์Šค์ด๋ฉด true
[ -d FILE ] FILE ์ด ๋””๋ ‰ํ† ๋ฆฌ์ด๋ฉด true
[ -e FILE ] FILE ์ด ์กด์žฌํ•˜๋ฉด true
[ -f FILE ] FILE ์ด ์กด์žฌํ•˜๊ณ  ์ •๊ทœํŒŒ์ผ์ด๋ฉด true
[ -g FILE ] FILE ์ด set-group-id ํŒŒ์ผ์ด๋ฉด true
[ -h FILE ] FILE ์ด ์‹ฌ๋ณผ๋ฆญ ๋งํฌ์ด๋ฉด true
[ -L FILE ] FILE ์ด ์‹ฌ๋ณผ๋ฆญ ๋งํฌ์ด๋ฉด true
[ -k FILE ] FILE ์ด Sticky bit ๊ฐ€ ์…‹ํŒ…๋˜์–ด ์žˆ์œผ๋ฉด true
[ -p FILE ] True if file is a named pipe.
[ -r FILE ] ํ˜„์žฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ์ด๋ฉด true
[ -s FILE ] ํŒŒ์ผ์ด ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด true
[ -S FILE ] ์†Œ์ผ“ ๋””๋ฐ”์ด์Šค์ด๋ฉด true
[ -t FD ] FD ๊ฐ€ ์—ด๋ ค์ง„ ํ„ฐ๋ฏธ๋„์ด๋ฉด true
[ -u FILE ] FILE ์ด set-user-id ํŒŒ์ผ์ด๋ฉด true
[ -w FILE ] ํ˜„์žฌ ์‚ฌ์šฉ์ž๊ฐ€ ์“ธ ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ(writable file) ์ด๋ฉด true
[ -x FILE ] ํ˜„์žฌ์‚ฌ์šฉ์ž๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ(Executable file) ์ด๋ฉด true
[ -O FILE ] FILE ์˜ ์†Œ์œ ์ž๊ฐ€ ํ˜„์žฌ ์‚ฌ์šฉ์ž์ด๋ฉด true
[ -G FILE ] FILE ์˜ ๊ทธ๋ฃน์ด ํ˜„์žฌ ์‚ฌ์šฉ์ž์˜ ๊ทธ๋ฃน๊ณผ ๊ฐ™์œผ๋ฉด true
[ FILE1 -nt FILE2 ] FILE1์ด FILE2 ๋ณด๋‹ค ์ƒˆ๋กœ์šด ํŒŒ์ผ์ด๋ฉด ( ์ตœ๊ทผํŒŒ์ผ์ด๋ฉด ) true
[ FILE1 -ot FILE2 ] FILE1์ด FILE2 ๋ณด๋‹ค ์˜ค๋ž˜๋œ ํŒŒ์ผ์ด๋ฉด true
[ FILE1 -ef FILE2 ] FILE1 ์ด FILE2์˜ ํ•˜๋“œ๋งํฌ ํŒŒ์ผ์ด๋ฉด true

if๋ฌธ#


#!/bin/bash if [ ์กฐ๊ฑด ] then #์กฐ๊ฑด์ด ์ฐธ์ผ๋•Œ else #์กฐ๊ฑด์ด ๊ฑฐ์ง“์ผ๋•Œ fi # # if - elseif ๋ฌธ if [ ์กฐ๊ฑด1 ] then #์กฐ๊ฑด1 ์ด ์ฐธ์ผ๋•Œ elif [ ์กฐ๊ฑด2 ] #์กฐ๊ฑด1์ด ๊ฑฐ์ง“์ด๊ณ , ์กฐ๊ฑด2๊ฐ€ ์ฐธ์ผ๋•Œ else #์กฐ๊ฑด1, 2๊ฐ€ ๊ฑฐ์ง€์ผ๋•Œ fi

case๋ฌธ#


case $1 in "a" ) echo '$1 is a' ;; # $1์ด a์ผ๋•Œ "b" ) echo '$1 is b' ;; # $1์ด b์ผ๋•Œ * ) echo 'do not have condition' ;; # * ์ด๋ฏ€๋กœ $1์ด ์–ด๋–ค๊ฒƒ์ด๋ผ๋„ ์ถœ๋ ฅ๋œ๋‹ค. java์˜ default: ์™€ ๊ฐ™์Œ esac

for๋ฌธ#

for i in ๋ฆฌ์ŠคํŠธ

list="a1 a2 a3 a4" for i in $list do echo $i # a1, a2 .. ๊ฐ ๊ฐ’์ด ์ฐจ๋ก€๋Œ€๋กœ ์ถœ๋ ฅ๋œ๋‹ค. done # ๋‹ค์Œ์ฒ˜๋Ÿผ ๋ฆฌ์ŠคํŠธ์— ๋ช…๋ น์–ด ๊ฒฐ๊ณผ๋ฅผ ์ด์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค. for file in `ls -a` do echo $file done

while๋ฌธ#


i=1 while [ $i -lt 10 ] # ์กฐ๊ฑด์ ˆ i < 10 ์ด๋ฉด do echo $i i=`expr $i + 1` # i = i + 1 done

 

Functions#

์‰˜ ์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


#!/bin/bash test_function() #ํ•จ์ˆ˜๋ช…() { echo "test functions" echo "arg1=$1" # ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ• ๋•Œ ์ธ์ž๊ฐ’์„ ์ž…๋ ฅํ•˜์—ฌ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. return 0; # ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋ฆฌํ„ด๊ฐ’์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. 0 ~ 255 ๊นŒ์ง€์˜ ๊ฐ’ (0์ผ๊ฒฝ์šฐ ์„ฑ๊ณต์„ ๋‚˜ํƒ€๋‚ธ๋‹ค) } test_function 1 # ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ 1์ด๋ผ๋Š” ์ธ์ž๊ฐ’์„ ์ž…๋ ฅํ•˜์˜€๋‹ค. echo "return=$?" # ๋ฆฌํ„ด๊ฐ’ ์ถœ๋ ฅ

 

  • ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
[insford1@j64-003 ~]$ sh test.sh 
test functions
arg1=1
return=0

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ๋„ ํ•จ์ˆ˜์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.


#!/bin/bash function test_function { # function ํ•จ์ˆ˜๋ช… echo "test_function" local LOCAL_V="local variable" #๋ณ€์ˆ˜์„ ์–ธ์‹œ ์•ž์— local ์„ ๋ถ™์ด๋ฉด ํ•ด๋‹น ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ์“ฐ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. V="variable" echo "test_function LOCAL_V=$LOCAL_V" echo "test_function V=$V" } test_function echo "LOCAL_V=$LOCAL_V" # local๋กœ ์„ ์–ธ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ๋Š” ์ถœ๋ ฅ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค. echo "V=$V"

 

  • ๊ฒฐ๊ณผํ™•์ธ
[insford1@j64-003 ~]$ sh test.sh 
test_function
test_function LOCAL_V=local variable
test_function V=variable
LOCAL_V=
V=variable

๋””๋ฒ„๊น… ๋ฐฉ๋ฒ•#

์‰˜์Šคํฌ๋ฆฝํŠธ ๋””๋ฒ„๊น… ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ์ผ๋‹จ ์˜ˆ์ œ์†Œ์Šค๋ฅผ ๋จผ์ € ๋ณด์‹œ๋ฉด..

# ์—๋Ÿฌ๋ฐœ์ƒ์Šคํฌ๋ฆฝํŠธ i=1 while [ $i -lt 10 ] do echo $i i=`$i + 1` # ์—๋Ÿฌ์ง€์  i=`expr $i + 1` ๊ณผ๊ฐ™์ด ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. done

์œ„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—๋Ÿฌ๋ฉ”์„ธ์ง€๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

1
test.sh: line 8: 1: command not found
test.sh: line 5: [: -lt: unary operator expected

1๊นŒ์ง€๋งŒ ์ถœ๋ ฅ์ด๋˜๊ณ  ๋ง์…ˆ์„ ํ•˜๋ คํ•  ๋•Œ ์—๋Ÿฌ๊ฐ€๋‚ฉ๋‹ˆ๋‹ค.

๋ผ์ธ๋งŒ ๊ฐ€์ง€๊ณ ๋Š” ์ •ํ™•ํžˆ ์–ด๋А๋ถ€๋ถ„์—์„œ ์—๋Ÿฌ๊ฐ€๋‚˜๋Š”์ง€ ํ™•์ธํ•˜๋Š”๊ฒŒ ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ต์…˜์„ ์ฃผ๋ฉด ๋””๋ฒ„๊น…์ด ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

์˜ต์…˜ ์„ค๋ช…
-v ์—๋Ÿฌ๋ฉ”์„ธ์ง€๊ฐ€ ๋ฐœ์ƒํ•œ ๋ผ์ธ์„ ์ถœ๋ ฅํ•œ๋‹ค.
-x ๊ฐ๊ฐ์˜ ๋ช…๋ น์ด ์ผ์–ด๋‚˜๋Š” ๋ถ€๋ถ„์„ ์ถœ๋ ฅํ•˜์—ฌ์ค€๋‹ค.
  • -v ์˜ต์…˜์œผ๋กœ ์‹คํ–‰ํ•˜์˜€์„ ๋•Œ #] sh -v xxxx.sh
i=1
while [ $i -lt 10 ]
do
        echo $i
        i=`$i + 1`
done
1
$i + 1
test.sh: line 8: 1: command not found
test.sh: line 5: [: -lt: unary operator expected

์Šคํฌ๋ฆฝํŠธ์˜ ์†Œ์Šค์ฝ”๋“œ ๋ฐ ์ถœ๋ ฅ๊ฐ’์ด ๋‚˜์˜ค๊ณ  ๋งจ ๋งˆ์ง€๋ง‰์— ์—๋Ÿฌ๋‚œ ๋ผ์ธ์ด ๋‚˜์™€ ์—๋Ÿฌ๊ฐ€ ๋‚œ ๋ถ€๋ถ„์˜ ์†Œ์Šค๋ฅผ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  • -x ์˜ต์…˜์œผ๋กœ ์‹คํ–‰ํ•˜์˜€์„ ๋•Œ #] sh -x xxxx.sh
+ i=1
+ '[' 1 -lt 10 ']'
+ echo 1
1
++ 1 + 1
test.sh: line 8: 1: command not found
+ i=
+ '[' -lt 10 ']'
test.sh: line 5: [: -lt: unary operator expected
์ˆœ์ฐจ์ ์œผ๋กœ ๋ช…๋ น์ด ์ผ์–ด๋‚œ ๋ถ€๋ถ„์„ ์ถœ๋ ฅํ•ด์ฃผ์–ด, 1 + 1 ์„ ๊ณ„์‚ฐํ•  ๋•Œ ์—๋Ÿฌ๊ฐ€๋‚˜๊ณ , ์กฐ๊ฑด์ ˆ์—์„œ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๋‘ ์˜ต์…˜์„ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜๋ฉด ๋””๋ฒ„๊น…์— ๋งŽ์€ ๋„์›€์ด ๋  ๋“ฏ ์‹ถ๋‹ค.