Shell Function์ alias๋ณด๋ค ๊ฐ๋ ฅํ ๋ฆฌ๋ ์ค ์๋ํ ๋๊ตฌ์ ๋๋ค. ๋ช ๋ น์ด ๋ฌถ๊ธฐ, ์ธ์ ์ฒ๋ฆฌ, ํ๊ฒฝ๋ณ์ ํ์ฉ, bash·zsh ํจ์ ์์ฑ๋ฒ๊ณผ ์ค์ ์์ ๊น์ง ํ ๋ฒ์ ์ ๋ฆฌํ์ต๋๋ค.

๋ฆฌ๋ ์ค๋ฅผ ์ด๋ ์ ๋ ์ฐ๋ค ๋ณด๋ฉด ๋ฐ๋์ ๋ถ๋ชํ๋ ์๊ฐ์ด ์๋ค.
- alias ๋ง์ผ๋ก๋ ์ธ์๋ฅผ ์ฒ๋ฆฌํ ์ ์๊ณ
- ์กฐ๊ฑด๋ฌธ·๋ฐ๋ณต๋ฌธ ๊ฐ์ ๋ก์ง๋ ๋ฃ์ ์ ์๊ณ
- ์ฌ๋ฌ ๋ช ๋ น์ด๋ฅผ ๋ฌถ์ด ์๋ํํ๊ธฐ๊ฐ ์ด๋ ต๋ค
์ฒ์์๋ alias๊ฐ ๊ฝค ํธํ๋ค.
ํ์ง๋ง ๊ฐ๋ฐ์ ์ค๋ ํ ์๋ก alias์ ํ๊ณ๋ ๋ช
ํํด์ง๋ค.
์ด๋ ํ์ํ ๊ฒ์ด ๋ฐ๋ก Shell Function(์ ธ ํจ์)์ด๋ค.
์
ธ ํจ์๋ ๋จ์ํ ๋จ์ถ ๋ช
๋ น์ด ์๋๋ผ,
“๋ด๊ฐ ์ํ๋ ๋์์ ์ ๋ช
๋ น์ด์ฒ๋ผ ๋ง๋ค์ด ์ฐ๋ ๋ฐฉ๋ฒ”์ด๋ค.
์ด ๊ธ์์๋ bash·zsh ๊ธฐ์ค์ Shell Function ๋ฌธ๋ฒ, ์ธ์ ์ฒ๋ฆฌ, return, ์ค์ ์์ ,
๊ทธ๋ฆฌ๊ณ ํ์
๊ฐ๋ฐ์๋ค์ด ์ค์ ๋ก ์ฐ๋ ๊ด๋ฆฌ ๋ฐฉ๋ฒ๊น์ง ๋ชจ๋ ์ ๋ฆฌํ๋ค.
1. Shell Function์ด๋ ๋ฌด์์ธ๊ฐ?
์ฌ๋ฌ ๋ช ๋ น์ด๋ฅผ ํ๋์ ์๋ก์ด ๋ช ๋ น์ด์ฒ๋ผ ๋ง๋ค ์ ์๋ ์ ธ์ ๊ธฐ๋ฅ
์:
hello() {
echo "Hello Roroppwa!"
}
์คํ:
hello
์ถ๋ ฅ:
Hello Roroppwa!
์ฆ, ์๋ก์ด “๋ช ๋ น์ด”๋ฅผ ๋ง๋๋ ๊ธฐ๋ฅ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
alias๋ ๋จ์ ํ ์คํธ ์นํ์ด๊ธฐ ๋๋ฌธ์ ์๋ ๊ธฐ๋ฅ์ด ๋ชจ๋ “๋ถ๊ฐ๋ฅ”ํ๋ค:
| ๊ธฐ๋ฅ | alias | function |
| ์ธ์ ์ฒ๋ฆฌ | โ | โ |
| ์กฐ๊ฑด๋ฌธ(if) | โ | โ |
| ๋ฐ๋ณต๋ฌธ(for/while) | โ | โ |
| ์ฌ๋ฌ ๋ช ๋ น ๋ฌถ๊ธฐ | ๋งค์ฐ ์ ํ์ | โ ์์ ๊ฐ๋ฅ |
| ์ ์ง๋ณด์ | ๋ฎ์ | ๋์ |
๋ฐ๋ผ์ ๋ฆฌ๋
์ค๋ฅผ ์กฐ๊ธ์ด๋ผ๋ ๊น๊ฒ ๋ค๋ฃจ๋ ์ฌ๋์ด๋ผ๋ฉด ์์ฐ์ค๋ฝ๊ฒ
alias → function ์์ผ๋ก ๋ฐ์ ํ๊ฒ ๋๋ค.
2. Shell Function ๊ธฐ๋ณธ ๋ฌธ๋ฒ
ํจ์๋ ๋ ๊ฐ์ง ๋ฌธ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค.

