10.1. ·çÇÁ

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

for ·çÇÁ

for (in)

´ÙÀ½Àº ±âº»ÀûÀÎ ·çÇÁ¹®Àε¥ CÀÇ ·çÇÁ¹®°ú´Â »ó´çÇÑ Â÷À̸¦ º¸ÀÔ´Ï´Ù.

for arg in [list]
do
command...
done

Âü°í: ·çÇÁÀÇ °¢ ´Ü°è¸¶´Ù listÀÇ °ªµéÀÌ arg¿¡ µé¾î°©´Ï´Ù.

for arg in "$var1" "$var2" "$var3" ... "$varN"  
# ·çÇÁ 1 ´Ü°è, $arg = $var1	    
# ·çÇÁ 2 ´Ü°è, $arg = $var2	    
# ·çÇÁ 3 ´Ü°è, $arg = $var3	    
# ...
# ·çÇÁ N ´Ü°è, $arg = $varN

# [list]ÀÇ ÀÎÀÚµéÀº Äõ¿ìÆÃÀ» Çؼ­ ³¹¸» Á¶°¢³²(word splitting)À» ¸·¾Æ Áà¾ßÇÔ.

list ÀÎÀÚ¿¡´Â ¿ÍÀϵå Ä«µå°¡ ¿Ã ¼öµµ ÀÖ½À´Ï´Ù.

do¸¦ for¿Í ÇÑ ÁÙ¿¡ ¾´´Ù¸é list µÚ¿¡ ¼¼¹ÌÄÝ·ÐÀÌ ÀÖ¾î¾ß ÇÕ´Ï´Ù.

for arg in [list] ; do

¿¹ 10-1. °£´ÜÇÑ for ·çÇÁ

#!/bin/bash
# ¶°µ¹À̺° ¸ñ·Ï.

for planet in Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune Pluto
do
  echo $planet
done

echo

# µû¿ÈÇ¥·Î ¹­ÀÎ Àüü '¸ñ·Ï'Àº ÇÑ °³ÀÇ º¯¼ö¸¦ ¸¸µé¾î ³À´Ï´Ù.
for planet in "Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune Pluto"
do
  echo $planet
done

exit 0

Âü°í: °¢ [list] Ç׸ñÀº ´ÙÁß ÀÎÀÚ¸¦ °¡Áú¼ö ÀÖ½À´Ï´Ù. ÀÌ´Â ÀÎÀÚ°¡ ±×·ìÀ¸·Î µÇ¾î ÀÖÀ» ¶§ À¯¿ëÇѵ¥ ÀÌ·± °æ¿ì¿¡´Â set ¸í·É¾î(¿¹ 11-10 Âü°í)¸¦ ½á¼­ [list] °¢ Ç׸ñÀÌ À§Ä¡ ¸Å°³º¯¼ö·Î ÆĽ̵Ǿî ÇÒ´çµÇµµ·Ï ÇØ ÁÖ¸é µË´Ï´Ù.

¿¹ 10-2. °¢ [list] Ç׸ñÀÌ ÀÎÀÚ¸¦ µÎ °³¾¿ °®´Â for ¹®

#!/bin/bash
# ¶°µ¹À̺° Àç°ËÅä.

# °¢ ¶°µ¹À̺°ÀÇ À̸§°ú ÇØ(sun)±îÁö °Å¸®¸¦ ÇÑ ½ÖÀ¸·Î ¹­À½.

for planet in "Mercury 36" "Venus 67" "Earth 93"  "Mars 142" "Jupiter 483"
do
  set -- $planet  # "planet" º¯¼ö¸¦ ÆĽÌÇؼ­ À§Ä¡ ¸Å°³º¯¼ö·Î ¼¼ÆÃ.
  # "--" ¸¦ ¾²¸é $planet ÀÌ ³ÎÀ̰ųª ´ë½¬ ¹®ÀÚ·Î ½ÃÀÛÇÏ´Â µîÀÇ ±î´Ù·Î¿î »óȲÀ» ó¸®ÇØ ÁÝ´Ï´Ù.

  # ¿ø·¡ÀÇ À§Ä¡ ¸Å°³º¯¼ö´Â µ¤¾î½áÁö±â ¶§¹®¿¡ ´Ù¸¥ °÷¿¡ ÀúÀåÇØ ³õ¾Æ¾ß ÇÒÁöµµ ¸ð¸¨´Ï´Ù.
  # ¹è¿­À» ½á¼­ ÇØ º¼ ¼ö Àְڳ׿ä.
  #        original_params=("$@")

  echo "$1		ÇرîÁö °Å¸® $2,000,000 ¸¶ÀÏ"
