·çÇÁ ¶õ ·çÇÁ Á¦¾î Á¶°ÇÀÌ ÂüÀÎ µ¿¾È¿¡ ¿©·¯ ¸í·É¾îµéÀ» ¹Ýº¹ÀûÀ¸·Î ¼öÇàÇÏ´Â ÄÚµå ºí·°ÀÔ´Ï´Ù.
´ÙÀ½Àº ±âº»ÀûÀÎ ·çÇÁ¹®Àε¥ C¿Í´Â ¹®¹ýÀûÀ¸·Î »ó´çÇÑ Â÷À̸¦ º¸ÀÔ´Ï´Ù.
for [arg] in [list]
do
command
...
done
list ¿¡´Â ¿ÍÀϵå Ä«µå°¡ ¿Ã ¼öµµ Àִ°Ϳ¡ ÁÖÀÇÇϼ¼¿ä.
¶Ç Çϳª ÁÖÀÇÇÒ Á¡Àº do¸¦ for¿Í ÇÑ ÁÙ¿¡ ¾´´Ù¸é listµÚ¿¡ ¼¼¹ÌÄÝ·ÐÀ» Àû¾îÁà¾ß ÇÕ´Ï´Ù.
for [arg] in [list] ; do
예 3-26. °£´ÜÇÑ for ·çÇÁ
#!/bin/bash for planet in Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune Pluto do echo $planet done echo # Àüü 'list'¸¦ Àοë(quote)ÇÏ°Ô µÇ¸é ´Ü ÇϳªÀÇ º¯¼ö¸¦ ¸¸µé¾î ³À´Ï´Ù. for planet in "Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune Pluto" do echo $planet done exit 0 |
참고: °¢ [list] Ç׸ñÀº ´ÙÁß ÀÎÀÚ¸¦ °¡Áú ¼ö ÀÖ½À´Ï´Ù. ÀÎÀÚ°¡ ±×·ìÀ¸·Î µÇ¾î ÀÖÀ» ¶§ À¯¿ëÇѵ¥ ÀÌ·± °æ¿ì¿¡´Â [list] °¢ Ç׸ñÀ» Àß¶ó °¢°¢À» À§Ä¡ ÀÎÀÚ·Î ³ÖÀ» ¼ö ÀÖ°Ô set ¸í·É¾î¸¦ ¾²¸é µË´Ï´Ù(예 3-40 Âü°í).
예 3-27. °¢ [list] Ç׸ñÀÌ ÀÎÀÚ¸¦ 2°³¾¿ °®´Â for ¹®
#!/bin/bash # ¶°µ¹À̺° ½ºÅ©¸³Æ® ´Ù½Ã º¸±â. # °¢ ¶°µ¹À̺° À̸§°ú ÇØ¿¡¼ºÎÅÍÀÇ °Å¸®¸¦ ÇÑ ½ÖÀ¸·Î ÇØ¼ ó¸®. for planet in "Mercury 36" "Venus 67" "Earth 93" "Mars 142" "Jupiter 483" do set $planet # "planet" º¯¼ö¸¦ ÆÄ½ÌÇØ¼ À§Ä¡ ÀÎÀÚ¿¡ ¼¼Æ® ½ÃÅ´. # ¿ø·¡ÀÇ À§Ä¡ ÀÎÀÚ´Â µ¤¾î½áÁö±â ¶§¹®¿¡ ÇÊ¿äÇÏ´Ù¸é ´Ù¸¥ º¯¼ö¿¡ ÀúÀå½ÃÄÑ¾ß µË´Ï´Ù. echo "$1 $2,000,000 miles from the sun" #-------ÅÇ 2°³---$2 ÀÎÀÚ¿¡ 0À» ºÙÀ̱â À§Çؼ done exit 0 |
for ¹®¿¡¼ in [list]¸¦ »©¸ÔÀ¸¸é ¸í·É¾î ÁÙ¿¡¼ ³Ñ°ÜÁØ ÀÎÀÚÀÎ $*À̶ó°í »ý°¢ÇÏ°í µ¿ÀÛÀ» ÇÕ´Ï´Ù.
예 3-28. in [list]°¡ ºüÁø for ¹®
#!/bin/bash # ÀÎÀÚ¸¦ Á༠ºÒ·¯µµ º¸°í ¾È ÁÖ°íµµ ºÒ·¯º» ´ÙÀ½ ¾î¶»°Ô µÇ´ÂÁö º¸¼¼¿ä. for a do echo $a done # 'in list' °¡ ¾øÀ» °æ¿ì¿¡´Â '$*' ¿¡ ´ëÇØ¼ µ¿ÀÛÇÕ´Ï´Ù. # (¸í·É¾î ÁÙ ÀÎÀÚ ¸®½ºÆ®) exit 0 |
예 3-29. ¹èÄ¡ ¸ðµå·Î efax »ç¿ëÇϱâ
#!/bin/bash if [ $# -ne 2 ] # Àû´çÇÑ ¸í·É¾î ÁÙ ÀÎÀÚ°¡ ³Ñ¾î ¿Ô´ÂÁö È®ÀÎ. then echo "»ç¿ë¹ý: `basename $0` phone# text-file" exit 1 fi if [ ! -f $2 ] then echo "$2 ÆÄÀÏÀº ÅØ½ºÆ® ÆÄÀÏÀÌ ¾Æ´Õ´Ï´Ù." exit 2 fi # ÁÖ¾îÁø ÅØ½ºÆ® ÆÄÀÏ¿¡¼ ÆÑ½º Æ÷¸ËÀÇ ÆÄÀÏÀ» »ý¼º. fax make $2 for file in $(ls $2.0*) # º¯È¯µÈ ÆÄÀÏÀ» ÀÌ¾î ºÙÀÓ. # º¯¼ö ¸ñ·Ï¿¡¼ ¿ÍÀϵå Ä«µå¸¦ »ç¿ë. do fil="$fil $file" done # Do the work. efax -d /dev/ttyS3 -o1 -t "T$1" $fil exit 0 |
whileÀº ·çÇÁÀÇ Á¦ÀÏ Ã³À½¿¡ Á¶°ÇÀ» °Ë»çÇϰí Á¶°ÇÀÌ ÂüÀÏ µ¿¾È °è¼Ó ·çÇÁ¸¦ µ¹¸³´Ï´Ù.
while [condition]
do
command
...
done
for/in°æ¿ìó·³ do¸¦ Á¶°Ç¹®°ú ÇÑ ÁÙ¿¡ °°ÀÌ ¾²·Á¸é ¼¼¹ÌÄÝ·ÐÀ» Àû¾îÁà¾ß ÇÕ´Ï´Ù.
while [condition] ; do
Ưº°ÇÑ while ¹®Àº ±âº» ÇüÅÂ¿Í ¾à°£ ´Ù¸£°Ô »ý°å´Âµ¥ ¿¹¸¦ µé¸é getopts °°Àº °ÍÀÌ ±×·¸½À´Ï´Ù(3.9절 Âü°í).
예 3-30. °£´ÜÇÑ while ·çÇÁ
#!/bin/bash var0=0 while [ "$var0" -lt 10 ] do echo -n "$var0 " # -n Àº ´º¶óÀÎÀ» Á¦°ÅÇØ ÁÝ´Ï´Ù. var0=`expr $var0 + 1` # var0=$(($var0+1)) ¶ó°í ÇØµµ µ¿ÀÛÇÕ´Ï´Ù. done echo exit 0 |
예 3-31. ´Ù¸¥ while ·çÇÁ
#!/bin/bash echo while [ "$var1" != end ] do echo "º¯¼ö°ª¸¦ ³ÖÀ¸¼¼¿ä #1. (³¡³»·Á¸é end) " read var1 # var1 ÀÌ ¼¼Æ®µÇ±â ¶§¹®¿¡ 'read $var1' ÀÌ ¾Æ´Õ´Ï´Ù. echo "º¯¼ö #1 = $var1" # # ¶§¹®¿¡ Àοë(quote)À» ÇØÁà¾ß ÇÕ´Ï´Ù. echo done # ÁÖÀÇ: Á¾·á Á¶°ÇÀÌ ·çÇÁ óÀ½¿¡¼ È®ÀεǹǷΠ'end' µµ ¿¡Äڵ˴ϴÙ. exit 0 |
참고: while ¹®Àº ´ÙÁß Á¶°ÇÀ» °¡Áú¼ö ÀÖ½À´Ï´Ù¸¸ ¿ÀÁ÷ ¸¶Áö¸· Á¶°ÇÀÌ ·çÇÁ¸¦ ³¡³¾ Á¶°ÇÀ» °áÁ¤ÇÕ´Ï´Ù. ¾î·µç ¿ø·¡ ·çÇÁ ¹®¹ýÀ̶û ¾à°£Àº ´Þ¶óÁý´Ï´Ù.
예 3-32. ´ÙÁß Á¶°Ç while ¹®
#!/bin/bash var1=unset previous=$var1 while echo "ÀÌÀü º¯¼ö = $previous" echo previous=$var1 [ "$var1" != end ] # "var1"ÀÌ ¹Ù·Î Àü¿¡ ¾î¶®´ÂÁö °è¼Ó È®ÀÎ # "while"¿¡ 4°¡Áö Á¶°ÇÀÌ ÀÖÁö¸¸ ¿ÀÁ÷ ¸¶Áö¸· Á¶°ÇÀÌ ·çÇÁ¸¦ Á¦¾îÇÕ´Ï´Ù. # Á¶°Ç Á¦¾î¿¡´Â [ Å×½ºÆ® ] °¡ ¾²ÀÔ´Ï´Ù. do echo "º¯¼ö°ªÀ» ³ÖÀ¸¼¼¿ä #1 (³¡³»·Á¸é end) " read var1 echo "º¯¼ö #1 = $var1" done # ÀÌ ½ºÅ©¸³Æ®°¡ ¾î¶»°Ô µ¹¾Æ°¡´ÂÁö ¾Ë¾Æ³» º¸¼¼¿ä. # ¾à°£ ¹Ì¹¦ÇÑ ºÎºÐÀÌ ÀÖ½À´Ï´Ù. exit 0 |
참고: while ¸¶Áö¸·¿¡ <À» ½á¼ Ç¥ÁØÀÔ·Â(stdin)À» ÆÄÀÏ¿¡¼ ÀçÁöÇâ ¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù(예 3-73 Âü°í).
untilÀº ·çÇÁÀÇ Á¦ÀÏ Ã³À½¿¡ Á¶°ÇÀ» °Ë»çÇϰí Á¶°ÇÀÌ °ÅÁþÀÏ µ¿¾È °è¼Ó ·çÇÁ¸¦ µ¹¸³´Ï´Ù(while°ú ¹Ý´ë).
until [condition-is-true
]
do
command
...
done
ÁÖÀÇÇÒ Á¡Àº until ÀÌ ¸î¸î ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼ ºñ½ÁÇÑ ÇüÅÂÀÇ ¹®°ú´Â ´Ù¸£°Ô ·çÇÁ óÀ½¿¡ ³¡³»´Â Á¶°ÇÀ» °Ë»çÇÑ´Ù´Â °ÍÀÔ´Ï´Ù.
for/in°æ¿ìó·³ do¸¦ Á¶°Ç¹®°ú ÇÑ ÁÙ¿¡ °°ÀÌ ¾²·Á¸é ¼¼¹ÌÄÝ·ÐÀ» Àû¾îÁà¾ß ÇÕ´Ï´Ù.
until [condition-is-true] ; do
break¿Í continue¹®Àº ´Ù¸¥ ÇÁ·Î±×·¡¹Ö ¾ð¾îµé°ú °°Àº ±â´ÉÀ» ÇÕ´Ï´Ù. break´Â ·çÇÁ¸¦ ³¡³»°í, continue´Â ·çÇÁ »çÀÌŬ³»¿¡ ³²¾ÆÀÖ´Â ³ª¸ÓÁö ¸í·É¾îµéÀ» ¶Ù¾î ³Ñ¾î ´ÙÀ½ ¹øÀ¸·Î ³Ñ¾î°©´Ï´Ù.
예 3-34. ·çÇÁ¿¡¼ break ¿Í continue ÀÇ ¿µÇâ
#!/bin/bash echo echo 1 ºÎÅÍ 20 ±îÁö ¼ýÀÚ¸¦ Âï½À´Ï´Ù. a=0 while [ $a -le 19 ] do a=$(($a+1)) if [ $a -eq 3 ] || [ $a -eq 11 ] # 3°ú 11À» Á¦¿Ü then continue # Áö±ÝÀÇ ·çÇÁ Áֱ⿡¼ ³ª¸ÓÁö¸¸ °Ç³Ê¶Ü. fi echo -n "$a " done # µ¶ÀÚ¸¦ À§ÇÑ ¿¬½À¹®Á¦: # ¿Ö ÀÌ ·çÇÁ°¡ 20±îÁö ÂïÀ»±î¿ä? echo echo echo 1¿¡¼ 20±îÁö ¼ýÀÚ¸¦ ÂïÀ» °ÍÀ̳ª 2 ´ÙÀ½¿¡ ¹«½¼ ÀÏÀÌ ÀϾ½À´Ï´Ù. ################################################################## # ¶È°°Àº ·çÇÁÀε¥, 'continue'¸¦ 'break'·Î ¹Ù²å½À´Ï´Ù. a=0 while [ $a -le 19 ] do a=$(($a+1)) if [ $a -gt 2 ] then break # ³²¾Æ ÀÖ´Â ·çÇÁ Àüü¸¦ °Ç³Ê¶Ü. fi echo -n "$a " done echo echo exit 0 |
case´Â C/C++¿¡¼ switch¿Í °°½À´Ï´Ù. Á¶°Ç¿¡ µû¶ó ¿©·¯°³ÀÇ ÄÚµå ºí·°À¸·Î °Ç³Ê¶Ù°Ô ÇØ ÁÝ´Ï´Ù. ¿©·¯°³ÀÇ if/then/elseÀ» °£´ÜÇÏ°Ô Ç¥ÇöÇØÁÖ°í ¸Þ´º°°Àº °ÍÀ» ¸¸µé¶§ Àû´çÇÕ´Ï´Ù.
case "$variable" in
"$condition1" )
command
...
;;
"$condition2" )
command
...
;;
esac
참고:
º¯¼ö¸¦ µû¿ÈÇ¥·Î ¹¾îÁִ°ÍÀÌ ÁÁ½À´Ï´Ù.
°¢ Á¶°ÇµéÀº ¿À¸¥ÂÊ °ýÈ£())·Î ³¡³³´Ï´Ù.
°¢ Á¶°Ç ºí·°Àº ÀÌÁß ¼¼¹ÌÄÝ·Ð(;;)À¸·Î ³¡³³´Ï´Ù.
Àüü case ¹®Àº esac·Î ³¡³À´Ï´Ù(case¸¦ °Å²Ù·Î ¾´ °Í).
예 3-35. case »ç¿ëÇϱâ
#!/bin/bash echo echo "¾Æ¹« Ű³ª ´©¸£°í ¸®ÅÏÀ» Ä¡¼¼¿ä." read Keypress case "$Keypress" in [a-z] ) echo "¼Ò¹®ÀÚ";; [A-Z] ) echo "´ë¹®ÀÚ";; [0-9] ) echo "¼ýÀÚ";; * ) echo "±¸µÎÁ¡, °ø¹é¹®ÀÚ µîµî";; esac # ´ë°ýÈ£¼Ó ¹üÀ§¿¡ ¼ÓÇÏ´Â ¹®ÀÚ¸¦ ¹Þ¾Æ µéÀÔ´Ï´Ù. exit 0 |
예 3-36. case·Î ¸Þ´º ¸¸µé±â
#!/bin/bash # Á¶ÀâÇÑ ·Ñ·Îµ¦½ºÇü(rolodex-type) µ¥ÀÌŸº£À̽º clear # ȸéÀ» Áö¿ì°í. echo " ÁÖ¼Ò·Ï" echo " ------" echo "´ÙÀ½Áß ÇÑ ¸íÀ» °í¸£¼¼¿ä:" echo echo "[E]vans, Roland" echo "[J]ones, Mildred" echo "[S]mith, Julie" echo "[Z]ane, Morris" echo read person case "$person" in # º¯¼ö°¡ Àοë(quote)µÈ °Í¿¡ ÁÖÀÇÇϼ¼¿ä. "E" | "e" ) # ´ë¼Ò¹®ÀÚ¸¦ ¸ðµÎ ÀνÄ. echo echo "Roland Evans" echo "4321 Floppy Dr." echo "Hardscrabble, CO 80753" echo "(303) 734-9874" echo "(303) 734-9892 fax" echo "revans@zzy.net" echo "Business partner & old friend" ;; # ÀÌÁß ¼¼¹ÌÄÝ·ÐÀÌ °¢ ¿É¼ÇÀ» ³¡³»°Ô ÇØ ÁÖ´Â °ÍÀ» ´«¿©°Ü ºÁµÎ¼¼¿ä. "J" | "j" ) echo echo "Mildred Jones" echo "249 E. 7th St., Apt. 19" echo "New York, NY 10009" echo "(212) 533-2814" echo "(212) 533-9972 fax" echo "milliej@loisaida.com" echo "Girlfriend" echo "Birthday: Feb. 11" ;; # Smith & Zane Àº ³ªÁß¿¡ Ãß°¡. * ) # ±âº» ¿É¼Ç. echo echo "¾ÆÁ÷ µ¥ÀÌŸº£À̽º¿¡ µî·ÏÀÌ ¾È µÅ ÀÖ½À´Ï´Ù." ;; esac echo exit 0 |
select´Â Korn ½©¿¡¼ µû¿Â °ÍÀε¥ ¸Þ´º¸¦ ¸¸µé¶§ »ç¿ëÇÕ´Ï´Ù.
select variable [in list]
do
command
...
break
done
»ç¿ëÀÚ¿¡°Ô list¿¡ ÀÖ´Â °ÍÁß¿¡ Çϳª¸¦ °í¸¦¼ö ÀÖµµ·Ï ÇØÁִµ¥ PS3À» ÇÁ·ÒÇÁÆ®·Î »ç¿ëÇÕ´Ï´Ù(#? °¡ ±âº»ÀÌÁö¸¸ ¹Ù²Ü ¼ö ÀÖ½À´Ï´Ù).
예 3-37. select·Î ¸Þ´º ¸¸µé±â
#!/bin/bash PS3='ÁÁ¾ÆÇÏ´Â ¾ß並 °í¸£¼¼¿ä: ' # ÇÁ·ÒÇÁÆ® ¹®ÀÚ¿À» ¼¼Æ®. echo select vegetable in "Äá" "´ç±Ù" "°¨ÀÚ" "¾çÆÄ" "¼ø¹«" do echo echo "´ç½ÅÀÌ ÁÁ¾ÆÇÏ´Â ¾ßä´Â $vegetable ÀÔ´Ï´Ù." echo "±ò±ò~~" echo break # ¿©±â¿¡ 'break'°¡ ¾øÀ¸¸é ¹«ÇÑ ·çÇÁ¸¦ µ¹°Ì´Ï´Ù. done exit 0 |
in list¸¦ ¾È ¾²¸é select´Â ½ºÅ©¸³Æ®³ª select¸¦ Æ÷ÇÔÇϰí ÀÖ´Â ÇÔ¼ö¿¡ ³Ñ°ÜÁø ¸í·É¾î ÁÙ ÀÎÀÚ($@)¸¦ »ç¿ëÇÕ´Ï´Ù(in list¸¦ ¾È ¾²´Â
for variable [in list]
¿Í ºñ±³Çغ¸¼¼¿ä).예 3-38. ÇÔ¼ö¿¡¼ select ¸¦ ½á¼ ¸Þ´º ¸¸µé±â
#!/bin/bash PS3='ÁÁ¾ÆÇÏ´Â ¾ß並 °í¸£¼¼¿ä: ' echo choice_of() { select vegetable # [in list] °¡ ºüÁ® Àֱ⠶§¹®¿¡ ÇÔ¼ö·Î ³Ñ¾î¿Â ÀÎÀÚ¸¦ ¾¹´Ï´Ù. do echo echo "´ç½ÅÀÌ ÁÁ¾ÆÇÏ´Â ¾ßä´Â $vegetable À̱º¿ä." echo "²¬²¬~~" echo break done } choice_of Äá ½Ò ´ç±Ù ¹« Å丶Åä ½Ã±ÝÄ¡ # $1 $2 $3 $4 $5 $6 # choice_of() ÇÔ¼ö·Î ³Ñ¾î°©´Ï´Ù. exit 0 |