๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋”ฐ๋ฐฐ์…ธ

[๋”ฐ๋ฐฐ์…ธ] 8. Branching

by Engineer-Lee 2025. 2. 13.
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ ์˜์ƒ ์š”์•ฝ: ๋ฐฐ์‹œ ์‰˜์˜ ๋ถ„๊ธฐ ๋ช…๋ น(Branch Command) ์‚ฌ์šฉ๋ฒ•

์ด ์˜์ƒ์—์„œ๋Š” ๋ฐฐ์‹œ(Bash)์—์„œ ํ”„๋กœ๊ทธ๋žจ ํ๋ฆ„์„ ์ œ์–ดํ•˜๋Š” ๋ถ„๊ธฐ ๋ช…๋ น์–ด๋ฅผ ๋‹ค๋ฃฌ๋‹ค.
์ฆ‰, ์–ด๋–ค ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๋Š” ๋‚ด์šฉ์ด๋‹ค.


๐Ÿ”น 1. ์ข…๋ฃŒ ์ฝ”๋“œ (Exit Code)

๐Ÿ’ก ๋ฆฌ๋ˆ…์Šค์—์„œ ๋ชจ๋“  ๋ช…๋ น์–ด๋Š” ์‹คํ–‰ ํ›„ ์ข…๋ฃŒ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•จ

โœ… ์ข…๋ฃŒ ์ฝ”๋“œ์˜ ์˜๋ฏธ

์ข…๋ฃŒ ์ฝ”๋“œ                  ์˜๋ฏธ

0 ์ •์ƒ ์ข…๋ฃŒ (Success)
1~255 ๋น„์ •์ƒ ์ข…๋ฃŒ (Error)
127 ๋ช…๋ น์–ด ์—†์Œ (command not found)
126 ์‹คํ–‰ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์–ด (permission denied)
130 Ctrl + C ๋กœ ์ข…๋ฃŒ๋จ (SIGINT)
137 kill -9 ๋ช…๋ น์–ด๋กœ ์ข…๋ฃŒ๋จ (SIGKILL)

โœ… ํ˜„์žฌ ์‹คํ–‰ํ•œ ๋ช…๋ น์–ด์˜ ์ข…๋ฃŒ ์ฝ”๋“œ ํ™•์ธ

 
date          # ์ •์ƒ ์‹คํ–‰
echo $?    # ์ถœ๋ ฅ: 0
 
datttt         # ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ช…๋ น์–ด ์‹คํ–‰
echo $?    # ์ถœ๋ ฅ: 127 (command not found)
 

โœ… ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ข…๋ฃŒ ์ฝ”๋“œ ์ง์ ‘ ์„ค์ •ํ•˜๊ธฐ

 
#!/bin/bash
echo "์ž‘์—… ์ค‘..."
exit 1                    # ๋น„์ •์ƒ ์ข…๋ฃŒ
 
 
 

์‹คํ–‰ ํ›„ $? ๊ฐ’์„ ํ™•์ธํ•˜๋ฉด 1์ด ์ถœ๋ ฅ๋จ.


๐Ÿ”น 2. ๋น„๊ต ์—ฐ์‚ฐ์ž (Test ์—ฐ์‚ฐ์ž)

๐Ÿ’ก ๋ณ€์ˆ˜๋‚˜ ํŒŒ์ผ์˜ ์ƒํƒœ๋ฅผ ๋น„๊ตํ•˜๋Š” ์—ฐ์‚ฐ์ž

โœ… ๊ธฐ๋ณธ ๋น„๊ต ์—ฐ์‚ฐ์ž

์—ฐ์‚ฐ์ž                    ์˜๋ฏธ

-eq ๊ฐ™์Œ (Equal)
-ne ๋‹ค๋ฆ„ (Not Equal)
-gt ํผ (Greater Than)
-lt ์ž‘์Œ (Less Than)
-ge ํฌ๊ฑฐ๋‚˜ ๊ฐ™์Œ (Greater or Equal)
-le ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์Œ (Less or Equal)

 

๐Ÿ“Œ ์˜ˆ์ œ: ์ˆซ์ž ๋น„๊ต

x=10
 
if [ $x -gt 5 ]; then
  echo "x๋Š” 5๋ณด๋‹ค ํฌ๋‹ค."
fi
 
 

โœ… ํŒŒ์ผ ๊ด€๋ จ ๋น„๊ต ์—ฐ์‚ฐ์ž

์—ฐ์‚ฐ์ž                        ์˜๋ฏธ

-e ํŒŒ์ผ์ด ์กด์žฌํ•˜๋ฉด ์ฐธ
-f ์ผ๋ฐ˜ ํŒŒ์ผ์ด๋ฉด ์ฐธ
-d ๋””๋ ‰ํ† ๋ฆฌ์ด๋ฉด ์ฐธ
-x ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋ฉด ์ฐธ

 

๐Ÿ“Œ ์˜ˆ์ œ: ํŒŒ์ผ ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ

 
if [ -e "/etc/passwd" ]; then
  echo "ํŒŒ์ผ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค."
else
  echo "ํŒŒ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค."