done

# (S.C. °¡ È®½ÇÇÑ ¼³¸íÀ» ´õ ÇØ Áá½À´Ï´Ù.)

exit 0

for ¹®ÀÇ [list]¿¡ º¯¼ö°¡ µé¾î°¥ ¼öµµ ÀÖ½À´Ï´Ù.

¿¹ 10-3. Fileinfo: º¯¼ö¿¡ µé¾î ÀÖ´Â ÆÄÀÏ ¸ñ·Ï¿¡ ´ëÇØ µ¿ÀÛ

#!/bin/bash
# fileinfo.sh

FILES="/usr/sbin/privatepw
/usr/sbin/pwck
/usr/sbin/go500gw
/usr/bin/fakefile
/sbin/mkreiserfs
/sbin/ypbind"     # ¿©·¯ºÐÀÌ ±Ã±ÝÇØÇÏ´Â ÆÄÀÏµé ¸ñ·Ï.
                  # ´õ¹Ì ÆÄÀÏÀÎ /usr/bin/fakefile À» ±×³É ³Ö¾ú½À´Ï´Ù.

echo

for file in $FILES
do

  if [ ! -e "$file" ]       # ÆÄÀÏÀÌ Á¸ÀçÇÏ´ÂÁö È®ÀÎ.
  then
    echo "$file Àº Á¸ÀçÇÏÁö ¾Ê´Â ÆÄÀÏÀÔ´Ï´Ù."; echo
    continue                # ´ÙÀ½ ÆÄÀÏÀ» È®ÀÎ.
   fi

  ls -l $file | awk '{ print $9 "         ÆÄÀÏ Å©±â: " $5 }'  # 2°³ÀÇ Çʵ带 Ãâ·Â.
  whatis `basename $file`   # ÆÄÀÏ¿¡ ´ëÇÑ Á¤º¸.
  echo
done  

exit 0

[list]¿¡´Â ÆÄÀϸí globbingÀÌ ¿Ã ¼öµµ ÀÖ½À´Ï´Ù. Áï, ÆÄÀϸí È®ÀåÀ» À§ÇÑ ¿ÍÀϵå Ä«µå¸¦ ¾µ ¼ö ÀÖ½À´Ï´Ù.

¿¹ 10-4. for ¹®¿¡¼­ ÆÄÀÏ Á¶ÀÛÇϱâ

#!/bin/bash
# list-glob.sh: "globbing"À¸·Î for ·çÆ®ÀÇ [list] ¸¸µé¾î³»±â.

echo

for file in *
do
  ls -l "$file"  # $PWD(ÇöÀç µð·ºÅ丮)ÀÇ ¸ðµç ÆÄÀÏÀ» ³ª¿­.
  # ¿ÍÀϵå Ä«µå ¹®ÀÚÀÎ "*"´Â ¸ðµç ¹®ÀÚ¿Í ÀÏÄ¡ÇÕ´Ï´Ù. ±â¾ï³ªÁÒ?
  # ÇÏÁö¸¸ "globbing"¿¡¼­´Â Á¡(dot) ÆÄÀÏÀº ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù.

  #  ¸¸¾à¿¡ ÆÐÅÏÀÌ ¾Æ¹« ÆÄÀÏ°ú ÀÏÄ¡ÇÏÁö ¾Ê´Â´Ù¸é ±×³É ÀÚ±â ÀÚ½ÅÀ¸·Î È®ÀåµÇ´Âµ¥,
  #+ ÀÌ°É ÇÇÇÏ·Á¸é nullglob ¿É¼ÇÀ» ÁÖ¸é µË´Ï´Ù.
  #  (shopt -s nullglob).
  #  S.C.ÀÇ ÁöÀû »çÇ×.
done

echo; echo

for file in [jx]*
do
  rm -f $file    # $PWD¿¡¼­ "j"³ª "x"·Î¸¸ ½ÃÀÛÇÏ´Â ¸ðµç ÆÄÀÏÀ» Áö¿ò.
  echo "\"$file\" ÀÌ Áö¿öÁ³½À´Ï´Ù."
