°í±Þ Bash ½ºÅ©¸³ÆÃ °¡À̵å: Bash¸¦ ÀÌ¿ëÇÑ ½© ½ºÅ©¸³ÆÃ ¿ÏÀü °¡À̵å | ||
---|---|---|
ÀÌÀü | 10Àå. ·çÇÁ¿Í ºÐ±â(Loops and Branches) | ´ÙÀ½ |
case¿Í select´Â ÄÚµå ºí·°À» ¹Ýº¹Çؼ ¼öÇàÇÏÁö ¾Ê±â ¶§¹®¿¡ ±â¼úÀûÀ¸·Î ·çÇÁ°¡ ¾Æ´Õ´Ï´Ù. ÇÏÁö¸¸ ·çÇÁ°¡ ÇÏ´Â °Íó·³ ƯÁ¤ ºí·°ÀÇ À§³ª ¾Æ·¡¿¡¼ ÁÖ¾îÁø Á¶°Ç¿¡ µû¶ó ÇÁ·Î±×·¥ È帧À» Á¶Á¤ÇØ ÁÝ´Ï´Ù.
ÄÚµå ºí·°¿¡¼ ÇÁ·Î±×·¥ È帧À» Á¶ÀýÇϱâ
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´Â 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 |