fi

 


๐Ÿ”น 3. if ๋ฌธ (์กฐ๊ฑด๋ฌธ)

๐Ÿ’ก ์กฐ๊ฑด์— ๋”ฐ๋ผ ์‹คํ–‰ํ•  ๋ช…๋ น์–ด๋ฅผ ๋ถ„๊ธฐํ•˜๋Š” ๊ธฐ๋ณธ ๊ตฌ์กฐ

โœ… ๊ธฐ๋ณธ ๊ตฌ์กฐ

if [ ์กฐ๊ฑด ]; then
  ๋ช…๋ น์–ด1
else
  ๋ช…๋ น์–ด2
fi
 

โœ… ์˜ˆ์ œ: ์ˆซ์ž ๋น„๊ต

 
x=10
 
if [ $x -gt 5 ]; then
  echo "x๋Š” 5๋ณด๋‹ค ํฌ๋‹ค."
else
  echo "x๋Š” 5๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค."
fi
 

โœ… ์˜ˆ์ œ: ํŒŒ์ผ ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ

 
if [ -d "/home/user" ]; then
  echo "๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค."
else
  echo "๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค."
fi

 


๐Ÿ”น 4. case ๋ฌธ (์—ฌ๋Ÿฌ ์กฐ๊ฑด ์ฒ˜๋ฆฌ)

๐Ÿ’ก ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์กฐ๊ฑด์„ ์ฒ˜๋ฆฌํ•  ๋•Œ if ๋ฌธ๋ณด๋‹ค case ๋ฌธ์ด ๋” ํšจ์œจ์ 

โœ… ๊ธฐ๋ณธ ๊ตฌ์กฐ

case "$๋ณ€์ˆ˜" in
  "๊ฐ’1")
    ๋ช…๋ น์–ด1 ;;
  "๊ฐ’2")
    ๋ช…๋ น์–ด2 ;;
  *)
    ๊ธฐ๋ณธ ์‹คํ–‰ ;;
esac

โœ… ์˜ˆ์ œ: ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ์‹คํ–‰ ๋‹ค๋ฅด๊ฒŒ ํ•˜๊ธฐ

 
echo "๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•˜์„ธ์š”: (start/stop/restart)"
read action
 
case "$action" in
  "start")
    echo "์„œ๋น„์Šค ์‹œ์ž‘";;
  "stop")
    echo "์„œ๋น„์Šค ์ค‘์ง€";;
  "restart")
    echo "์„œ๋น„์Šค ์žฌ์‹œ์ž‘";;
  *)
    echo "์ž˜๋ชป๋œ ์ž…๋ ฅ";;
esac

 


๐Ÿ”น 5. ์‹ค์Šต ์˜ˆ์ œ: ๋””๋ ‰ํ† ๋ฆฌ ํŒŒ์ผ ๋ชฉ๋ก ์ €์žฅ

๐Ÿ’ก ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ , ํ•ด๋‹น ๊ฒฝ๋กœ์˜ ํŒŒ์ผ ๋ชฉ๋ก์„ ์ €์žฅํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ

โœ… ์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ

 
#!/bin/bash
echo -n "๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ ์ž…๋ ฅ: "
read dir
 
if [ -d "$dir" ]; then
  ls -l "$dir" > "/tmp/$(date +%Y-%m-%d)_file_list.txt"
  echo "ํŒŒ์ผ ๋ชฉ๋ก์ด ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."
else
  echo "๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."
  exit 1
fi
 

โœ… ์‹คํ–‰ ์˜ˆ์ œ


$ bash script.sh
๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ ์ž…๋ ฅ: /home/user
ํŒŒ์ผ ๋ชฉ๋ก์ด ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
 

๐Ÿ“Œ ๐Ÿ’ก ์ •๋ฆฌ

  1. ์ข…๋ฃŒ ์ฝ”๋“œ (exit ์ฝ”๋“œ): ๋ช…๋ น์–ด ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•
  2. ๋น„๊ต ์—ฐ์‚ฐ (test ์—ฐ์‚ฐ์ž): ์ˆซ์ž, ๋ฌธ์ž์—ด, ํŒŒ์ผ ์ƒํƒœ ๋น„๊ต ๊ฐ€๋Šฅ
  3. ์กฐ๊ฑด๋ฌธ (if ๋ฌธ): ํŠน์ • ์กฐ๊ฑด์ด ์ฐธ์ธ์ง€ ํ™•์ธ ํ›„ ๋ถ„๊ธฐ ์‹คํ–‰
  4. ๋‹ค์ค‘ ์กฐ๊ฑด (case ๋ฌธ): ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์กฐ๊ฑด์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
  5. ์‹ค์Šต ์Šคํฌ๋ฆฝํŠธ: ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ ๋ชฉ๋ก์„ ์ €์žฅํ•˜๋Š” ์˜ˆ์ œ

๐Ÿš€ ๋ฐฐ์‹œ ์‰˜ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์กฐ๊ฑด๋ฌธ์„ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ๋” ๊ฐ•๋ ฅํ•œ ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ

๋ฐ˜์‘ํ˜•