10.4. Å×½ºÆ®¿Í ºÐ±â(Testing and Branching)

case¿Í select´Â ÄÚµå ºí·°À» ¹Ýº¹Çؼ­ ¼öÇàÇÏÁö ¾Ê±â ¶§¹®¿¡ ±â¼úÀûÀ¸·Î ·çÇÁ°¡ ¾Æ´Õ´Ï´Ù. ÇÏÁö¸¸ ·çÇÁ°¡ ÇÏ´Â °Íó·³ ƯÁ¤ ºí·°ÀÇ À§³ª ¾Æ·¡¿¡¼­ ÁÖ¾îÁø Á¶°Ç¿¡ µû¶ó ÇÁ·Î±×·¥ È帧À» Á¶Á¤ÇØ ÁÝ´Ï´Ù.

ÄÚµå ºí·°¿¡¼­ ÇÁ·Î±×·¥ È帧À» Á¶ÀýÇϱâ

case (in) / esac

case´Â C/C++ÀÇ switch¿Í µ¿ÀÏÇÕ´Ï´Ù. Á¶°Ç¿¡ µû¶ó ¿©·¯°³ÀÇ ÄÚµå ºí·°Áß Çϳª·Î ºÐ±âÇÒ ¼ö ÀÖ°Ô ÇØÁִµ¥, ¿©·¯°³ÀÇ if/then/elseÀÇ °£´ÜÇÑ Ç¥±â¹ýó·³ µ¿ÀÛÇϱ⠶§¹®¿¡ ¸Þ´º°°Àº °ÍÀ» ¸¸µé ¶§ Àû´çÇÕ´Ï´Ù.

case "$variable" in

"$condition1" )
command...
;;

"$condition2" )
command...
;;

esac

Âü°í:

  • ³¹¸» Á¶°¢³²(word splitting)ÀÌ ÀϾÁö ¾Ê±â ¶§¹®¿¡ ²À variableÀ» Äõ¿ìÆÃ ÇÏÁö ¾Ê¾Æµµ µË´Ï´Ù.

  • °¢ Á¶°ÇµéÀº ¿À¸¥ÂÊ °ýÈ£, )·Î ³¡³³´Ï´Ù.

  • °¢ Á¶°Ç ºí·°Àº ÀÌÁß ¼¼¹ÌÄÝ·Ð, ;;.

  • Àüü case ºí·°Àº esac·Î ³¡³³´Ï´Ù(case¸¦ °Å²Ù·Î ½ºÆç¸µ).

¿¹ 10-22. case ¾²±â

#!/bin/bash

echo; echo "¾Æ¹«Å°³ª ´©¸¥ ´ÙÀ½ ¸®ÅÏÀ» Ä¡¼¼¿ä."
read Keypress

case "$Keypress" in
  [a-z]   ) echo "¼Ò¹®ÀÚ";;
  [A-Z]   ) echo "´ë¹®ÀÚ";;
  [0-9]   ) echo "¼ýÀÚ";;
  *       ) echo "±¸µÎÁ¡À̳ª, °ø¹é¹®ÀÚ µîµî";;
esac  # [´ë°ýÈ£]¼Ó ¹üÀ§ÀÇ ¹®ÀÚµéÀ» ¹Þ¾Æ µéÀÔ´Ï´Ù.

# µ¶ÀÚµé¿ë ¿¬½À¹®Á¦:
# ÀÌ ½ºÅ©¸³Æ®´Â ÇѰ³ÀÇ Å°´©¸§¸¸ ¹Þ¾ÆµéÀ̰í Á¾·áÇÕ´Ï´Ù.
# À̸¦ ۰¡ ´­¸±¶§¸¶´Ù ¹«½¼ ŰÀÎÁö °è¼Ó º¸¿©Áָ鼭
# ۰¡ "X"ÀÏ °æ¿ì¿¡¸¸ Á¾·áÇϵµ·Ï °íÃĺ¸¼¼¿ä.
# ÈùÆ®: "while"·çÇÁ·Î ´Ù °¨½Î¸é?

exit 0

¿¹ 10-23. case·Î ¸Þ´º ¸¸µé±â

#!/bin/bash

