์ธ์ฒ : http://www.insford.com/wiki/Wiki.jsp?page=Shell%20Script
๋ชฉ์ฐจ
- 1 ๋ค์ด๊ฐ๋ฉฐ
- 1.1 Shell Script๋?
- 1.2 ์์คํฌ๋ฆฝํธ ์๋ํฐ ์ดํด๋ฆฝ์ค ํ๋ฌ๊ทธ์ธ
- 1.3 ์ฐธ๊ณ ๋ด์ฉ URL
- 2 ์ ํ๋ก๊ทธ๋๋ฐ ์์ํ๊ธฐ
- 2.1 ์ ์คํฌ๋ฆฝํธ ์์ฑ
- 2.2 echo ์ปค๋งจ๋์ต์
- 2.3 ์ฌ์ฉ์ ๋ณ์
- 2.4 ์์คํ ๋ณ์
- 2.5 ๊ณ์ฐ์ ์ฌ์ฉํ๊ธฐ
- 2.6 quote ์ถ๋ ฅ๊ท์น
- 2.7 ์ข ๋ฃ์ํ
- 2.8 ์ ๋ ฅ๊ฐ ๋ฐ๊ธฐ
- 2.9 ๋งค๊ฐ๋ณ์
- 2.10 ๋ณ์ ๋ด์ฉ ์กฐ์ํ๊ธฐ
- 3 ๊ตฌ์กฐ์ ํ๋ก๊ทธ๋๋ฐ
- 3.1 ์กฐ๊ฑด์ ์ ๋ ฅ ( test ๋ช ๋ น )
- 3.2 if๋ฌธ
- 3.3 case๋ฌธ
- 3.4 for๋ฌธ
- 3.5 while๋ฌธ
- 3.6 Functions
- 3.7 ๋๋ฒ๊น ๋ฐฉ๋ฒ
๋ค์ด๊ฐ๋ฉฐ#
Shell Script๋?#
์์คํฌ๋ฆฝํธ์ ๋ํ ๋ค์๋ฐฑ๊ณผ์ฌ์ ์ ์ ์๋ฅผ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฑ๋์ด ์๋ค.๊ฐ๋จํ๊ฒ ์๊ธฐํ์๋ฉด ์์์ ๋ช ๋ น์ด๋ฅผ ์ด์ฉํ์ฌ ์ฌ๋ฌ๊ฐ์ง ์์ ๋ค์ ์ฒ๋ฆฌํ ์ ์๋๋ฐ, ๋์ผํ ์์ ๋ค์ด ๋ฐ๋ณต์ ์ผ๋ก ์ผ์ด๋๊ฒ ๋๋ค๋ฉด ๋งค๋ฒ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์ง์ ์ ๋ ฅํ์ง ์๊ณ ํ์ผ์ ๊ธฐ๋กํ์ฌ ํธ๋ฆฌํ๊ฒ ์ด์ฉํ๋๊ฒ์ด ์์คํฌ๋ฆฝํธ ์ ๋๋ค.
์์คํฌ๋ฆฝํธ ์๋ํฐ ์ดํด๋ฆฝ์ค ํ๋ฌ๊ทธ์ธ#
- ๋ค์ด๋ก๋ http://sourceforge.net/projects/shelled/
- ์ธ์คํจ๋ฐฉ๋ฒ http://sourceforge.net/apps/trac/shelled/wiki/ShellEd-Installation-Instructions
์ฐธ๊ณ ๋ด์ฉ 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 [์ต์ ]] [ํ ์คํธ, ๋ณ์ ๋ฑ]]์ต์
- -n ์ถ๋ ฅ ํ ์ค๋ฐ๊ฟ ์ํจ
- -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 ์ ๊ณ์ฐํ ๋ ์๋ฌ๊ฐ๋๊ณ , ์กฐ๊ฑด์ ์์ ์๋ฌ๊ฐ ๋๋ ๊ฒ์ ์ ์ ์๋ค.
๋ ์ต์ ์ ์ ์ ํ ์ฌ์ฉํ๋ฉด ๋๋ฒ๊น ์ ๋ง์ ๋์์ด ๋ ๋ฏ ์ถ๋ค.