Shell Script๋?
Unix๋ Linux ๋๋ POSIX Portable Operating System Interface๋ฅผ ์ง์ํ๋ ์ด์์ฒด์ ์ธ macOS ๋ฑ์์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ช ๋ น์ด๋ค๊ณผ if, for์ ๊ฐ์ ํ๋ก๊ทธ๋๋ฐ์ ์ธ ์์๋ก ์ด๋ฃจ์ด์ง ์ธํฐํ๋ฆฌํฐ ๊ธฐ๋ฐ์ ์คํฌ๋ฆฝํธ ์ธ์ด.
Shell Script ์์ฑ ๋ฐ ์คํ
์ผ๋ฐ์ ์ผ๋ก ์
ธ ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ง๋ค ๋๋ sh ํ์ฅ์๋ฅผ ์ฌ์ฉ. ๊ทธ๋ฆฌ๊ณ #!/bin/bash
๋ฅผ ์์ํ ๋ ์์ฑํ์ฌ ์
ธ ์คํฌ๋ฆฝํธ์์ ๋ช
์.
Shell Script ์คํํ๋ ๋ฐฉ๋ฒ์ 2๊ฐ์ง. ์ฒซ๋ฒ์งธ๋ sh ๋ช ๋ น์ด๋ฅผ ์ด์ฉํ์ฌ ์คํํ๋ ๋ฐฉ๋ฒ.
$ sh myshell.sh
๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์์ฑํ ์คํฌ๋ฆฝํธ์ ์คํ ๊ถํ์ ์ฃผ๊ณ ์ง์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ.
$ chmod +x myshell.sh
$ ./myshell.sh
shell script๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ ์ด์ ๋ ๊ณ์ํด์ ์ฌ์ฌ์ฉํ ์ ์๊ณ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค ๋ ์ฐธ์กฐํ ์ ์๊ธฐ ๋๋ฌธ.
๋ณ์ ์ฌ์ฉํ๊ธฐ
๋ณ์ ์ ์ธ
์คํฌ๋ฆฝํธ์ฉ ๋ณ์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ณ์๋ช
์ ์ ์ธํ ํ ๋ฌธ์์ด์ ์ ์ฅํ๋ฉด ๋ฌธ์์ด์ด ์ ์ฅ๋๊ณ ์ซ์๋ฅผ ์ ์ฅํ๋ฉด ์ซ์๊ฐ ์ ์ฅ๋จ. ๋ฐ๋ผ์ ํน๋ณํ ๋ณ์ ํ์
์ด ํ์ํ์ง ์์. ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ณ์ ์ ์ธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ณ ์ ํ๋ ๋ช
๋ น์ด ์ ์ ๋ณ์๋ฅผ ์ ์ธํ๊ณ ํด๋น ๋ณ์์ ํ์ํ ๊ฐ์ ์ ์ฅํ๋ ๊ฒ.
๊ธฐ๋ณธ ๋ณ์ ์ ์ธ - ๋ฌธ์์ด ์ถ๋ ฅํ๊ธฐ
#!/bin/bash
language="Korean"
echo "I can speak $language"
$ sh myshell.sh
I can speak Korean
๊ธฐ๋ณธ ๋ณ์ ์ ์ธ - ๋๋ ํ ๋ฆฌ ์์ฑํ๊ธฐ
#!/bin/bash
language="Korea English Japan"
mkdir $language
$ sh make_directory.sh
$ ls -l
drwxr-xr-x 2 lucy lucy 4096 Apr 25 19:34 English
drwxr-xr-x 2 lucy lucy 4096 Apr 25 19:34 Japan
drwxr-xr-x 2 lucy lucy 4096 Apr 25 19:34 Korea
๋ณ์์ ์ข ๋ฅ
๋ณ์์๋ ๋จ์ํ๊ฒ ์ ์ธ๋ง ํด์ ์ฐ๋ ๋ณ์๋ ์์ง๋ง ํจ์๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ฉด์ ํจ์ ๋ด์์๋ง ์ฌ์ฉํ ์ ์๋ ๋ณ์, ํจ์ ๋ฐ์์๋ ์ฌ์ฉํ ์ ์๋ ๋ณ์, ํจ์์ ํ๋ผ๋ฏธํฐ๋ก ๋ณ์๋ฅผ ๋๊ธธ ๋ ์ฌ์ฉํ๋ ๋ณ์ ๋ฑ ์ฌ๋ฌ ์ข
๋ฅ์ ๋ณ์๋ค์ด ๋ง์. ๋ํ, ์์คํ
์์ ์์คํ
์ ์ํด ๋ฏธ๋ฆฌ ํ ๋น๋ ๋ณ์๋ค์ด ์กด์ฌํจ. ๊ทธ๋ฐ ๋ณ์๋ค์ ์ฐ๋ฆฌ๋ ์์ฝ๋ณ์ ํน์ ํ๊ฒฝ๋ณ์๋ผ ๋ถ๋ฆ.
ํจ์
ํจ์๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ ์ํจ์ด๋ฉฐ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฌ์ฉํจ์ผ๋ก์จ ์คํฌ๋ฆฝํธ์ ์ค ์๋ฅผ ์ค์ฌ์ฃผ๊ณ ์ข ๋ ํจ์จ์ ์ผ๋ก ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ.
#!/bin/bash
function print() {
echo $1
}
print "I can speak Korean"
ํจ์๋ฅผ ์ฌ์ฉํ ๋๋ ํจ์์ ํ์ํ ํ๋ผ๋ฏธํฐ์ ํจ๊ป ํด๋น ํจ์๋ฅผ ํธ์ถ.
$ bash myshell.sh
I can speak Korean
์ด ํจ์์ ๊ฒฝ์ฐ bash ๋ฌธ๋ฒ์ผ๋ก sh ๋ช
๋ น์ด๋ก ์คํ๋์ง ์์์ bash๋ก ์คํ.
์ ์ญ๋ณ์
#!/bin/bash
language="Korean"
function print() {
echo "I can speak $language"
}
print
$ bash myshell.sh
I can speak Korean
์ง์ญ๋ณ์
#!/bin/bash
language="Korean" function learn() {
local learn_language="English"
echo "I am learning $learn_language"
}
function print() {
echo "I can speak $1"
}
learn
print $language
print $learn_language
$ bash myshell.sh
I am learning English
I can speak Korean
I can speak # learn์ ์ง์ญ๋ณ์๋ก learn_language ๊ฐ์ ์ถ๋ ฅํ ์ ์์ง๋ง print์์๋ ์ถ๋ ฅ ์ ๋จ.
์์ฝ๋ณ์ ๋ฐ ํ๊ฒฝ๋ณ์
์์คํ
์ ์ํด ์ฌ์ ์ ๋ฏธ๋ฆฌ ์์คํ
์์ ์ฌ์ฉํ๊ณ ์๋ ๋ณ์๋ค.
์ฌ์ ์ ์ฌ์ฉํ๊ณ ์๋ ๋ณ์์ด๊ธฐ ๋๋ฌธ์ ์์ฝ ๋ณ์ํ๊ณ ํ๊ธฐ๋ ํ๊ณ , ์์คํ
ํ๊ฒฝ์ ์ํ ๋ณ์๋ค์ด๊ธฐ ๋๋ฌธ์ ํ๊ฒฝ๋ณ์๋ผ๊ณ ๋ ํจ.
๋ณ์๋ช | ์ค๋ช |
HOME | ์ฌ์ฉ์์ ํ ๋๋ ํ ๋ฆฌ |
PATH | ์คํ ํ์ผ์ ์ฐพ์ ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก |
FUNCNAME | ํ์ฌ ํจ์ ์ด๋ฆ |
LANG | ํ๋ก๊ทธ๋จ ์ฌ์ฉ ์ ๊ธฐ๋ณธ์ผ๋ก ์ง์๋๋ ์ธ์ด |
PWD | ์ฌ์ฉ์์ ํ์ฌ ์์ ์ค์ธ ๋๋ ํ ๋ฆฌ |
TERM | ๋ก๊ทธ์ธ ํฐ๋ฏธ๋ ํ์ |
SHELL | ๋ก๊ทธ์ธํด์ ์ฌ์ฉํ๋ ์ ธ |
USER | ์ฌ์ฉ์ ์ด๋ฆ |
USERNAME | ์ฌ์ฉ์ ์ด๋ฆ |
GROUP | ์ฌ์ฉ์ ๊ทธ๋ฃน(/etc/passwd ๊ฐ์ ์ถ๋ ฅ) |
DISPLAY | X ๋์คํ๋ ์ด ์ด๋ฆ |
COLUMNS | ํ์ฌ ํฐ๋ฏธ๋์ด๋ ์๋์ฐ ํฐ๋ฏธ๋์ ์ปฌ๋ผ ์ |
LINES | ํฐ๋ฏธ๋์ ๋ผ์ธ ์ |
PS1 | ๊ธฐ๋ณธ ํ๋กฌํํธ ๋ณ์ |
PS2 | ๋ณด์กฐ ํ๋กฌํํธ ๋ณ์(๊ธฐ๋ณธ๊ฐ:>), ๋ช ๋ น์ "\"๋ฅผ ์ฌ์ฉํ์ฌ ๋ช ๋ น ํ ์ฐ์ฅ ์ ์ฌ์ฉ๋จ |
PS3 | ์ ธ ์คํฌ๋ฆฝํธ์์ select ์ฌ์ฉ ์ ํ๋กฌํํธ ๋ณ์ |
PS4 | ์ ธ ์คํฌ๋ฆฝํธ ๋๋ฒ๊น ๋ชจ๋์ ํ๋กฌํํธ ๋ณ์(๊ธฐ๋ณธ๊ฐ: +) |
BASH | BASH ์คํ ํ์ผ ๊ฒฝ๋ก |
BASH_VERSION | ์ค์น๋ BASH ๋ฒ์ |
BASH_ENV | ์คํฌ๋ฆฝํธ ์คํ ์ BASH ์์ ํ์ผ์ ์ฝ์ ์์น ๋ณ์ |
HISTFILE | history ํ์ผ ๊ฒฝ๋ก |
HISTFILESIZE | history ํ์ผ ํฌ๊ธฐ |
HISTSIZE | history ์ ์ฅ๋๋ ๊ฐ์ |
HOSTNAME | ํธ์คํธ ์ด๋ฆ |
HOSTTYPE | ์์คํ ํ๋์จ์ด ์ข ๋ฅ |
MACHTYPE | ๋จธ์ ์ข ๋ฅ(HOSTTYPE๊ณผ ๊ฐ์ ์ ๋ณด์ง๋ง ์กฐ๊ธ ๋ ์์ธํ๊ฒ ํ์๋จ) |
๋ฉ์ผ ๋ณด๊ด ๊ฒฝ๋ก | |
LOGNAME | ๋ก๊ทธ์ธ ์ด๋ฆ |
TMOUT | 0์ด๋ฉด ์ ํ์ด ์์ผ๋ฉฐ time ์๊ฐ ์ง์ ์ ์ง์ ํ ์๊ฐ ์ดํ ๋ก๊ทธ์์ |
SECONDS | ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋ ์ด ๋จ์ ์๊ฐ |
UID | ์ฌ์ฉ์ UID |
OSTYPE | ์ด์์ฒด์ ์ข ๋ฅ |
์์น ๋งค๊ฐ๋ณ์
์คํฌ๋ฆฝํธ ์ํ ์ ํจ๊ป ๋์ด์ค๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์๋ฏธ. ์๋ ํ๋ ์์น ๋งค๊ฐ๋ณ์์ ์ข
๋ฅ๋ฅผ ์ ๋ฆฌํ ๊ฒ. ๋์ฒด์ ์ผ๋ก $1..$3๊น์ง ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ.
๋งค๊ฐ๋ณ์ | ์ค๋ช |
$0 | ์คํ๋ ์คํฌ๋ฆฝํธ ์ด๋ฆ |
$1 | $1 $2 $3..${10} ํ๋ผ๋ฏธํฐ ์์๋๋ก ๋ฒํธ๊ฐ ๋ถ์ฌ๋๋ฉฐ, 10๋ฒ์งธ๋ถํฐ๋ "{}"๋ก ๊ฐ์ธ์ค์ผ ํจ |
$* | ์ ์ฒด ์ธ์ ๊ฐ |
$@ | ์ ์ฒด ์ธ์ ๊ฐ($*๋ ๋์ผํ์ง๋ง ์๋ฐ์ดํ๋ก ๋ณ์๋ฅผ ๊ฐ์ธ๋ฉด ๋ค๋ฅธ ๊ฒฐ๊ณผ ๋์ด) |
$# | ๋งค๊ฐ๋ณ์์ ์ด ๊ฐ์ |
$*๊ณผ $@
$*๊ณผ $@๋ฅผ for์ ํจ๊ป ์ฌ์ฉํ ๋ ํฐ ๋ฐ์ดํ๋ฅผ ์๋ค๋ก ์ฌ์ฉํ์ ๊ฒฝ์ฐ์ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์ ์ฐจ์ด์ ์ ํ์คํ๊ฒ ์ ์ ์์.
$*์ ์ด์ฉํด for๋ฅผ ์ฌ์ฉํ๋ฉด ํฐ๋ฐ์ดํ์ ์๊ด์์ด ์คํ์ด์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฌธ์์ด์ ํ๋ผ๋ฏธํฐ๋ก ์ธ์.
#!/bin/bash
for language in $*
do
echo "I can speak $language"
done
# $*๋ง ์ฌ์ฉํ์ ๊ฒฝ์ฐ ๋งค๊ฐ๋ณ์๋ฅผ ๋ชจ๋ ๊ฐ๋ณ๋ก ์ธ์.
$ sh mylanguage.sh Korean English "Japanese Chinese"
I can speak Korean
I can speak English
I can speak Japanese
I can speak Chinese
$@๋ฅผ ์ฌ์ฉํ์ ๋๋ $*์ ์ฌ์ฉํ์ ๋์ ๋์ผํจ์ ์ ์ ์์.
#!/bin/bash
for language in $@
do
echo "I can speak $language"
done
$ sh mylanguage.sh Korean English "Japanese Chinese"
I can speak Korean
I can speak English
I can speak Japanese
I can speak Chinese
ํฐ๋ฐ์ดํ์ ํจ๊ป $*์ ์ฌ์ฉํ๋ฉด ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ๋ณ๋ก ์ธ์ํ๋ ๊ฒ์ด ์๋๋ผ ํ๋์ ๋ฌธ์์ด๋ก ์ธ์ํจ.
#!/bin/bash
for language in "$*"
do
echo "I can speak $language"
done
$ sh mylanguage.sh Korean English "Japanese Chinese"
I can speak Korean English Japanese Chinese
ํฐ ๋ฐ์ดํ์ ํจ๊ป $@๋ฅผ ์ฌ์ฉํ๋ฉด ํฐ๋ฐ์ดํ ์ฌ์ด์ ๋ฌธ์์ด์ ํ๋์ ๋งค๊ฐ๋ณ์๋ก ์ธ์ํจ.
#!/bin/bash
for language in "$@"
do
echo "I can speak $language"
done
$ sh mylanguage.sh Korean English "Japanese Chinese"
I can speak Korean
I can speak English
I can speak Japanese Chinese
ํน์ ๋งค๊ฐ๋ณ์
ํ์ฌ ์คํ ์ค์ธ ์คํฌ๋ฆฝํธ๋ ๋ช
๋ น์ด์ ํ๋ก์ธ์ค ID๋ฅผ ํ์ธํ๊ฑฐ๋ ๋ฐ๋ก ์์์ ์คํํ ๋ช
๋ น์ด๋ ํจ์ ๋๋ ์คํฌ๋ฆฝํธ ์คํ์ด ์ ์์ ์ผ๋ก ์ํ๋์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์๋ ๋ณ์๋ค.
๋งค๊ฐ๋ณ์ | ์ค๋ช |
$$ | .ํ์ฌ ์คํฌ๋ฆฝํธ ๋๋ ๋ช ๋ น์ด์ PID |
$? | ์ต๊ทผ์ ์คํ๋ ๋ช ๋ น์ด, ํจ์, ์คํฌ๋ฆฝํธ์ ์ข ๋ฃ ์ํ |
$! | ์ต๊ทผ์ ์คํํ ๋ฐฑ๊ทธ๋ผ์ด๋(๋น๋๊ธฐ) ๋ช ๋ น์ PID |
$- | ํ์ฌ ์ต์ ํ๋๊ทธ |
์ฐธ๊ณ ๋์
- ์ฒ์ ๋ฐฐ์ฐ๋ ์ ธ ์คํฌ๋ฆฝํธ