# Á¶ÀâÇÑ ÁÖ¼Ò µ¥ÀÌŸº£À̽º

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
# º¯¼ö°¡ Äõ¿ìÆ® µÈ °Í¿¡ ÁÖÀÇÇϼ¼¿ä.

  "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

¸í·É¾îÁÙ ¸Å°³º¯¼ö¸¦ È®ÀÎÇÏ·Á°í ÇÒ ¶§, ¾ÆÁÖ Ã¢ÀÇÀûÀÎ ¹æ¹ýÀ¸·Î case¸¦ »ç¿ëÇÏ´Â ¹ýÀ» º¸¿© µå¸®°Ú½À´Ï´Ù.
#! /bin/bash

case "$1" in
"") echo "»ç¿ë¹ý: ${0##*/} <filename>"; exit 65;;  # ¸í·É¾î ÁÙ ¸Å°³º¯¼ö¸¦ ¾È Àû¾ú°Å³ª 
                                                         # ù¹øÂ° ¸Å°³º¯¼ö°¡ ºñ¾î ÀÖÀ» ¶§
# ${0##*/} ´Â ¸Å°³º¯¼ö ġȯÀÎ ${var##pattern} À̱⠶§¹®¿¡ °á°ú´Â $0 ÀÌ µË´Ï´Ù.

-*) FILENAME=./$1;;   # ù¹øÂ° ÀÎÀÚ($1)ÀÎ filenameÀÌ ´ë½¬(-)·Î ½ÃÀÛÇÑ´Ù¸é
                      # ./$1 ·Î ¹Ù²ß´Ï´Ù.
                      # µû¶ó¼­, ´Ù¸¥ ¸í·É¾îµéÀº À̰ÍÀ» ¿É¼ÇÀ¸·Î ÇØ¼®ÇÏÁö ¸øÇÏ°Ô µË´Ï´Ù.

* ) FILENAME=$1;;     # ¾Æ¹« °Íµµ ¾Æ´Ï¸é, $1.
esac

¿¹ 10-24. case¿ë º¯¼ö¸¦ ¸¸µé±â À§Çؼ­ ¸í·É¾î ġȯ ¾²±â

#!/bin/bash
# "case"¿ë º¯¼ö¸¦ ¸¸µé±â À§Çؼ­ ¸í·É¾î ġȯ ¾²±â..

case $( arch ) in   # "arch" ´Â ¸Ó½Å ¾ÆÅ°ÅØÃĸ¦ ¸®ÅÏÇÕ´Ï´Ù.
i386 ) echo "80386 ±â¹ÝÀÇ ¸Ó½Å";;
i486 ) echo "80486 ±â¹ÝÀÇ ¸Ó½Å";;
i586 ) echo "Pentium ±â¹ÝÀÇ ¸Ó½Å";;
i686 ) echo "Pentium2+ ±â¹ÝÀÇ ¸Ó½Å";;
*    ) echo "´Ù¸¥ ÇüÅÂÀÇ ¸Ó½Å";;
esac

exit 0

case´Â globbing¿ë ÆÐÅÏÀ¸·Î ¹®ÀÚ¿­À» ÇÊÅ͸µ ÇÒ ¼ö ÀÖ½À´Ï´Ù.

¿¹ 10-25. °£´ÜÇÑ ¹®ÀÚ¿­ ¸ÅĪ

#!/bin/bash
# match-string.sh: °£´ÜÇÑ ¹®ÀÚ¿­ ¸ÅĪ

match_string ()
{
  MATCH=0
  NOMATCH=90
  PARAMS=2     # ÀÌ ÇÔ¼ö´Â 2°³ÀÇ ÀÎÀÚ°¡ ÇÊ¿äÇÕ´Ï´Ù.
  BAD_PARAMS=91

  [ $# -eq $PARAMS ] || return $BAD_PARAMS

  case "$1" in
  "$2") return $MATCH;;
  *   ) return $NOMATCH;;
  esac

}  


a=one
b=two
c=three
d=two


match_string $a     # À߸øµÈ ÀÎÀÚ °¹¼ö
echo $?             # 91

match_string $a $b  # ÀÏÄ¡ÇÏÁö ¾ÊÀ½
echo $?             # 90

match_string $b $d  # ÀÏÄ¡ÇÔ
echo $?             # 0


exit 0		    

¿¹ 10-26. ÀÔ·ÂÀÌ ¾ËÆÄºªÀÎÁö È®ÀÎÇϱâ

