๊ณ ์ ์ ์ด์ง๋ง "hello world" ๋จ์ ์ถ๋ ฅ๋ถํฐ ์์ํด๋ณด์. ํ์ผ๋ช ์ hello.sh๋ก ๋ง๋ค๊ณ ์คํํด๋ณด์. ๋จ ๋์ค์ด๋ฉด ๋์ด๋ค. (๋ง์ผ ์คํ์ด ์๋๋ค๋ฉด ํผ๋ฏธ์ ์ ๋ณ๊ฒฝํด์ผ๋๋๋ฐ ๋ญ์ง ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด ์ผ๋จ ์ด๋ ๊ฒ ํด๋ด๋ผ.chmod 700 hello.sh) ์ฐธ๊ณ : echo ๋ฌธ์ฅ์ ์ถ๋ ฅํ๋๋ฐ ์๋์ผ๋ก ์ค๋ฐ๊ฟ ๋จ ์ฐธ๊ณ : printf C์ธ์ด์ ๋น์ทํจ
#!/usr/bin/env bash
echo "hello world"
printf "hello world"
printf "%s %s" hello world
#์ฃผ์(Comments)
ํจ์(Function) ํ์์ ๋ค๋ฅธ ์ธ์ด์ ์ฐจ์ด๋ ์๋ค. ๊ทธ๋ฌ๋ function๋ ์๋ตํด๋ ๋๋ค. ํจ์ ๋ช ์ ์ฐ๋ฉด ํจ์๊ฐ ํธ์ถ์ด ๋๋๋ฐ ์ฃผ์ํ ๊ฒ์ ํธ์ถ ์ฝ๋๊ฐ ํจ์ ์ฝ๋๋ณด๋ค ๋ฐ๋์ ๋ค์ ์์ด์ผ ๋๋ค. ํจ์ ์ฝ๋ ๋ณด๋ค ์์์ ํธ์ถ ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
string_test() {
echo "string test"
}
function string_test2() {
echo "string test 2"
echo "์ธ์๊ฐ: ${@}"
}
string_test
string_test2
string_test2 "hello" "world"
#๋ณ์(Variable) ๋ณ์ ์ฌ์ฉ์์๋ "=" ๊ธฐํธ ์๋ค๋ก ๊ณต๋ฐฑ์ด ์์ด ์ ๋ ฅํ๋ฉด ๋์ ์ฐ์ฐ์๊ฐ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ธ๋ ๋ณ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ญ ๋ณ์(global variable)๋ค. ๋จ ํจ์ ์์์๋ง ์ง์ญ ๋ณ์(local variable)๋ฅผ ์ฌ์ฉํ ์ ์๋๋ฐ ์ฌ์ฉํ ๋ ค๋ฉด ๋ณ์ ๋ช ์์ local์ ๋ถ์ฌ์ฃผ๋ฉด ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ ์ญ ๋ณ์๋ ํ์ฌ ์คํ๋ ์คํฌ๋ฆฝํธ ํ์ผ์์๋ง ์ ํจํ๋ค. ์์ ์คํฌ๋ฆฝํธ์์๋ ์ฌ์ฉ ํ ์ ์๋ ๋ณ์๋ค. ๋ณ์ ๋ช ์์ export์ ๋ถ์ฌ์ฃผ๋ฉด ํ๊ฒฝ ๋ณ์(environment variable)๋ก ์ค์ ๋์ด ์์ ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ํ๊ฒฝ ๋ณ์ ์ฌ์ฉ์ ์์ฝ ๋ณ์(reserved variable)์ ์ฃผ์ํ์.(์ฐธ๊ณ ๋ก ํ๊ฒฝ ๋ณ์๋ .bash_profile์์ ์ ์ํ๋ค.)
string="hello world"
echo ${string}
string_test() {
# ์ ์ญ ๋ณ์์ ๋์ผํ๊ฒ ์ฌ์ฉํจ. ๋ง์ฝ local ๋บ๋ค๋ฉด ์ ์ญ ๋ณ์์ ๋ฎ์ด์์ด์ง๊ฒ ๋จ
local string="local"
echo ${string}
}
string_test
# ์ง์ญ ๋ณ์ ํ
์คํธ ํจ์์์ ๋์ผํ ๋ณ์ ๋ช
์ ์ฌ์ฉํ์ง๋ง ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์์
echo ${string}
export hello_world="hello world..."
/home/export_test.sh
#ํ๊ฒฝ ๋ณ์๋ฅผ ํ ์คํธํ๊ธฐ ์ํด export_test.sh ํ์ผ์ ๋ง๋ค๊ณ ์ ์ธํ ๋ณ์๋ฅผ ํ์ธํด๋ณธ๋ค. echo ${hello_world}
์์ฝ ๋ณ์(Reserved Variable) ๋ฌธ์ ์ค๋ช HOME ์ฌ์ฉ์์ ํ ๋๋ ํ ๋ฆฌ PATH ์คํ ํ์ผ์ ์ฐพ์ ๊ฒฝ๋ก LANG ํ๋ก๊ทธ๋จ ์ฌ์ฉ์ ๊ธฐ๋ณธ ์ง์๋๋ ์ธ์ด PWD ์ฌ์ฉ์์ ํ์ฌ ์์ ์ค์ธ ๋๋ ํ ๋ฆฌ FUNCNAME ํ์ฌ ํจ์ ์ด๋ฆ SECONDS ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋ ์ด ๋จ์ ์๊ฐ SHLVL ์ ๋ ๋ฒจ(์ค์ฒฉ๋ ๊น์ด๋ฅผ ๋ํ๋) SHELL ๋ก๊ทธ์ธํด์ ์ฌ์ฉํ๋ ์ PPID ๋ถ๋ชจ ํ๋ก์ธ์ค์ PID BASH BASH ์คํ ํ์ผ ๊ฒฝ๋ก BASH_ENV ์คํฌ๋ฆฝํธ ์คํ์ BASH ์์ ํ์ผ์ ์ฝ์ ์์น ๋ณ์ BASH_VERSION ์ค์น๋ BASH ๋ฒ์ BASH_VERSINFO BASH_VERSINFO[0]~BASH_VERSINFO[5]๋ฐฐ์ด๋ก ์์ธ์ ๋ณด ์ ๊ณต MAIL ๋ฉ์ผ ๋ณด๊ด ๊ฒฝ๋ก MAILCHECK ๋ฉ์ผ ํ์ธ ์๊ฐ OSTYPE ์ด์์ฒด์ ์ข ๋ฅ TERM ๋ก๊ธด ํฐ๋ฏธ๋ ํ์ HOSTNAME ํธ์คํธ ์ด๋ฆ HOSTTYPE ์์คํ ํ๋์จ์ด ์ข ๋ฅ MACHTYPE ๋จธ์ ์ข ๋ฅ(HOSTTYPE๊ณผ ๊ฐ์ ์ ๋ณด์ง๋ง ์กฐ๊ธ๋ ์์ธํ๊ฒ ํ์๋จ) LOGNAME ๋ก๊ทธ์ธ ์ด๋ฆ UID ์ฌ์ฉ์ UID EUID su ๋ช ๋ น์์ ์ฌ์ฉํ๋ ์ฌ์ฉ์์ ์ ํจ ์์ด๋ ๊ฐ(UID์ EUID ๊ฐ์ ๋ค๋ฅผ ์ ์์) USER ์ฌ์ฉ์์ ์ด๋ฆ USERNAME ์ฌ์ฉ์ ์ด๋ฆ GROUPS ์ฌ์ฉ์ ๊ทธ๋ฃน(/etc/passwd ๊ฐ์ ์ถ๋ ฅ) HISTFILE history ํ์ผ ๊ฒฝ๋ก HISTFILESIZE history ํ์ผ ํฌ๊ธฐ HISTSIZE history ์ ์ฅ๋๋ ๊ฐ์ HISTCONTROL ์ค๋ณต๋๋ ๋ช ๋ น์ ๋ํ ๊ธฐ๋ก ์ ๋ฌด DISPLAY X ๋์คํ๋ ์ด ์ด๋ฆ IFS ์ ๋ ฅ ํ๋ ๊ตฌ๋ถ์(๊ธฐ๋ณธ๊ฐ: - ๋น์นธ) VISUAL VISUAL ํธ์ง๊ธฐ ์ด๋ฆ EDITOR ๊ธฐ๋ณธ ํธ์ง๊ธฐ ์ด๋ฆ COLUMNS ํ์ฌ ํฐ๋ฏธ๋์ด๋ ์๋์ฐ ํฐ๋ฏธ๋์ ์ปฌ๋ผ ์ LINES ํฐ๋ฏธ๋์ ๋ผ์ธ ์ LS_COLORS ls ๋ช ๋ น์ ์์ ๊ด๋ จ ์ต์ PS1 ๊ธฐ๋ณธ ํ๋กฌํํธ ๋ณ์(๊ธฐ๋ณธ๊ฐ: bash$) PS2 ๋ณด์กฐ ํ๋กฌํํธ ๋ณ์(๊ธฐ๋ณธ๊ฐ: >), ๋ช ๋ น์ ""๋ฅผ ์ฌ์ฉํ์ฌ ๋ช ๋ น ํ์ ์ฐ์ฅ์ ์ฌ์ฉ๋จ PS3 ์ ์คํฌ๋ฆฝํธ์์ select ์ฌ์ฉ์ ํ๋กฌํํธ ๋ณ์(๊ธฐ๋ณธ๊ฐ: #?) PS4 ์ ์คํฌ๋ฆฝํธ ๋๋ฒ๊น ๋ชจ๋์ ํ๋กฌํํธ ๋ณ์(๊ธฐ๋ณธ๊ฐ: +) TMOUT 0์ด๋ฉด ์ ํ์ด ์์ผ๋ฉฐ time์๊ฐ ์ง์ ์ ์ง์ ํ ์๊ฐ ์ดํ ๋ก๊ทธ์์
์์น ๋งค๊ฐ ๋ณ์(Positional Parameters)
๋ฌธ์ ์ค๋ช
$0 ์คํ๋ ์คํฌ๋ฆฝํธ ์ด๋ฆ
$1 $1 $2
ํน์ ๋งค๊ฐ ๋ณ์(Special Parameters)
๋ฌธ์ ์ค๋ช
$$ ํ์ฌ ์คํฌ๋ฆฝํธ์ PID
๋งค๊ฐ ๋ณ์ ํ์ฅ(Parameter Expansion)
์๋ ์๋ฅผ ํ
์คํธํ๊ธฐ ์ํ ๋ณ์: string="abc-efg-123-abc"
๋ฌธ์ ์ค๋ช
๋ฐฐ์ด(Array Variable) ๋ฐฐ์ด ๋ณ์ ์ฌ์ฉ์ ๋ฐ๋์ ๊ดํธ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.(์: ${array[1]}) ์ฐธ๊ณ : 1์ฐจ์ ๋ฐฐ์ด๋ง ์ง์ํจ
declare -a array
array=("hello" "test" "array" "world")
array[4]="variable"
array=(${array[@]} "string")
echo "hello world ์ถ๋ ฅ: ${array[0]} ${array[3]}"
echo "๋ฐฐ์ด ์ ์ฒด ์ถ๋ ฅ:
printf "๋ฐฐ์ด ์ถ๋ ฅ: %s\n" ${array[@]}
unset array[4] echo "๋ฐฐ์ด ์ ์ฒด ์ถ๋ ฅ: ${array[@]}"
unset array echo "๋ฐฐ์ด ์ ์ฒด ์ถ๋ ฅ: ${array[@]}"
๋ณ์ ํ์ ์ง์ (Variables Revisited) Bash ๋ณ์๋ ํ์ ์ ๊ตฌ๋ถํ์ง ์๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌธ์์ด์ด๋ค. ๋จ ๋ฌธ๋งฅ์ ๋ฐ๋ผ์ ์ฐ์ฐ ์ฒ๋ฆฌํ๋ค. ๊ทธ๋ฐ๋ฐ ๋ถ์์ ํ ํํ์ declare, typeset ํ์ ์ง์ ๋ช ๋ น์ ์ง์ํ๋ค.(๋ ๋ช ๋ น์ ๋์ผํจ) ์ฐธ๊ณ : ์ฝ๋ฉํธ์ ์๋ ๋ค๋ฅธ ๋ฌธ๋ฒ ์ฌ์ฉ์ ์ถ์ฒํ๋ค.
declare -r string_variable
declare -i number_variable=10
declare -a array_variable
declare -x export_variable="hello world"
declare -f
declare -f ํจ์์ด๋ฆ
๋ ผ๋ฆฌ ์ฐ์ฐ์(Logical Operators) ๋ฌธ์ ์ค๋ช &&, -a ๋ ผ๋ฆฌ AND ||, -o ๋ ผ๋ฆฌ OR
์ฐ์ ์ฐ์ฐ์(Arithmetic Operators) ๋ฌธ์ ์ค๋ช
- ๋ํ๊ธฐ
- ๋นผ๊ธฐ
- ๊ณฑํ๊ธฐ / ๋๋๊ธฐ ** ๋์น(exponentiation), ๊ฑฐ๋ญ์ ๊ณฑ(power) % modulo ๋ mod (์ ์ ๋๋๊ธฐ์์ ๋๋จธ์ง ๊ฐ) += ์์๊ฐ ๋งํผ ์ฆ๊ฐ(plus-equal) -= ์์๊ฐ ๋งํผ ๊ฐ์(minus-equal) *= ์์๊ฐ์ ๊ณฑํจ(times-equal) /= ์์๊ฐ์ผ๋ก ๋๋(slash-equal) %= ์์๊ฐ์ผ๋ก ๋๋ ๋๋จธ์ง ๊ฐ(mod-equal)
๋นํธ ์ฐ์ฐ์(Bitwise Operators) ๋ฌธ์ ์ค๋ช << ๋นํธ ์ผ์ชฝ ์ฌํํธ(์ฌํํธ ํ ๋ฒ๋น 2๋ฅผ ๊ณฑํ๋ ๊ฒ๊ณผ ๋์ผํจ) <<= left-shift-equal
๋นํธ ์ค๋ฅธ์ชฝ ์ฌํํธ(์ฌํํธ ํ ๋ฒ๋น 2๋ก ๋๋) = right-shift-equal(<<=์ ๋ฐ๋) & ๋นํธ and &= ๋นํธ and-equal | ๋นํธ OR |= ๋นํธ OR-equa ~ ๋นํธ negate ! ๋นํธ NOT ^ ๋นํธ XOR ^= ๋นํธ XOR-equa
๊ธฐํ ์ฐ์ฐ์(Miscellaneous Operators) ๋ฌธ์ ์ค๋ช , ์ฝค๋ง ์ฐ์ฐ์(comma operator), 2๊ฐ ์ด์์ ์ฐ์ ์ฐ์ฐ์ ๋ฌถ์ด์ค
์ ์ ๋น๊ต(Integer Comparison) ๋ฌธ์ ์ค๋ช -eq ๊ฐ์ -ne ๊ฐ์ง ์์
, -gt ๋ ํผ(> ์ด์ค ์๊ดํธ์์ ์ฌ์ฉ ๊ฐ๋ฅ) =, -ge ๋ํฌ๊ฑฐ๋ ๊ฐ์(>= ์ด์ค ์๊ดํธ์์ ์ฌ์ฉ ๊ฐ๋ฅ) <, -lt ๋ ์์(< ์ด์ค ์๊ดํธ์์ ์ฌ์ฉ ๊ฐ๋ฅ) <=, -le ๋ ์๊ฑฐ๋ ๊ฐ์(<= ์ด์ค ์๊ดํธ์์ ์ฌ์ฉ ๊ฐ๋ฅ)
๋ฌธ์์ด ๋น๊ต(String Comparison) ๋ฌธ์ ์ค๋ช =, == ๊ฐ์ != ๊ฐ์ง ์์ < ASCII ์ํ๋ฒณ ์์์ ๋ ์์
ASCII ์ํ๋ฒณ ์์์์ ๋ ํผ -z ๋ฌธ์์ด์ด NULL, ๊ธธ์ด๊ฐ 0์ธ ๊ฒฝ์ฐ -n ๋ฌธ์์ด์ด NULL์ด ์๋ ${๋ณ์} ๋ฌธ์์ด์ด NULL์ด ์๋
ํ์ผ ๋น๊ต(File test operators) ๋ฌธ์ ์ค๋ช -e ํ์ผ์ด ์กด์ฌ -f ํ์ผ์ด ์กด์ฌํ๊ณ ์ผ๋ฐ ํ์ผ์ธ ๊ฒฝ์ฐ(๋๋ ํ ๋ฆฌ ํน์ ์ฅ์นํ์ผ์ด ์๋ ๊ฒฝ์ฐ) -s ํ์ผ์ด ์กด์ฌํ๊ณ 0๋ณด๋ค ํฐ ๊ฒฝ์ฐ -d ํ์ผ์ด ์กด์ฌํ๊ณ ๋๋ ํ ๋ฆฌ์ธ ๊ฒฝ์ฐ -b ํ์ผ์ด ์กด์ฌํ๊ณ ๋ธ๋ก์ฅ์น ํ์ผ์ธ ๊ฒฝ์ฐ -c ํ์ผ์ด ์กด์ฌํ๊ณ ์บ๋ฆญํฐ ์ฅ์น ํ์ผ์ธ ๊ฒฝ์ฐ -p ํ์ผ์ด ์กด์ฌํ๊ณ FIFO์ธ ๊ฒฝ์ฐ -h ํ์ผ์ด ์กด์ฌํ๊ณ ํ ๊ฐ ์ด์์ ์ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ ์ค์ ๋ ๊ฒฝ์ฐ -L ํ์ผ์ด ์กด์ฌํ๊ณ ํ ๊ฐ ์ด์์ ์ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ ์ค์ ๋ ๊ฒฝ์ฐ -S ํ์ผ์ด ์์ผ ๋๋ฐ์ด์ค์ธ ๊ฒฝ์ฐ -t ํ์ผ์ด ๋์คํฌ๋ฆฝํฐ๊ฐ ํฐ๋ฏธ๋ ๋๋ฐ์ด์ค์ ์ฐ๊ด์ด ์์ -r ํ์ผ์ด ์กด์ฌํ๊ณ ์ฝ๊ธฐ ๊ฐ๋ฅํ ๊ฒฝ์ฐ -w ํ์ผ์ด ์กด์ฌํ๊ณ ์ฐ๊ธฐ๊ฐ ๊ฐ๋ฅํ ๊ฒฝ์ฐ -x ํ์ผ์ด ์กด์ฌํ๊ณ ์คํ ๊ฐ๋ฅํ ๊ฒฝ์ฐ -g ํ์ผ์ด ์กด์ฌํ๊ณ SetGID๊ฐ ์ค์ ๋ ๊ฒฝ์ฐ -u ํ์ผ์ด ์กด์ฌํ๊ณ SetUID๊ฐ ์ค์ ๋ ๊ฒฝ์ฐ -k ํ์ผ์ด ์กด์ฌํ๊ณ ์คํฐํค ๋นํธ(Sticky bit)๊ฐ ์ค์ ๋ ๊ฒฝ์ฐ -O ์์ ์ด ์์ ์์ -G ๊ทธ๋ฃน ์์ด๋๊ฐ ์์ ๊ณผ ๊ฐ์ -N ๋ง์ง๋ง์ผ๋ก ์ฝํ ํ์ ๋ณ๊ฒฝ ๋์ file1 -nt file2 file1 ํ์ผ์ด file2 ํ์ผ๋ณด๋ค ์ต์ ์ file1 -ot file2 file1 ํ์ผ์ด file2 ํ์ผ๋ณด๋ค ์์ ๊ฒ์ file1 -ef file2 file1 ํ์ผ๊ณผ file2 ํ์ผ์ด ๊ฐ์ ํ์ผ์ ํ๋ ๋งํฌํ๊ณ ์์ ! ์กฐ๊ฑด์ด ์ ๋ง์ผ๋ฉด ์ฐธ(์: ! -e file)
๋ฐ๋ณต๋ฌธ(for, while, until) ๋ฐ๋ชฉ๋ฌธ ์์ฑ ์ ์๋ ๋ช ๋ น์ด(ํ๋ฆ์ ์ด)์ ์์๋๋ฉด ์ข๋ค. ๋ฐ๋ณต๋ฌธ์ ๋น ์ ธ ๋๊ฐ๋: break ํ์ฌ ๋ฐ๋ณต๋ฌธ์ด๋ ์กฐ๊ฑด์ ๊ฑด๋ ๋ธ๋: continue
for string in "hello" "world" "..."; do;
echo ${string};
done
์ํ ์กฐ๊ฑด์ด true ์ผ๋ ์คํ๋จ (์คํ ํ์ ์ง์ ์ด ํ์ํ์ง ์์ ๋ฐ๋ณต๋ฌธ ํ์ ์ ์ข์)
count=0
while [ ${count} -le 5 ]; do
echo ${count}
count=$(( ${count}+1 ))
done
์ํ ์กฐ๊ฑด์ด false ์ผ๋ ์คํ๋จ (์คํ ํ์ ์ง์ ์ด ํ์ํ์ง ์์ ๋ฐ๋ณต๋ฌธ ํ์ ์ ์ข์)
count2=10
until [ ${count2} -le 5 ]; do
echo ${count2}
count2=$(( ${count2}-1 ))
done
์กฐ๊ฑด๋ฌธ(if...elif...else...fi) ์กฐ๊ฑด๋ฌธ ์์ฑ ์ ์ฃผ์ํด์ผ๋ ๋ถ๋ถ์ ์คํ ๋ฌธ์ฅ์ด ์์ผ๋ฉด ์ค๋ฅ ๋ฐ์ํจ
string1="hello"
string2="world"
if [ ${string1} == ${string2} ]; then
# ์คํ ๋ฌธ์ฅ์ด ์์ผ๋ฉด ์ค๋ฅ ๋ฐ์ํจ
# ์๋ echo ๋ฌธ์ฅ์ ์ฃผ์์ฒ๋ฆฌํ๋ฉด ํ์ธ ๊ฐ๋ฅํจ
echo "hello world"
elif [ ${string1} == ${string3} ]; then
echo "hello world 2"
else
echo "hello world 3"
fi
if [ ${string1} == ${string2} ] && [ ${string3} == ${string4} ]
..์๋ต
if [ ${string1} == ${string2} ] || [ ${string3} == ${string4} ]
..์๋ต
if [[ ${string1} == ${string2} || ${string3} == ${string4} ]] && [ ${string5} == ${string6} ]
..์๋ต
์ ํ๋ฌธ(case) ์ ๊ท์์ ์ง์ํ๋ฉฐ | ๊ธฐํธ๋ก ๋ค์ค ๊ฐ์ ์ ๋ ฅ ๊ฐ๋ฅํ๋ฉฐ ์กฐ๊ฑด์ ๋ฌธ์ฅ ๋์๋ ;; ๊ธฐํธ๋ก ๋์ ํ์ํ๋ค. ์ฐธ๊ณ : ๋๋ฌธ์์ ์๋ฌธ์๋ ๋ค๋ฅธ ๋ฌธ์๋ค.
for string in "HELLO" "WORLD" "hello" "world" "s" "start" "end" "etc"; do
# case๋ฌธ ์์
case ${string} in
hello|HELLO)
echo "${string}: hello ์ผ๋"
;;
wo*)
echo "${string}: wo๋ก ์์ํ๋ ๋จ์ด ์ผ๋"
;;
s|start)
echo "${string}: s ํน์ start ์ผ๋"
;;
e|end)
echo "${string}: e ํน์ end ์ผ๋"
;;
*)
echo "${string}: ๊ธฐํ"
;;
esac
# //case๋ฌธ ๋
done
๋๋ฒ๊น (Debugging) ๊ฐ๋จํ๊ฒ๋ echo, exit ๋ช ๋ น๋ tee ๋ช ๋ น์ด๋ก ๋๋ฒ๊น ํ๋ค. ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์คํ ์ ์ต์ ์ ์ฃผ๊ฑฐ๋ ์ฝ๋์ ํ์ค๋ง ์ถ๊ฐํ๋ฉด ํด๋ณผ์ ์๋ค. Bash ์ต์ (์คํฌ๋ฆฝํธ ์คํ ์) set ์ต์ (์คํฌ๋ฆฝํธ ์ฝ๋ ์ฝ์ ) ์ค๋ช bash -n set -n, set -o noexec ์คํฌ๋ฆฝํธ ์คํ์์ด ๋จ์ ๋ฌธ๋ฒ ์ค๋ฅ๋ง ๊ฒ์ฌ(์ฐพ์ง ๋ชปํ๋ ๋ฌธ๋ฒ ์ค๋ฅ๊ฐ ์์์ ์์) bash -v set -v, set -o verbose ๋ช ๋ น์ด ์คํ์ ํด๋น ๋ช ๋ น์ด ์ถ๋ ฅ(echo) bash -x set -x, set -o xtrace ๋ช ๋ น์ด ์คํํ ํด๋น ๋ช ๋ น์ด ์ถ๋ ฅ(echo) set -u, set -o nounset ๋ฏธ์ ์ธ๋ ๋ณ์ ๋ฐ๊ฒฌ์ "unbound variable" ๋ฉ์์ง ์ถ๋ ฅ