done

echo

exit 0

for ¹®¿¡¼­ in [list]À» ¾È ½áÁÖ¸é ¸í·É¾î ÁÙ¿¡¼­ ³Ñ¾î¿Â ÀÎÀÚÀÎ $@¿¡ ´ëÇؼ­ µ¿ÀÛÇÕ´Ï´Ù. ÀÌ·± ½ÄÀ¸·Î ó¸®ÇÏ´Â ¸ÚÁø ¿¹Á¦¸¦ º¸·Á¸é ¿¹ A-11¸¦ Âü°íÇϼ¼¿ä.

¿¹ 10-5. in [list]°¡ ºüÁø for ¹®

#!/bin/bash

# ÀÎÀÚ¸¦ Á༭ ½ÇÇà½ÃÄѵµ º¸°í ¾È Á༭ ½ÇÇà½ÃÄÑ º» ´ÙÀ½, ¾î¶»°Ô µÇ´ÂÁö º¸¼¼¿ä.

for a
do
 echo -n "$a "
done

# 'in list' °¡ ¾ø±â ¶§¹®¿¡ '$@'¿¡ ´ëÇؼ­ µ¿ÀÛÇÕ´Ï´Ù.
# ('$@'´Â °ø¹é¹®ÀÚ¸¦ Æ÷ÇÔÇÏ´Â ¸í·É¾îÁÙ ÀÎÀÚ ¸®½ºÆ®).

echo

exit 0

for ¹®ÀÇ [list]¿¡ ¸í·É¾î ġȯ¸¦ ¾µ ¼öµµ ÀÖ½À´Ï´Ù. ¿¹ 12-31°ú ¿¹ 10-9, ¿¹ 12-29¸¦ Âü°íÇϼ¼¿ä.

¿¹ 10-6. for ¹®ÀÇ [list]¿¡ ¸í·É¾î ġȯ ¾²±â

#!/bin/bash
# for ·çÇÁÀÇ [list]¿¡ ¸í·É¾î ġȯÀ» ¾²±â.

NUMBERS="9 7 3 8 37.53"

for number in `echo $NUMBERS`  # for number in 9 7 3 8 37.53
do
  echo -n "$number "
done

echo 
exit 0

´ÙÀ½Àº [list]¸¦ ¸¸µé¾î ³¾ ¶§ Á» ´õ º¹ÀâÇÑ ¸í·É¾î ġȯÀ» ¾²´Â ¿¹Á¦ÀÔ´Ï´Ù.

¿¹ 10-7. ÀÌÁø ÆÄÀÏ¿¡ grep °É±â

#!/bin/bash
# bin-grep.sh: ÀÌÁø ÆÄÀÏ¿¡¼­ ÀÏÄ¡ÇÏ´Â ¹®ÀÚ¿­ ã¾Æ³»±â.

# "grep"À» ÀÌÁø ÆÄÀÏ¿¡ °É±â.
# "grep -a"¶ó°í Çصµ ºñ½ÁÇÕ´Ï´Ù.

E_BADARGS=65
E_NOFILE=66

