3.8. ·çÇÁ

·çÇÁ ¶õ ·çÇÁ Á¦¾î Á¶°ÇÀÌ ÂüÀÎ µ¿¾È¿¡ ¿©·¯ ¸í·É¾îµéÀ» ¹Ýº¹ÀûÀ¸·Î ¼öÇàÇÏ´Â ÄÚµå ºí·°ÀÔ´Ï´Ù.

for (in)

´ÙÀ½Àº ±âº»ÀûÀÎ ·çÇÁ¹®Àε¥ 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Àº ·çÇÁÀÇ Á¦ÀÏ Ã³À½¿¡ Á¶°ÇÀ» °Ë»çÇϰí Á¶°ÇÀÌ ÂüÀÏ µ¿¾È °è¼Ó ·çÇÁ¸¦ µ¹¸³´Ï´Ù.

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

untilÀº ·çÇÁÀÇ Á¦ÀÏ Ã³À½¿¡ Á¶°ÇÀ» °Ë»çÇϰí Á¶°ÇÀÌ °ÅÁþÀÏ µ¿¾È °è¼Ó ·çÇÁ¸¦ µ¹¸³´Ï´Ù(while°ú ¹Ý´ë).

until [condition-is-true ]
do
command ...
done

ÁÖÀÇÇÒ Á¡Àº until ÀÌ ¸î¸î ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼­ ºñ½ÁÇÑ ÇüÅÂÀÇ ¹®°ú´Â ´Ù¸£°Ô ·çÇÁ óÀ½¿¡ ³¡³»´Â Á¶°ÇÀ» °Ë»çÇÑ´Ù´Â °ÍÀÔ´Ï´Ù.

for/in°æ¿ìó·³ do¸¦ Á¶°Ç¹®°ú ÇÑ ÁÙ¿¡ °°ÀÌ ¾²·Á¸é ¼¼¹ÌÄÝ·ÐÀ» Àû¾îÁà¾ß ÇÕ´Ï´Ù.

until [condition-is-true] ; do

예 3-33. until ·çÇÁ

#!/bin/bash

until [ "$var1" = end ]
# ·çÇÁ óÀ½¿¡ Å×½ºÆ® Á¶°ÇÀÌ ÀÖÀ½.
do
  echo "º¯¼ö°ªÀ» ³ÖÀ¸¼¼¿ä #1 "
  echo "(³¡³»·Á¸é end)"
  read var1
  echo "º¯¼ö #1 = $var1"
done  

exit 0
break, continue

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 (in) / esac

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

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