#!/bin/bash
# ¹®ÀÚ¿­À» ÇÊÅ͸µÇϱâ À§Çؼ­ "case" ±¸¹® ¾²±â.

SUCCESS=0
FAILURE=-1

isalpha ()  # ÀÔ·Â ¹®ÀÚ¿­ÀÇ "ù¹øÂ° ¹®ÀÚ"°¡ ¾ËÆÄºªÀÎÁö ¾Æ´ÑÁö È®ÀÎ.
{
if [ -z "$1" ]                # ÀÎÀÚ ¾øÀÌ ³Ñ¾î¿Ô±º.
then
  return $FAILURE
fi

case "$1" in
[a-zA-Z]*) return $SUCCESS;;  # ¹®ÀÚ·Î ½ÃÀÛÇÏ´ÂÁö.
*        ) return $FAILURE;;
esac
}             # C ÀÇ "isalpha()" ÇÔ¼ö¿Í ºñ±³ÇØ º¸¼¼¿ä.


isalpha2 ()   # "¹®ÀÚ¿­ Àüü"°¡ ¾ËÆÄºªÀÎÁö È®ÀÎ.
{
  [ $# -eq 1 ] || return $FAILURE

  case $1 in
  *[!a-zA-Z]*|"") return $FAILURE;;
               *) return $SUCCESS;;
  esac
}



check_var ()  # isalpha() ÀÇ ÇÁ·ÐÆ®¿£µå(front-end)
{
if isalpha "$@"
then
  echo "$* = ¾ËÆÄºª"
else
  echo "$* = ¾ËÆÄºª ¾Æ´Ô"  # ÀÎÀÚ°¡ ¾ø¾îµµ "¾ËÆÄºª ¾Æ´Ô"ÀÓ.
fi
}

a=23skidoo
b=H3llo
c=-What?
d=`echo $b`   # ¸í·É¾î ġȯ.

check_var $a
check_var $b
check_var $c
check_var $d
check_var     # ÀÎÀÚ¾øÀÌ ºÎ¸£¸é ¾î¶»°Ô µÉ±î¿ä?


# S.C. °¡ ´õ ÁÁ°Ô °íħ.

exit 0
select

select´Â Korn ½©¿¡¼­ µû¿Â °ÍÀε¥ ¸Þ´º¸¦ ¸¸µé¶§ ¾µ ¼ö ÀÖ½À´Ï´Ù.

select variable [in list]
do
command...
break
done

»ç¿ëÀÚ°¡ list¿¡ ÀÖ´Â °ÍÁß Çϳª¸¦ °í¸¦ ¼ö ÀÖ°Ô ÇØ ÁÝ´Ï´Ù. ±âº»ÀûÀ¸·Î PS3(#? ) ÇÁ·ÒÇÁÆ®¸¦ ¾²°í ÀÌ °ªÀº ¹Ù²Ü ¼ö ÀÖ´Ù´Â °Í¿¡ ÁÖÀÇÇϱ⠹ٶø´Ï´Ù.

¿¹ 10-27. 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]

ÀÇ °æ¿ì¿Í ºñ±³ÇØ º¸¼¼¿ä.

¿¹ 10-28. ÇÔ¼ö¿¡¼­ select¸¦ ½á¼­ ¸Þ´º ¸¸µé±â

#!/bin/bash

PS3='Á¦ÀÏ ÁÁ¾ÆÇÏ´Â ¾ß並 °í¸£¼¼¿ä: '

echo

choice_of()
{
select vegetable
# select ¿¡ [in list] °¡ ºüÁ®Àֱ⠶§¹®¿¡, ÇÔ¼ö·Î ³Ñ¾î¿Â ÀÎÀÚ¸¦ ¾¹´Ï´Ù.
do
  echo
  echo "Á¦ÀÏ ÁÁ¾ÆÇÏ´Â ¾ßä°¡ $vegetable ±º¿ä."
  echo "²¬²¬~~"
  echo
  break
done
}

choice_of Äá  ½Ò  ´ç±Ù  ¹«  Å丶Åä  ½Ã±ÝÄ¡
#         $1  $2  $3    $4  $5      $6
#         choice_of() ÇÔ¼ö·Î ³Ñ¾î°©´Ï´Ù.

exit 0