(1) POSIX ๊ถ์ฅ ๋ฌธ๋ฒ
myfunc() {
echo "Run myfunc"
}
(2) function ํค์๋ ์ฌ์ฉ
function myfunc {
echo "Run myfunc"
}
๋ ๋ค ๋์ผํ๊ฒ ๋์ํ๋ค.
โป POSIX ํธํ์ฑ์ ์๊ฐํ๋ฉด ์ฒซ ๋ฒ์งธ ๋ฌธ๋ฒ์ ๊ถ์ฅํจ.
3. Shell Function์ ์ด๋์ ์ ์ฅํ๋?
์ ํจ์๋ฅผ ์ ์ธํ๋ฉด ํ์ฌ ํ๊ฒฝ์๋ง ์ ์ฉ๋๋ค.
ํฐ๋ฏธ๋์ ๋ซ์ผ๋ฉด ์ฌ๋ผ์ง๋ค.
์ง์์ ์ผ๋ก ์ฌ์ฉํ๋ ค๋ฉด ์๋ ํ์ผ์ ๋ฃ์ด์ผ ํ๋ค:
- bash ์ฌ์ฉ์: ~/.bashrc
- zsh ์ฌ์ฉ์: ~/.zshrc
์ ธ ํ์ผ
| ์ | ํ์ผ |
| bash | ~/.bashrc |
| zsh | ~/.zshrc |
์:
nano ~/.zshrc
์๋ ๋ด์ฉ์ ์ถ๊ฐ:
backup() {
cp "$1" "$1.bak"
}
์ ์ฉ:
source ~/.zshrc
4. ํจ์์์ ์ธ์(arguments) ์ฌ์ฉํ๋ ๋ฒ
alias์ function์ ๊ฐ์ฅ ํฐ ์ฐจ์ด๋
ํจ์๋ ์ธ์๋ฅผ ๋ฐ์ ์ ์๋ค๋ ์ ์ด๋ค.
1) ์ธ์๋ $1, $2, $3… ๋ก ์ ๊ทผ
์:
show() {
echo "์ฒซ ๋ฒ์งธ ์ธ์: $1"
echo "๋ ๋ฒ์งธ ์ธ์: $2"
}
์คํ:
show hello world
์ถ๋ ฅ:
์ฒซ ๋ฒ์งธ ์ธ์: hello
๋ ๋ฒ์งธ ์ธ์: world
2) ๋ชจ๋ ์ธ์ ์ถ๋ ฅ ($@)
logall() {
echo "๋ฐ์ ์ธ์ ์ ์ฒด: $@"
}
3) ์ธ์ ๊ฐ์($#)
countargs() {
echo "์ธ์ ๊ฐ์: $#"
}
5. Shell Function ์ค์ ์์ 15๊ฐ
์๋ ์์ ๋ ๊ฐ๋ฐ์·์ด์์·์๋ฒ ๋๋ ์์ง๋์ด๊ฐ ์ค์ ๋ก ์ฌ์ฉํ๋ ํจ์๋ค์ด๋ค.
1) ๋น๋ ๋ก๊ทธ ์๋ ์์ฑ ํจ์
makelog() {
make "$@" 2>&1 | tee make.log
}
2) ํ๋ก์ ํธ ๋๋ ํฐ๋ฆฌ ๋น ๋ฅด๊ฒ ์ด๋
cdd() {
cd ~/Desktop/Projects/"$1"
}
3) ์์ ํ ํ์ผ ๋ฐฑ์
backup() {
cp "$1" "$1.bak"
}
4) ์์คํ ๋ชจ๋ํฐ๋ง ๋จ์ถ ํจ์
mps() {
ps aux | grep "$1"
}
5) tar ์๋ ์์ถ
targz() {
tar -czvf "$1.tar.gz" "$1"
}
6) ๊ฐ์ฅ ํฐ ํ์ผ 20๊ฐ ์ฐพ๊ธฐ
big20() {
du -ah . | sort -hr | head -20
}
7) Nginx ๋ก๊ทธ tail
nginxlog() {
tail -f /var/log/nginx/access.log
}
8) git ๋จ์ถ ํจ์
gs() { git status; }
gc() { git commit; }
gp() { git push; }
9) ํน์ ํฌํธ ์ฌ์ฉํ๋ ํ๋ก์ธ์ค ์ฐพ๊ธฐ
port() {
ss -tulnp | grep "$1"
}
10) ๋น ๋ฅธ ping ํ ์คํธ
p() {
ping -c 4 "$1"
}
11) ์คํ ์๋ ๊ณ ์นจ ์ํ wrapper
grpe() {
grep "$@"
}
12) rm ๋ณดํธ ๊ธฐ๋ฅ
safe_rm() {
mv "$1" ~/.trash/
}
13) ๋ ์ง ๊ธฐ๋ฐ ๋ฐฑ์
ts_backup() {
cp "$1" "$1_$(date +%Y%m%d_%H%M%S)"
}
14) PATH ์๋ ์ถ๊ฐ ํจ์
addpath() {
export PATH="$1:$PATH"
}
15) docker ์ปจํ ์ด๋ ๋น ๋ฅด๊ฒ ๋ค์ด๊ฐ๊ธฐ
dsh() {
docker exec -it "$1" /bin/sh
}
6. Shell Function์์ return ์ฌ์ฉ๋ฒ

