| °í±Þ 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 |