if [ $# -ne 2 ]
then
  echo "»ç¿ë¹ý: `basename $0` string filename"
  exit $E_BADARGS
fi

if [ ! -f "$2" ]
then
  echo "\"$2\" Àº Á¸ÀçÇÏÁö ¾Ê´Â ÆÄÀÏÀÔ´Ï´Ù."
  exit $E_NOFILE
fi  


for word in $( strings "$2" | grep "$1" )
# "strings" ¸í·É¾î´Â ÀÌÁø ÆÄÀÏ¿¡ µé¾î ÀÖ´Â ¹®ÀÚ¿­µéÀ» º¸¿©ÁÖ°í,
# ±× Ãâ·ÂÀ» "grep"¿¡ ÆÄÀÌÇÁ·Î °É¾î ¿øÇÏ´Â ¹®ÀÚ¿­À» ã¾Æ³À´Ï´Ù.
do
  echo $word
done

# S.C. °¡ À§ÀÇ for ·çÇÁ´Â ´ÙÀ½°ú °°ÀÌ ´õ °£´ÜÇÏ°Ô ÇÒ ¼ö ÀÖ´Ù°í ÁöÀûÇØ ÁÖ¾ú½À´Ï´Ù.
#    strings "$2" | grep "$1" | tr -s "$IFS" '[\n*]'


# "./bin-grep.sh mem /bin/ls"  °°Àº ½ÄÀ¸·Î Çؼ­ ÀÌ ½ºÅ©¸³Æ®¸¦ ¿¬½ÀÇØ º¸¼¼¿ä.

exit 0

´ÙÀ½µµ ¸í·É¾î ġȯÀ¸·Î [list]¸¦ ¸¸µé¾î ³»´Â ¿¹Á¦ÀÔ´Ï´Ù.

¿¹ 10-8. ƯÁ¤ µð·ºÅ丮ÀÇ ¸ðµç ¹ÙÀ̳ʸ® ÆÄÀÏ¿¡ ´ëÇØ ¿øÀúÀÛÀÚ(authorship)¸¦ È®ÀÎ Çϱâ

#!/bin/bash
# findstring.sh: ÁÖ¾îÁø µð·ºÅ丮ÀÇ ÀÌÁø ÆÄÀÏ¿¡¼­ ƯÁ¤ÇÑ ¹®ÀÚ¿­ ã¾Æ³»±â.

directory=/usr/bin/
fstring="Free Software Foundation"  # FSF¿¡¼­ ¸¸µç ÆÄÀÏ¿¡´Â ¾î¶² °ÍÀÌ ÀÖ³ª ¾Ë¾Æº¼±î¿ä?

for file in $( find $directory -type f -name '*' | sort )
do
  strings -f $file | grep "$fstring" | sed -e "s%$directory%%"
  # ¿©±â¼­´Â "sed" Ç¥Çö½ÄÀÇ $directory °¡ ¿ø·¡ ±¸ºÐÀÚÀÎ "/"¸¦ Æ÷ÇÔÇÏ°í Àֱ⠶§¹®¿¡ 
  # "/" ±¸ºÐÀÚ¸¦ ´Ù¸¥ °Í(%)À¸·Î ¹Ù²ãÁà¾ß ÇÕ´Ï´Ù.
  # ÀÌ·¸°Ô ÇÏÁö ¾ÊÀ¸¸é ¿¡·¯ ¸Þ¼¼Áö°¡ ³³´Ï´Ù(sed -e "s/$directory//" ¶ó°í ÇÑ ¹ø Çغ¸¼¼¿ä).
done  

exit 0

# ½¬¿î ¿¬½À¹®Á¦ Çϳª ³»°Ú½À´Ï´Ù:
# $directory ¿Í $fstring À» ¸í·É¾îÁÙ¿¡¼­ ¹Þ¾Æ µéÀÏ ¼ö ÀÖµµ·Ï ¼öÁ¤ÇØ º¸¼¼¿ä.

for ·çÇÁÀÇ Ãâ·ÂÀº ´Ù¸¥ ¸í·É¾î·Î ÆÄÀÌÇÁ¸¦ °É ¼öµµ ÀÖ½À´Ï´Ù.

¿¹ 10-9. µð·ºÅ丮¿¡ µé¾î ÀÖ´Â ½Éº¼¸¯ ¸µÅ©µéÀ» ³ª¿­Çϱâ

#!/bin/bash
# symlinks.sh: µð·ºÅ丮ÀÇ ½Éº¼¸¯ ¸µÅ© ÆÄÀϵéÀ» ³ª¿­Çϱâ.

ARGS=1                 # ¸í·É¾îÁÙ ÀÎÀÚ´Â ÇÑ °³¸¸ ÇÊ¿ä.

if [ $# -ne "$ARGS" ]  # ÀÎÀÚ°¡ 1 °³°¡ ¾Æ´Ï¸é...
then
  directory=`pwd`      # ÇöÀç ÀÛ¾÷ µð·ºÅ丮
else
  directory=$1
fi

echo "\"$directory\" µð·ºÅ丮ÀÇ ½Éº¼¸¯ ¸µÅ©µé"

for file in "$( find $directory -type l )"   # -type l = ½Éº¼¸¯ ¸µÅ©
do
  echo "$file"
done | sort                                  # ÆÄÀÏ ¸ñ·ÏÀ» Á¤·Ä.

#  Dominik 'Aeneas' Schnitzer °¡ ÁöÀûÇÑ´ë·Î,
#+ $( find $directory -type l ) À» Äõ¿ìÆ® ¾È ÇØÁÖ¸é
#+ ÆÄÀÏÀ̸§¿¡ °ø¹é¹®ÀÚ°¡ µé¾îÀÖ´Â ÆÄÀÏ¿¡ ´ëÇؼ­´Â Á¦´ë·Î µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù.

exit 0

¹æ±Ý ÀüÀÇ ¿¹Á¦¿¡ ¾à°£ÀÇ º¯°æ¸¸ °¡ÇÏ¸é ·çÇÁÀÇ Ç¥ÁØÃâ·ÂÀ» ÆÄÀÏ·Î ÀçÁöÇâ ½Ãų ¼ö ÀÖ½À´Ï´Ù.

¿¹ 10-10. µð·ºÅ丮¿¡ µé¾î ÀÖ´Â ½Éº¼¸¯ ¸µÅ©µéÀ» ÆÄÀÏ·Î ÀúÀåÇϱâ

#!/bin/bash
# symlinks.sh: µð·ºÅ丮¿¡ µé¾î ÀÖ´Â ½Éº¼¸¯ ¸µÅ©¸¦ ³ª¿­Çϱâ.

ARGS=1                 # ¸í·É¾îÁÙ ÀÎÀÚ°¡ ÇÑ °³ ÀÖ¾î¾ß µË´Ï´Ù.
OUTFILE=symlinks.list  # ÀúÀåÇÒ ÆÄÀÏ

if [ $# -ne "$ARGS" ]  # ÀÎÀÚ°¡ 1°³°¡ ¾Æ´Ï¶ó¸é...
then
  directory=`pwd`      # ÇöÀç ÀÛ¾÷ µð·ºÅ丮
else
  directory=$1
fi

echo "\"$directory\" µð·ºÅ丮ÀÇ ½Éº¼¸¯ ¸µÅ©µé"

for file in "$( find $directory -type l )"   # -type l = ½Éº¼¸¯ ¸µÅ©
do
  echo "$file"
done | sort > "$OUTFILE"                     # ·çÇÁÀÇ Ç¥ÁØ Ãâ·ÂÀÌ
#           ^^^^^^^^^^^^                       ÀúÀåµÉ ÆÄÀÏ·Î ÀçÁöÇ⠵˴ϴÙ.

exit 0

ÀÌÁß ¼Ò°ýÈ£¸¦ ¾²¸é C ÇÁ·Î±×·¡¸Óµé¿¡°Ô Àͼ÷ÇÑ ÇüÅÂÀÇ for ·çÇÁ ¹®¹ýµµ ¾µ ¼ö ÀÖ½À´Ï´Ù.

¿¹ 10-11. C ÇüÅÂÀÇ for ·çÇÁ

#!/bin/bash
# 10±îÁö ¼¼´Â µÎ °¡Áö ¹æ¹ý.

echo

# Ç¥ÁØ ¹®¹ý.
for a in 1 2 3 4 5 6 7 8 9 10
do
  echo -n "$a "
done  

echo; echo

# +==========================================+

# ÀÌÁ¦´Â C ÇüÅÂÀÇ ¹®¹ýÀ» ½á¼­ ¶È°°Àº ÀÏÀ» ÇØ º¸°Ú½À´Ï´Ù.

LIMIT=10

for ((a=1; a <= LIMIT ; a++))  # ÀÌÁß ¼Ò°ýÈ£¿Í "$" ¾ø´Â "LIMIT".
do
  echo -n "$a "
done                           # 'ksh93' ¿¡¼­ ºô·Á¿Â ¹®¹ý.

echo; echo

# +=========================================================================+

# C ÀÇ "ÄÞ¸¶ ¿¬»êÀÚ"¸¦ ½á¼­ µÎ º¯¼ö¸¦ µ¿½Ã¿¡ Áõ°¡½ÃÄÑ º¸°Ú½À´Ï´Ù.

for ((a=1, b=1; a <= LIMIT ; a++, b++))  # ÄÞ¸¶¸¦ ¾²¸é ¿©·¯ ¿¬»êÀ» ÇÔ²² ÇÒ ¼ö ÀÖ½À´Ï´Ù.
do
  echo -n "$a-$b "
done

echo; echo

exit 0

¿¹ 26-6¿Í ¿¹ 26-7µµ Âü°íÇϼ¼¿ä.

---

ÀÚ, ÀÌÁ¦´Â "½ÇÁ¦"·Î ¾î¶»°Ô ¾²ÀÌ´ÂÁö º¾½Ã´Ù.

¿¹ 10-12. ¹èÄ¡ ¸ðµå·Î efax »ç¿ëÇϱâ

#!/bin/bash

EXPECTED_ARGS=2
E_BADARGS=65

if [ $# -ne $EXPECTED_ARGS ]
# Àû´çÇÑ ¸í·É¾î ÁÙ ÀÎÀÚ°¡ ³Ñ¾î ¿Ô´ÂÁö È®ÀÎ.
then
   echo "»ç¿ë¹ý: `basename $0` phone# text-file"
   exit $E_BADARGS
fi


if [ ! -f "$2" ]
then
  echo "$2 ´Â ÅؽºÆ® ÆÄÀÏÀÌ ¾Æ´Õ´Ï´Ù."
  exit $E_BADARGS
fi
  

fax make $2              # ÁÖ¾îÁø ÅؽºÆ® ÆÄÀÏ¿¡¼­ Æѽº Æ÷¸ËÀÇ ÆÄÀÏÀ» »ý¼º.

for file in $(ls $2.0*)  # º¯È¯µÈ ÆÄÀÏÀ» ÀÌ¾î ºÙÀÓ.
                         # º¯¼ö ¸ñ·Ï¿¡¼­ ¿ÍÀϵå Ä«µå¸¦ »ç¿ë.
do
  fil="$fil $file"
done  

efax -d /dev/ttyS3 -o1 -t "T$1" $fil   # µ¿ÀÛ.


# S.C. °¡ ÁöÀûÇßµíÀÌ, 
#    efax -d /dev/ttyS3 -o1 -t "T$1" $2.0*
# ¶ó°í Çϸé for ·çÇÁ¸¦ ¾È ½áµµ µË´Ï´Ù¸¸, 
# ±×·¸°Ô ÁÁÀº ¹æ¹ýÀº ¾Æ´Õ´Ï´Ù. ^^

exit 0
while

whileÀº ·çÇÁ ÃÖ»ó´Ü¿¡¼­ ƯÁ¤ Á¶°ÇÀ» È®ÀÎÇϸ鼭 ±× Á¶°ÇÀÌ ÂüÀÏ µ¿¾È ·çÇÁ¸¦ °è¼Ó µ¹µµ·Ï ÇØ ÁÝ´Ï´Ù(Á¾·á »óÅ 0À» ¸®ÅÏÇÕ´Ï´Ù).

while [condition]
do
command...
done

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

while [condition] ; do

¿©±â¼­ ¼³¸íÇß´ø Ç¥ÁØ ÇüÅ°¡ ¾Æ´Ñ getopts construct°°Àº Ưº°ÇÑ ÇüÅÂÀÇ while ¹®µµ ÀÖ´Ù´Â °Í¿¡ ÁÖÀÇÇϽñ⠹ٶø´Ï´Ù.

¿¹ 10-13. °£´ÜÇÑ while ·çÇÁ

#!/bin/bash

var0=0
LIMIT=10

while [ "$var0" -lt "$LIMIT" ]
do
  echo -n "$var0 "        # -n Àº ´º¶óÀÎÀ» ¾ø¾ÖÁÝ´Ï´Ù.
  var0=`expr $var0 + 1`   # var0=$(($var0+1)) À̶ó°í Çصµ µ¿ÀÛÇÕ´Ï´Ù.
done

echo

exit 0

¿¹ 10-14. ´Ù¸¥ while ·çÇÁ

#!/bin/bash

echo

while [ "$var1" != "end" ]     # while test "$var1" != "end"
do                             # ¶ó°í Çصµ µ¿ÀÛÇÔ.
  echo "º¯¼ö°ªÀ» ³ÖÀ¸¼¼¿ä #1 (³¡³»·Á¸é end) "
  read var1                    # 'read $var1' ÀÌ ¾Æ´ÏÁÒ? ¿Ö ±×·²±î¿ä?
  echo "º¯¼ö #1 = $var1"       # "#" ¶§¹®¿¡ Äõ¿ìÆ®¸¦ ÇØÁà¾ß µË´Ï´Ù.
  # Á¾·á Á¶°ÇÀÌ ·çÇÁ óÀ½¿¡ Å×½ºÆ®µÇ±â ¶§¹®¿¡ 'end'µµ ¿¡Äڵ˴ϴÙ.
  echo
done  

exit 0

while ¹®Àº ´ÙÁß Á¶°ÇÀ» °¡Áú ¼ö ÀÖ½À´Ï´Ù¸¸ ¿ÀÁ÷ ¸¶Áö¸· Á¶°ÇÀÌ ·çÇÁ¸¦ ³¡³¾ Á¶°ÇÀ» °áÁ¤ÇÕ´Ï´Ù. ±×·¸±â ¶§¹®¿¡ ÀÌ·² °æ¿ì¿¡´Â ¹®¹ýÀÌ ¾à°£ ´Þ¶óÁý´Ï´Ù.

¿¹ 10-15. ´ÙÁß Á¶°Ç 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  

# ÀÌ ½ºÅ©¸³Æ®°¡ ¾î¶»°Ô µ¹¾Æ°¡´ÂÁö ¾Ë¾Æ³» º¸¼¼¿ä.
# ¾à°£ ¹Ì¹¦ÇÑ(tricky) ºÎºÐÀÌ ÀÖ½À´Ï´Ù.

exit 0

for ·çÇÁó·³ whileµµ ÀÌÁß¼Ò°ýÈ£¸¦ ½á¼­ C ÇüÅÂÀÇ ¹®¹ýÀ» Àû¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù(¿¹ 9-22 Âü°í).

¿¹ 10-16. C ÇüÅÂÀÇ ¹®¹ýÀ» ¾²´Â while ·çÇÁ

#!/bin/bash
# wh-loopc.sh: "while" ·çÇÁ¿¡¼­ 10±îÁö ¼¼±â.

LIMIT=10
a=1

while [ "$a" -le $LIMIT ]
do
  echo -n "$a "
  let "a+=1"
done           # ¾ÆÁ÷Àº º°·Î ³î¶ö°Ô ¾ø³×¿ä.

echo; echo

# +=================================================================+

# ÀÌÁ¦ ¶È°°Àº °ÍÀ» C ÇüÅÂÀÇ ¹®¹ýÀ¸·Î ÇØ º¾½Ã´Ù.

((a = 1))      # a=1
# ÀÌÁß ¼Ò°ýÈ£¿¡¼­´Â º¯¼ö¸¦ ¼¼ÆÃÇÒ ¶§ C ó·³ ºó Ä­À» ³Ö¾îµµ µË´Ï´Ù.

while (( a <= LIMIT ))   # ÀÌÁß ¼Ò°ýÈ£, º¯¼ö ¾Õ¿¡ "$"°¡ ¾ø³×¿ä.
do
  echo -n "$a "
  ((a += 1))   # let "a+=1"
  # ¿ª½Ã µÇ´Â±º¿ä.
  # ÀÌÁß ¼Ò°ýÈ£¸¦ ¾²¸é C ¹®¹ýó·³ º¯¼ö¸¦ Áõ°¡½Ãų ¼ö ÀÖ±º¿ä.
done

echo

# ÀÌÁ¦ C ÇÁ·Î±×·¡¸Óµµ Bash ¸¦ ¾µ ¶§ Æí¾ÈÇÏ°Ô ¾µ ¼ö ÀÖ°Ú½À´Ï´Ù.

exit 0

Âü°í: while ·çÇÁ ¸¶Áö¸·¿¡ <À» ½á Ç¥ÁØÀÔ·ÂÀ» ÆÄÀÏ¿¡¼­ ÀçÁöÇâ ¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù.

until

untilÀº ·çÇÁ ÃÖ»ó´Ü¿¡¼­ ƯÁ¤ Á¶°ÇÀ» È®ÀÎÇϸ鼭 ±× Á¶°ÇÀÌ °ÅÁþÀÏ µ¿¾È ·çÇÁ¸¦ °è¼Ó µ¹µµ·Ï ÇØ ÁÝ´Ï´Ù(while°ú ¹Ý´ë).

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

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

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

until [condition-is-true] ; do

¿¹ 10-17. until ·çÇÁ

#!/bin/bash

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

exit 0