1) ์ ธ ํจ์๋ return ๊ฐ์ exit code(0~255)๋ก ํํํ๋ค.
return 0 # ์ฑ๊ณต
return 1 # ์คํจ
2) ํจ์ ๋ด๋ถ์์ exit ์ฌ์ฉํ๋ฉด ์ ๋ ์ ๋จ
exit๋ ์ ธ์ ์ข ๋ฃํ๋ค.
3) ๋ง์ง๋ง ๋ช ๋ น์ ์ํ๋ $? ๋ก ํ์ธ
myfunc
echo $? # myfunc์ ๋ฐํ๊ฐ
์ด ๊ฐ๋ ์ ์คํฌ๋ฆฝํธ ์์ฑ ์ ๋งค์ฐ ์ค์ํ๋ค.
7. ์ง์ญ ๋ณ์(local) ์ฌ์ฉ
zsh์ bash๋ local์ ๋์์ด ์กฐ๊ธ ๋ค๋ฅด์ง๋ง ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ์ ๊ฐ๋ค.
myfunc() {
local msg="hello"
echo $msg
}
๋๊ท๋ชจ ์คํฌ๋ฆฝํธ์์ ๋ฐ๋์ local์ ์จ์ผ ํ๋ค.
(global ์ค์ผ ๋ฐฉ์ง)
8. Shell Function ๋๋ฒ๊น ๋ฐฉ๋ฒ
1) ํจ์ ์ ์ ํ์ธ
type myfunc
2) ํจ์ ์ ์ฒด ๋ด์ฉ ๋ณด๊ธฐ
declare -f myfunc
zsh์์๋:
functions myfunc
3) ํจ์ ์ญ์
unset -f myfunc
9. Shell Function์ ๋ณ๋ ํ์ผ๋ก ๋ถ๋ฆฌํด์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ
zshrc / bashrc๊ฐ ๊ธธ์ด์ง๋ฉด ๋งค์ฐ ๋นํจ์จ์ ์ด๋ค.
์๋์ฒ๋ผ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ถ์ฒํ๋ค.
~/.shell/
โโ functions/
โ โโ git.sh
โ โโ backup.sh
โ โโ docker.sh
โ โโ network.sh
zshrc์ ์ถ๊ฐ:
for f in ~/.shell/functions/*.sh; do
source $f
done
10. OpenWrt·์๋ฒ ๋๋ ํ๊ฒฝ์์ Shell Function ํ์ฉ
์๋ฒ ๋๋ ํ๊ฒฝ์์๋ ํจ์๊ฐ ํนํ ๋น๋๋ค.
- ๋คํธ์ํฌ ์ค์ ์๋ํ
- ์์คํ ๋ก๊ทธ ์์ง
- ๋น๋ ์๋ํ
- rc.d ์คํฌ๋ฆฝํธ ๋จ์ถ
์:
wanip() {
ifconfig eth0 | grep "inet " | awk '{print $2}'
}
์ด ํจ์๋ BusyBox ๊ธฐ๋ฐ ํ๊ฒฝ์์๋ ๋์ํ๋ฉฐ:
- ifconfig ์๋ ํ๊ฒฝ์์๋ ์ฌ์ฉ ๊ฐ๋ฅ
- prefix ์ ๊ฑฐ๊น์ง ์๋ ์ฒ๋ฆฌ
- ๋คํธ์ํฌ ์๋ํ ์คํฌ๋ฆฝํธ์์ ์์ฃผ ์ฌ์ฉ
์๋ฒ ๋๋ ์์ง๋์ด๋ผ๋ฉด function ๊ธฐ๋ฐ ์๋ํ๋ ์ฌ์ค์ ํ์๋ค.
11. FAQ
Q1. alias์ ํจ์ ์ค ๋ฌด์์ ์จ์ผ ํ๋์?
๊ฐ๋จ → alias
๋ณต์ก → ํจ์
Q2. ํจ์๋ ์ด๋์ ์ ์ฅํด์ผ ํ๋์?
bashrc ๋๋ zshrc.
Q3. ํจ์์์ ์ธ์๋ฅผ ๋ฌด์ ํ์ผ๋ก ๋ฐ์ ์ ์๋์?
๊ฐ๋ฅํ๋ค.
Q4. ํจ์ ์ด๋ฆ์ ์๋ฌด๊ฑฐ๋ ๊ฐ๋ฅํ๊ฐ์?
๋ค, ํ์ง๋ง ๋ช ๋ น์ด ์ด๋ฆ๊ณผ ์ถฉ๋ํ์ง ์๋๋ก ์ฃผ์.
Q5. ํจ์ ํธ์ถ์ ์ด๋ป๊ฒ ํ๋์?
์ด๋ฆ๋ง ์ ๋ ฅํ๋ฉด ๋จ.
Q6. ์คํฌ๋ฆฝํธ์์ ํจ์ ์ฌ์ฉ ๊ฐ๋ฅ?
๊ฐ๋ฅํ๋ฉฐ ๋งค์ฐ ๊ฐ๋ ฅํจ.
Q7. ํจ์ ์์์ ํ๊ฒฝ๋ณ์ ์ค์ ํ๋ฉด?
ํ์ฌ ์ ธ์ ์ํฅ์ ์ค ์ ์์.
Q8. exit๋ฅผ ์ฐ๋ฉด ์ ๋๋์?
exit๋ ์ ธ ์์ฒด๋ฅผ ์ข ๋ฃํ๋ฏ๋ก return ์ฌ์ฉ.
Q9. type์ผ๋ก ํจ์ ํ์ธ ๊ฐ๋ฅํ๊ฐ์?
๊ฐ๋ฅํจ.
Q10. ์๋์์ฑ์ ๋ณ๋ ์ค์ ํ์?
zsh๋ ์๋์์ฑ ์ง์์ด ๋งค์ฐ ๊ฐ๋ ฅํจ.
12. Shell Function์ “๋ฆฌ๋ ์ค ์๋ํ์ ํต์ฌ ๊ธฐ์ ”
Shell Function์ ๋จ์ํ ํธ์ ๊ธฐ๋ฅ์ด ์๋๋ค.
- ์ธ์ ์ฒ๋ฆฌ
- ์กฐ๊ฑด๋ฌธ·๋ฐ๋ณต๋ฌธ
- ํ๊ฒฝ๋ณ์ ์ ์ด
- ๋ช ๋ น์ด ๋ฌถ๊ธฐ
- ์๋ํ ๋ก์ง ๊ตฌ์ฑ
์ด ๋ชจ๋ ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋ฆฌ๋ ์ค ์๋ํ์ ํต์ฌ ๋๊ตฌ๋ค.
alias๊ฐ ๋ฆฌ๋
์ค ์ด๋ณด์์ ์์์ด๋ผ๋ฉด,
Shell Function์ ๊ฐ๋ฐ์๋ฅผ ‘๊ณ ๊ธ ์ฌ์ฉ์’๋ก ๋ง๋ค์ด์ฃผ๋ ๊ธฐ์ ์ด๋ค.
“alias๋ ์์์ผ ๋ฟ, function์ด ์ง์ง ๋ฆฌ๋ ์ค ์์ฐ์ฑ์ ๋ง๋ ๋ค.”