³»ºÎ ¸í·É(builtin) Àº Bash Åø ¼Â¿¡ Æ÷ÇÔµÈ ¸í·É¾î·Î ¸» ±×´ë·Î bulit in(°íÀ¯ÀÇ, ºÙ¹ÚÀÌÀÇ)µÈ ¸í·É¾îÀÔ´Ï´Ù. ³»ºÎ ¸í·ÉÀº ½Ã½ºÅÛ ¸í·É¾î¿Í À̸§ÀÌ °°À» ¼öµµ ÀÖÁö¸¸ ÀÌ·± °æ¿ì´Â Bash°¡ ³»ºÎÀûÀ¸·Î ´Ù½Ã ±¸ÇöÇØ ³õÀº °ÍÀÔ´Ï´Ù. [1] ¿¹¸¦ µé¾î, ÇÏ´Â ÀÏÀÌ °ÅÀÇ µ¿ÀÏÇÑ bashÀÇ echo´Â /bin/echo¿Í ´Ù¸¨´Ï´Ù.
Ű¿öµå(keyword)´Â ¿¹¾àµÈ ³¹¸», ÅäÅ«, ¿¬»êÀÚ¸¦ ¸»ÇÕ´Ï´Ù. Ű¿öµå´Â ½©¿¡¼ Ưº°ÇÑ Àǹ̸¦ °¡Áö¸é¼, ½© ¹®¹ýÀ» Çü¼ºÇØ ÁÝ´Ï´Ù. ¿¹¸¦ µé¸é, "for", "while", "!"°¡ Ű¿öµåÀÔ´Ï´Ù. ³»ºÎ ¸í·É(builtin)°ú ºñ½ÁÇÏ°Ô Å°¿öµåµµ Bash ³»ºÎ¿¡ ÇϵåÄÚµå(hard-coded)µÇ¾î ÀÖ½À´Ï´Ù.
º¯¼ö³ª Ç¥Çö½ÄÀ» Ç¥ÁØÃâ·ÂÀ¸·Î Ãâ·Â(¿¹ 5-1 Âü°í).
echo Hello echo $a |
echo ¿¡¼ À̽ºÄÉÀÌÇÁ ¹®ÀÚµéÀ» ÂïÀ¸·Á¸é -e ¿É¼ÇÀ» ÁÖ¾î¾ß ÇÕ´Ï´Ù. ¿¹ 6-2¸¦ Âü°íÇϼ¼¿ä.
º¸Åë, °¢°¢ÀÇ echo´Â ´º¶óÀÎÀ» Ãâ·ÂÇØ ÁÖÁö¸¸ -n ¿É¼ÇÀ» ÁÖ¸é ÀÌ ´º¶óÀÎÀ» ¾È Âï¾î ÁÝ´Ï´Ù.
Âü°í: echo´Â ÆÄÀÌÇÁ¿¡¼ ¿©·¯ ¸í·É¾îÁßÀÇ Çϳª·Î ¾²ÀÏ ¼ö ÀÖ½À´Ï´Ù.
if echo "$VAR" | grep -q txt # if [[ $VAR = *txt* ]] then echo "$VAR ¿¡´Â \"txt\"" ¹®ÀÚ¿ÀÌ µé¾î ÀÖ½À´Ï´Ù." fi
Âü°í: echo¸¦ ¸í·É¾î ġȯ°ú °°ÀÌ ½á¼ º¯¼ö °ªÀ» ¼¼Æ®ÇÒ ¼ö ÀÖ½À´Ï´Ù.
a=`echo "HELLO" | tr A-Z a-z`
°æ°í | |
echo `command`´Â command Ãâ·ÂÀÇ ¸ðµç ¶óÀÎÇǵ带 Áö¿ö¹ö¸®´Â °Í¿¡ ÁÖÀÇÇϱ⠹ٶø´Ï´Ù. º¸Åë \nÀÌ $IFSÀÇ °ø¹é¹®ÀÚÁß ÇϳªÀ̱⠶§¹®¿¡, Bash´Â commandÀÇ Ãâ·Â¿¡ ³ªÅ¸³ª´Â ¶óÀÎÇǵ带 ºó ÄÀ¸·Î ¹Ù²Ù¾î echoÀÇ ÀÎÀÚ·Î ¸¸µé¾î ¹ö¸³´Ï´Ù.
|
Âü°í: ÀÌ ¸í·É¾î´Â ½© ³»Àå ¸í·ÉÀ¸·Î¼ /bin/echo¿Í ºñ½ÁÇÑ µ¿ÀÛÀ» ÇÏÁö¸¸ ¾ö¿¬È÷ ´Ù¸¨´Ï´Ù.
bash$ type -a echo echo is a shell builtin echo is /bin/echo
printf´Â Çü½ÄÈµÈ Ãâ·ÂÀ» ÇØÁÖ´Â ¸í·É¾î·Î¼, echoÀÇ È®ÀåÆÇÀÔ´Ï´Ù. C ¾ð¾îÀÇ printfº¸´Ù ±â´ÉÀÌ Á¦ÇÑµÈ º¯Á¾À¸·Î, ¹®¹ýÀº C¿Í ¾à°£ ´Ù¸¨´Ï´Ù.
printf format-string... parameter...
/bin/printf³ª /usr/bin/printfÀÇ bash ³»Àå ¸í·É ¹öÀüÀÔ´Ï´Ù. ´õ ÀÚ¼¼ÇÑ ³»¿ëÀº printf(½Ã½ºÅÛ ¸í·É¾î)ÀÇ ¸Ç ÆäÀÌÁö¸¦ Âü°íÇϼ¼¿ä.
°æ°í |
bashÀÇ ¿¾³¯ ¹öÀüÀº printf¸¦ Áö¿øÇÏÁö ¾ÊÀ» ¼öµµ ÀÖ½À´Ï´Ù. |
¿¹ 11-1. printf°¡ ½ÇÁ¦·Î ¾²ÀÌ´Â ¿¹Á¦
#!/bin/bash # printf demo PI=3.14159265358979 DecimalConstant=31373 Message1="¾È³çµé ÇϽŰ¡," Message2="Áö±¸ÀÎ ¿©·¯ºÐ." echo printf "Pi¸¦ ¼Ò¼öÁ¡ ÀÌÇÏ 2 ÀÚ¸®¸¸ Ç¥½Ã = %1.2f" $PI echo printf "Pi¸¦ ¼Ò¼öÁ¡ ÀÌÇÏ 9 ÀÚ¸®¸¸ Ç¥½Ã = %1.9f" $PI # ¹Ý¿Ã¸²ÀÌ Àß µÆÁÒ? printf "\n" # ¶óÀÎÇǵ带 ÂïÀ½. # 'echo'¿Í ¶È°°À½. printf "»ó¼ö = \t%d\n" $DecimalConstant # ÅÇÀÌ µé¾î°¬ÁÒ(\t) printf "%s %s \n" $Message1 $Message2 echo # ==========================================# # C ÇÔ¼öÀÎ 'sprintf'¸¦ ½Ã¹Ä·¹À̼Ç. # Çü½ÄÈµÈ ¹®ÀÚ¿·Î º¯¼ö¸¦ ·Îµù. echo Pi12=$(printf "%1.12f" $PI) echo "Pi¸¦ ¼Ò¼öÁ¡ 12 ÀÚ¸®¸¸ Ç¥½Ã = $Pi12" Msg=`printf "%s %s \n" $Message1 $Message2` echo $Msg; echo $Msg # ÀÌ·¸°Ô Çϸé, 'sprintf' ÇÔ¼ö´Â Bash¿¡¼ ·ÎµùÇÒ ¼ö ÀÖ´Â ¸ðµâ·Î # Á¢±ÙÀÌ °¡´ÉÇØ ÁöÁö¸¸, À̽ļºÀÌ ÀÖ´Â ±¸ÇöÀº ¾Æ´Õ´Ï´Ù. exit 0 |
printf´Â ¿¡·¯ ¸Þ¼¼Áö¸¦ Çü½ÄÈ ÇØ¼ Ãâ·ÂÇØ ÁÙ ¶§ ¾ÆÁÖ À¯¿ëÇÏ°Ô ¾²ÀÔ´Ï´Ù.
E_BADDIR=65 var=nonexistent_directory error() { printf "$@" >&2 # ÀÎÀÚ·Î ³Ñ¾î¿Â À§Ä¡ ¸Å°³º¯¼ö¸¦ Çü½ÄÈÇØ¼ Ç¥ÁØ¿¡·¯·Î Ãâ·Â echo exit $E_BADDIR } cd $var || error $"%s ·Î ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù." "$var" # Thanks, S.C. |
º¯¼ö°ªÀ» Ç¥ÁØÀԷ¿¡¼ "ÀÐ¾î µéÀÔ´Ï´Ù." Áï, Űº¸µå¿¡¼ »ç¿ëÀÚÀÇ ÀÔ·ÂÀ» ¹Þ¾Æ ó¸®ÇÕ´Ï´Ù. -a ¿É¼ÇÀ» ÁÖ¸é read´Â º¯¼ö¸¦ ¹è¿·Î ¹Þ¾Æ µéÀÔ´Ï´Ù(¿¹ 26-2 Âü°í).
¿¹ 11-2. read·Î º¯¼ö ÇÒ´çÇϱâ
#!/bin/bash echo -n "'var1' º¯¼ö°ªÀ» ³ÖÀ¸¼¼¿ä: " # -n ¿É¼ÇÀº ´º¶óÀÎÀ» Á¦°ÅÇØ ÁÝ´Ï´Ù. read var1 # var1 º¯¼ö°¡ read¿¡ ÀÇÇØ ¼¼Æ®µÇ±â ¶§¹®¿¡ var1 ¾Õ¿¡ '$'°¡ ¾ø½À´Ï´Ù. ÁÖÀÇÇϼ¼¿ä. echo "var1 = $var1" echo # ÇϳªÀÇ 'read' ¹®À¸·Î ¿©·¯°³ÀÇ º¯¼ö¸¦ ¼¼Æ®ÇÒ ¼ö ÀÖ½À´Ï´Ù. echo -n "'var2'¿Í 'var3'ÀÇ °ªÀ» ³ÖÀ¸¼¼¿ä(ºó ÄÀ̳ª ÅÇÀ¸·Î ±¸ºÐ): " read var2 var3 echo "var2 = $var2 var3 = $var3" # ÇÑ °³ °ª¸¸ ÁÖ°Ô µÇ¸é, ´Ù¸¥ º¯¼ö(µé)Àº ¼¼Æ®°¡ ¾È µÈ »óÅÂ(³Î)·Î ³²°Ô µË´Ï´Ù. exit 0 |
read·Î ÀÔ·ÂÀ» ³ÖÀ» ¶§ º¸ÅëÀº ´º¶óÀÎ Àü¿¡ \¸¦ ³Ö¾î ´º¶óÀÎÀ» ¹«½ÃÇÏ°Ô ÇÕ´Ï´Ù. -r ¿É¼ÇÀ» ÁÖ¸é \ °¡ ¹®ÀÚ ±×´ë·Î ÇØ¼®µÇµµ·Ï ÇÕ´Ï´Ù.
¿¹ 11-3. read·Î ¿©·¯ÁÙÀÇ ÀÔ·Â ³Ö±â
#!/bin/bash echo echo "\\ ·Î ³¡³ª´Â ¹®ÀÚ¿À» ÀÔ·ÂÇϰí <ENTER> ¸¦ ´©¸£¼¼¿ä." echo "±× ´ÙÀ½¿¡ µÎ ¹øÂ° ¹®ÀÚ¿À» ÀÔ·ÂÇϰí <ENTER> ¸¦ ´Ù½Ã ´©¸£¼¼¿ä." read var1 # "var1"À» ÀÐÀ» ¶§ "\" ¶§¹®¿¡ ´º¶óÀÎÀÌ Á¦°ÅµË´Ï´Ù. # ù¹øÂ° ÁÙ \ # µÎ¹øÂ° ÁÙ echo "var1 = $var1" # var1 = ù¹øÂ° ÁÙ µÎ¹øÂ° ÁÙ # "\"·Î ³¡³ª´Â ÁÙÀ» ¸¸³¯ ¶§ ¸¶´Ù, # var1¿¡ ¹®ÀÚ¸¦ °è¼Ó ÀÔ·ÂÇϱâ À§Çؼ ´ÙÀ½ ÁÙÀ» À§ÇÑ ÇÁ·ÒÇÁÆ®¸¦ ¹Þ°Ô µË´Ï´Ù. echo; echo echo "\\ ·Î ³¡³ª´Â ´Ù¸¥ ¹®ÀÚ¿À» ÀÔ·ÂÇϰí <ENTER> ¸¦ ´©¸£¼¼¿ä." read -r var2 # -r ¿É¼ÇÀº "\"¸¦ ¹®ÀÚ ±×´ë·Î ÀÐ¾î µéÀÔ´Ï´Ù. # ù¹øÂ° ÁÙ \ echo "var2 = $var2" # var2 = ù¹øÂ° ÁÙ \ # ÀÔ·Â µ¥ÀÌŸ´Â ù¹øÂ° <ENTER> ¿¡¼ ³¡³ª°Ô µË´Ï´Ù. echo exit 0 |
read ¸í·É¾î´Â ÇÁ·ÒÇÁÆ®¸¦ º¸¿©ÁØ ´ÙÀ½ ENTER¾øÀÌ Å°´©¸§À» ¹Þ¾Æ µéÀÌ´Â Àç¹Õ´Â ¿É¼ÇÀ» °®°í ÀÖ½À´Ï´Ù.
# ENTER ¾øÀÌ Å°´©¸§À» ÀÐÀ½. read -s -n1 -p "۸¦ ´©¸£¼¼¿ä " keypress echo; echo "´ç½ÅÀÌ ´©¸¥ Ű´Â "\"$keypress\""ÀÔ´Ï´Ù." # -s ´Â ÀÔ·ÂÀ» ¿¡ÄÚÇÏÁö ¸»¶ó´Â ¿É¼ÇÀÔ´Ï´Ù. # -n N Àº µü N °³ÀÇ ¹®ÀÚ¸¸ ¹Þ¾Æ µéÀ̶ó´Â ¿É¼ÇÀÔ´Ï´Ù. # -p ´Â ÀÔ·ÂÀ» Àбâ Àü¿¡ ´ÙÀ½¿¡ ³ª¿À´Â ÇÁ·ÒÇÁÆ®¸¦ ¿¡ÄÚÇ϶ó´Â ¿É¼ÇÀÔ´Ï´Ù. # ÀÌ ¿É¼ÇµéÀº ¼ø¼°¡ ¹Ù·Î µÇ¾î ÀÖ¾î¾ß Çϱ⠶§¹®¿¡ ¾²±â°¡ ¾à°£ ±î´Ù·Ó½À´Ï´Ù. |
read ¸í·É¾î´Â Ç¥ÁØÀÔ·ÂÀ¸·Î ÀçÁöÇâµÈ ÆÄÀÏ¿¡¼ º¯¼ö°ªÀ» "ÀÐÀ»" ¼öµµ ÀÖ½À´Ï´Ù. ÀÔ·Â ÆÄÀÏÀÌ ÇÑ ÁÙ ÀÌ»óÀ̶ó¸é ù ¹øÂ° ÁÙ¸¸ º¯¼ö·Î ÇÒ´çµË´Ï´Ù. read°¡ Çϳª ÀÌ»óÀÇ ¸Å°³º¯¼ö¸¦ °®°í ÀÖ´Ù¸é °¢ º¯¼ö´Â °ø¹é ¹®ÀÚ·Î ±¸ºÐµÇ´Â ¿¬¼ÓÀûÀÎ ¹®ÀÚ¿·Î ÇÒ´çµË´Ï´Ù. Á¶½ÉÇϼ¼¿ä!
¿¹ 11-4. read¸¦ ÆÄÀÏ ÀçÁöÇâ°ú °°ÀÌ ¾²±â
#!/bin/bash read var1 <data-file echo "var1 = $var1" # "data-file"ÀÇ Ã¹¹øÂ° ÁÙ Àüü°¡ var1À¸·Î ¼¼ÆÃ read var2 var3 <data-file echo "var2 = $var2 var3 = $var3" # "read"ÀÇ Á÷°üÀûÀÌÁö ¾ÊÀº Çൿ¿¡ ÁÖÀÇÇϼ¼¿ä. # 1) ÀÔ·Â ÆÄÀÏÀÇ Á¦ÀÏ Ã³À½À¸·Î µ¹¾Æ°¡¼, # 2) °¢ º¯¼ö´Â ÁÙ Àüü°¡ ¾Æ´Ñ °ø¹é¹®ÀÚ·Î ³ª´©¾îÁø ¹®ÀÚ¿·Î ¼¼Æ®µÊ. # 3) ¸¶Áö¸· º¯¼ö´Â ±× ÁÙÀÇ ³ª¸ÓÁö·Î ¼¼Æ®. # 4) º¯¼ö °¹¼ö°¡ °ø¹é¹®ÀÚ·Î ³ª´©¾îÁø ¹®ÀÚ¿º¸´Ù ¸¹´Ù¸é ³ª¸ÓÁö º¯¼öµéÀº ¼¼Æ®µÇÁö ¾ÊÀ½. echo "------------------------------------------------" # À§ÀÇ ¹®Á¦¸¦ ·çÇÁ·Î ÇØ°áÇØ º¸°Ú½À´Ï´Ù. while read line do echo "$line" done <data-file # Heiner Steven ÀÌ ÀÌ ºÎºÐÀ» ÁöÀûÇØ ÁÖ¾ú½À´Ï´Ù. echo "------------------------------------------------" # "read"°¡ ÀÐ¾î µéÀÌ´Â ÁÙÀÌ °ø¹é¹®ÀÚ°¡ ¾Æ´Ñ ´Ù¸¥ ¹®ÀÚ·Î ±¸ºÐµÇµµ·Ï ÇÏ·Á¸é # $IFS(³»ºÎ ÇÊµå ±¸ºÐÀÚ, Internal Field Separator)¸¦ ¾²¸é µË´Ï´Ù. echo "¸ðµç »ç¿ëÀÚ ¸ñ·Ï:" OIFS=$IFS; IFS=: # /etc/passwd ´Â ÇÊµå ±¸ºÐÀÚ·Î ":"¸¦ ¾¹´Ï´Ù. while read name passwd uid gid fullname ignore do echo "$name ($fullname)" done </etc/passwd # I/O ÀçÁöÇâ. IFS=$OIFS # ¿ø·¡ $IFS ¸¦ º¹±¸½ÃÅ´. # ÀÌ Äڵ嵵 Heiner Steven ÀÌ Á¦°øÇØ ÁÖ¾ú½À´Ï´Ù. exit 0 |
Àͼ÷ÇÑ ¸í·É¾îÀÎ cd´Â ½ºÅ©¸³Æ®¿¡¼ ¾î¶² ¸í·É¾î°¡ ƯÁ¤ÇÑ µð·ºÅ丮¿¡¼ ½ÇÇàµÉ Çʿ䰡 ÀÖÀ» ¶§ ±× µð·ºÅ丮·Î ¿Å°Ü°¡±â À§ÇØ ¾²ÀÔ´Ï´Ù.
(cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xpvf -) |
cd°¡ ½Éº¼¸¯ ¸µÅ©¸¦ ¹«½ÃÇÏ°í ¿ø·¡ µð·ºÅ丮·Î °¡µµ·Ï Çϱâ À§Çؼ´Â -P(¹°¸®ÀûÀÎ, physical) ¿É¼ÇÀ» ÁÖ¸é µË´Ï´Ù.
cd - ¶ó°í ÇÏ¸é ¹Ù·Î Àü ÀÛ¾÷ µð·ºÅ丮ÀÎ $OLDPWD ·Î ¿Å°Ü °©´Ï´Ù.
ÇöÀç ÀÛ¾÷ µð·ºÅ丮¸¦ Ãâ·Â(Print Working Directory). ÀÌ ¸í·É¾î´Â »ç¿ëÀÚ(ȤÀº ½ºÅ©¸³Æ®)ÀÇ ÇöÀç µð·ºÅ丮(¿¹ 11-5 Âü°í)¸¦ ¾Ë·ÁÁÝ´Ï´Ù. ³»ºÎ º¯¼öÀÎ $PWDÀÇ °ªÀ» Àд °Í°ú µ¿ÀÏÇÑ È¿°ú¸¦ °¡Á®¿É´Ï´Ù.
ÀÌ ¸í·É¾îµéÀº ÀÛ¾÷ µð·ºÅ丮¸¦ Áñ°Üã±â¿¡ ±â¾ï½ÃÄÑÁÖ´Â ¸ÞÄ«´ÏÁòÀ¸·Î, µð·ºÅ丮°£¿¡ ¼ø¼´ë·Î ¿Ô´Ù °¬´Ù ÇÒ ¼ö ÀÖ°Ô ÇØ ÁÝ´Ï´Ù. µð·ºÅ丮 À̸§À» ±â¾ïÇϱâ À§Çؼ Ǫ½¬´Ù¿î ½ºÅÃÀ» »ç¿ëÇÕ´Ï´Ù. ¿É¼ÇÀ» Á༠µð·ºÅ丮 ½ºÅÿ¡ ´ëÇØ¼ ´Ù¾çÇÑ Á¶ÀÛÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù.
pushd dir-nameÀº dir-nameÀ» µð·ºÅ丮 ½ºÅÿ¡ ³Ö°í µ¿½Ã¿¡ ÇöÀç µð·ºÅ丮¸¦ ±× µð·ºÅ丮·Î ¿Å°Ü ÁÝ´Ï´Ù.
popd´Â µð·ºÅ丮 ½ºÅÃÀÇ Á¦ÀÏ À§¿¡ ÀÖ´Â µð·ºÅ丮¸¦ Áö¿ì°í(pop) µ¿½Ã¿¡ ÇöÀç µð·ºÅ丮¸¦ ±× µð·ºÅ丮·Î ¿Å°Ü ÁÝ´Ï´Ù.
dirsÀº µð·ºÅ丮 ½ºÅÃÀÇ ¸ñ·ÏÀ» º¸¿©ÁÝ´Ï´Ù ($DIRSTACK°ú °°À½). pushd³ª popd°¡ ¼º°øÇÑ´Ù¸é dirs°¡ ÀÚµ¿À¸·Î ºÒ¸³´Ï´Ù.
µð·ºÅ丮 À̸§À» Çϵå ÄÚµùÇÏÁö ¾Ê°í µð·ºÅ丮¸¦ ¿©±â Àú±â·Î ¿Å°Ü ´Ù³à¾ß ÇÏ´Â ½ºÅ©¸³Æ®°¡ ÀÌ ¸í·É¾î¸¦ ¾²¸é ¾ÆÁÖ ÁÁ½À´Ï´Ù. ½ºÅ©¸³Æ® ³»¿¡¼ µð·ºÅ丮 ½ºÅÃÀÇ ³»¿ëÀ» ´ã°í ÀÖ´Â $DIRSTACK ¹è¿ º¯¼ö¿¡ ¹¬½ÃÀûÀ¸·Î Á¢±ÙÀÌ °¡´ÉÇϱ⠶§¹®¿¡ ÁÖÀÇÇØ¾ß ÇÕ´Ï´Ù.
¿¹ 11-5. ÇöÀç ÀÛ¾÷ µð·ºÅ丮 º¯°æÇϱâ
#!/bin/bash dir1=/usr/local dir2=/var/spool pushd $dir1 # ÀÚµ¿À¸·Î 'dirs'¸¦ ½ÇÇàÇÕ´Ï´Ù(µð·ºÅ丮 ½ºÅÃÀÇ ³»¿ëÀ» Ç¥ÁØÃâ·ÂÀ¸·Î »Ñ¸²). echo "Now in directory `pwd`." # ¿ªµû¿ÈÇ¥(backquote)¸¦ °Ç 'pwd'. # 'dir1'¿¡¼ ¾Æ¹« ÀÏÀ̳ª Çϰí, pushd $dir2 echo "Áö±ÝÀº `pwd` µð·ºÅ丮¿¡ ÀÖ½À´Ï´Ù." # 'dir2'¿¡¼ ¾Æ¹« ÀÏÀ̳ª ÇÑ ´ÙÀ½, echo "DIRSTACK ¹è¿ÀÇ top Ç׸ñÀº $DIRSTACK ÀÔ´Ï´Ù." popd echo "ÀÌÁ¦ `pwd` µð·ºÅ丮·Î µ¹¾Æ¿Ô½À´Ï´Ù." # 'dir1'¿¡¼ ¾Æ¹« ÀÏÀ̳ª Çϼ¼¿ä. popd echo "ÀÌÁ¦ ¿ø·¡ÀÇ `pwd` µð·ºÅ丮·Î µ¹¾Æ¿Ô½À´Ï´Ù." exit 0 |
let ¸í·É¾î´Â º¯¼ö¿¡ ´ëÇØ¼ »ê¼ú ¿¬»êÀ» ¼öÇàÇÕ´Ï´Ù. ¸¹Àº °æ¿ì¿¡ ÀÖ¾î¼ exprº¸´Ù Á» °£´ÜÇÑ ±â´ÉÀ» ¼öÇàÇÕ´Ï´Ù.
¿¹ 11-6. letÀ¸·Î ¸î °¡Áö »ê¼ú ¿¬»êÀ» Çϱâ.
#!/bin/bash echo let a=11 # 'a=11' °ú ¶È°°½À´Ï´Ù. let a=a+5 # let "a = a + 5" ¿Í ¶È°°½À´Ï´Ù. # (Å«µû¿ÈÇ¥¿Í ºó ÄÀ» ¾²¸é Á» ´õ ÀбⰡ ÆíÇÏÁÒ) echo "11 + 5 = $a" let "a <<= 3" # let "a = a << 3" °ú ¶È°°½À´Ï´Ù. echo "\"\$a\" (=16) ¸¦ 3 ¹ø ¿ÞÂÊ ½¬ÇÁÆ® = $a" let "a /= 4" # let "a = a / 4" ¿Í ¶È°°½À´Ï´Ù. echo "128 / 4 = $a" let "a -= 5" # let "a = a - 5" ¿Í ¶È°°½À´Ï´Ù. echo "32 - 5 = $a" let "a = a * 10" # let "a = a * 10" °ú ¶È°°½À´Ï´Ù. echo "27 * 10 = $a" let "a %= 8" # let "a = a % 8" °ú ¶È°°½À´Ï´Ù. echo "270 modulo 8 = $a (270 / 8 = 33, ³ª¸ÓÁö´Â $a)" echo exit 0 |
eval arg1 [arg2] ... [argN]
¸ñ·Ï¿¡ µé¾î ÀÖ´Â ÀÎÀÚ¸¦ ¸í·É¾î·Î º¯È¯(½ºÅ©¸³Æ® ¾È¿¡¼ Äڵ带 ¸¸µé¾î ³¾ ¶§ À¯¿ëÇÔ).
¿¹ 11-7. evalÀÇ È¿°ú º¸¿©ÁÖ±â
#!/bin/bash y=`eval ls -l` # y=`ls -l` °ú ºñ½ÁÇÏÁö¸¸, echo $y # ¶óÀÎÇǵ尡 Áö¿öÁý´Ï´Ù. y=`eval df` # y=`df` ¿Í ºñ½ÁÇÏÁö¸¸, echo $y # ¶óÀÎÇǵ尡 Áö¿öÁý´Ï´Ù. # ¶óÀÎÇǵå(LF)°¡ ¾ø¾îÁö±â ¶§¹®¿¡ Ãâ·ÂÀ» ÆÄ½ÌÇϱⰡ ´õ ½¬¿ï °ÍÀÔ´Ï´Ù. exit 0 |
¿¹ 11-8. °Á¦·Î ·Î±× ¾Æ¿ô ½Ã۱â
#!/bin/bash y=`eval ps ax | sed -n '/ppp/p' | awk '{ print $1 }'` # 'ppp'ÀÇ ÇÁ·Î¼¼½º ¹øÈ£¸¦ ãÀº ´ÙÀ½, kill -9 $y # Á×À̰í, # À§¿¡¼ ÇÑ °ÍÀº ´ÙÀ½Ã³·³ ÇØµµ µË´Ï´Ù. # kill -9 `ps ax | awk '/ppp/ { print $1 }' chmod 666 /dev/ttyS3 # ppp¿¡ SIGKILLÀ» ³¯¸®¸é Á÷·Ä Æ÷Æ®ÀÇ ÆÛ¹Ì¼ÇÀÌ ¹Ù²î±â ¶§¹®¿¡ # ÀÌÀü ÆÛ¹Ì¼ÇÀ¸·Î º¹±¸½ÃÄÑ¾ß µË´Ï´Ù. rm /var/lock/LCK..ttyS3 # Á÷·Ä Æ÷Æ®¿ë Àá±Ý ÆÄÀÏÀ» Áö¿ó´Ï´Ù. exit 0 |
¿¹ 11-9. "rot13" ¹öÀü
#!/bin/bash # 'eval'·Î "rot13"À» ±¸Çö. # (¿Å±äÀÌ: rot13 À̶õ °¢ ¾ËÆÄºªÀ» 13¹ø ·ÎÅ×ÀÌÆ®(±×·¡¼ À̸§ÀÌ rot13) ½ÃŰ´Â # °£´ÜÇÑ ¾ÏÈ£ÈÀÔ´Ï´Ù.) # "rot13.sh" ¿¹Á¦¿Í ºñ±³ÇØ º¸¼¼¿ä. setvar_rot_13() # "rot13" ½ºÅ©·¥ºí(¾ÏÈ£È) { local varname=$1 varvalue=$2 eval $varname='$(echo "$varvalue" | tr a-z n-za-m)' } setvar_rot_13 var "foobar" # "foobar" ¸¦ rot13 ½Ã۸é, echo $var # sbbone echo $var | tr a-z n-za-m # foobar # ¿ø·¡ º¯¼ö·Î µÇµ¹¸². # Stephane Chazelas Á¦°ø. exit 0 |
°æ°í |
eval ¸í·É¾î´Â ¾ÆÁÖ À§ÇèÇÑ »óȲÀ» °¡Á®¿Ã ¼ö Àֱ⠶§¹®¿¡ ÇÕ´çÇÑ ´Ù¸¥ ¹æ¹ýÀÌ ÀÖ´Ù¸é À̰ÍÀ» ¾²Áö ¾Ê´Â °ÍÀÌ ÁÁ½À´Ï´Ù. eval $COMMANDS´Â rm -rf * ó·³ À¯ÄèÇÏÁö ¾ÊÀº °ªÀ» °®°í ÀÖÀ» ¼öµµ ÀÖ´Â COMMANDSÀ» ½ÇÇà ½Ãŵ´Ï´Ù. ¸ð¸£´Â »ç¶÷ÀÌ ÀÛ¼ºÇÑ Àß ¸ð¸£´Â Äڵ忡 ´ëÇØ¼ eval¸¦ ½ÇÇà ½ÃŰ´Â °ÍÀº ¾ÆÁÖ À§ÇèÇÕ´Ï´Ù. |
set ¸í·É¾î´Â ³»ºÎ ½ºÅ©¸³Æ® º¯¼ö°ªÀ» ¹Ù²ãÁÝ´Ï´Ù. ½ºÅ©¸³Æ®ÀÇ ÇൿÀ» °áÁ¤ÇÏ´Â ¿É¼Ç Ç÷¡±×¸¦ Ű°Å³ª ²ô´Â ¿ªÇÒ¿¡ ¾²À̱⵵ ÇÏ°í Æ¯Á¤ ¸í·É¾îÀÇ °á°ú(set `command`)¸¦ À§Ä¡ ¸Å°³º¯¼ö·Î ¸®¼Â ½ÃÄѼ ½ºÅ©¸³Æ®°¡ ±× ¸í·É¾îÀÇ °á°ú¸¦ Çʵ庰·Î ÆÄ½ÌÇÒ ¼ö ÀÖ°Ô ÇØ ÁÝ´Ï´Ù.
¿¹ 11-10. À§Ä¡ ¸Å°³º¯¼ö¿Í set ¾²±â
#!/bin/bash # "set-test" ½ºÅ©¸³Æ® # 3°³ÀÇ ÀÎÀÚ¸¦ Á༠½ÇÇà½ÃŰ¼¼¿ä. # ¿¹¸¦ µé¸é, "./set-test one two three". echo echo "set \`uname -a\` Çϱâ ÀüÀÇ À§Ä¡ ¸Å°³º¯¼ö:" echo "ù¹øÂ° ¸í·É¾îÁÙ ÀÎÀÚ = $1" echo "µÎ¹øÂ° ¸í·É¾îÁÙ ÀÎÀÚ = $2" echo "¼¼¹øÂ° ¸í·É¾îÁÙ ÀÎÀÚ = $3" echo set `uname -a` # `uname -a` ÀÇ Ãâ·ÂÀ» À§Ä¡ ¸Å°³º¯¼ö·Î ¼¼Æ® echo "set \`uname -a\` ÇÑ ´ÙÀ½ÀÇ À§Ä¡ ¸Å°³º¯¼ö:" # $1, $2, $3... ÀÌ `uname -a` ÀÇ °á°ú·Î ´Ù½Ã Ãʱâȵ˴ϴÙ. echo "'uname -a' ÀÇ Ã¹¹øÂ° Çʵå = $1" echo "'uname -a' ÀÇ µÎ¹øÂ° Çʵå = $2" echo "'uname -a' ÀÇ ¼¼¹øÂ° Çʵå = $3" echo exit 0 |
¿¹ 10-2 Âü°í.
unset ¸í·É¾î´Â ½© º¯¼ö¸¦ È¿°úÀûÀ¸·Î ³Î(null)·Î ¼¼Æ®¸¦ ÇØ¼ ±× º¯¼ö¸¦ Áö¿ì´Â È¿°ú¸¦ °¡Á®¿É´Ï´Ù. ÀÌ ¸í·É¾î´Â À§Ä¡ ¸Å°³º¯¼ö¿¡ ´ëÇØ¼ µ¿ÀÛÇÏÁö ¾Ê´Â °Í¿¡ ÁÖÀÇÇϼ¼¿ä.
bash$ unset PATH bash$ echo $PATH bash$ |
export ¸í·É¾î´Â ÇöÀç ½ÇÇàÁßÀÎ ½ºÅ©¸³Æ®³ª ½©ÀÇ ¸ðµç ÀÚ½Ä ÇÁ·Î¼¼½º°¡ º¯¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇØ ÁÝ´Ï´Ù. ºÒÇàÇϰԵµ ½ºÅ©¸³Æ®³ª ½©À» ºÎ¸¥ ºÎ¸ð ÇÁ·Î¼¼½º¿¡°Ô º¯¼ö¸¦ ´Ù½Ã export ÇÒ ¹æ¹ýÀº ¾ø½À´Ï´Ù. export´Â ½Ã½ºÅÛ ±¸µ¿(startup) ÆÄÀÏ¿¡¼ ȯ°æ º¯¼ö¸¦ ÃʱâÈÇÏ°í ±× ´ÙÀ½¿¡ »ý¼ºµÉ »ç¿ëÀÚ ÇÁ·Î¼¼½ºµéÀÌ ±× º¯¼ö¿¡ Á¢±ÙÇÒ ¼ö ÀÖ°Ô ÇØÁÖ´Â ¾ÆÁÖ Áß¿äÇÑ ¿ëµµ·Î ¾²ÀÔ´Ï´Ù.
¿¹ 11-12. export¸¦ ½á¼, ³»ÀåµÈ awk ½ºÅ©¸³Æ®¿¡ º¯¼ö¸¦ Àü´ÞÇϱâ
#!/bin/bash # "column totaler" ½ºÅ©¸³Æ®(col-totaler.sh)ÀÇ ¶Ç ´Ù¸¥ ¹öÀü. # ´ë»ó ÆÄÀÏÀÇ ÁÖ¾îÁø ÁöÁ¤µÈ Ä÷³À» ¸ðµÎ ´õÇØÁÜ. # ¿©±â¼´Â ½ºÅ©¸³Æ® º¯¼ö¸¦ 'awk'¿¡°Ô Àü´ÞÇϱâ À§Çؼ ȯ°æ(environment)À» »ç¿ëÇÕ´Ï´Ù. ARGS=2 E_WRONGARGS=65 if [ $# -ne "$ARGS" ] # ¿øÇÏ´Â ¼ö ¸¸ÅÀÇ ¸í·É¾îÁÙ ÀÎÀÚ°¡ ³Ñ¾î¿Ô´ÂÁö È®ÀÎ. then echo "»ç¿ë¹ý: `basename $0` filename column-number" exit $E_WRONGARGS fi filename=$1 column_number=$2 #===== ¿©±â±îÁö´Â ¿ø·¡ ½ºÅ©¸³Æ®¿Í ¶È°°½À´Ï´Ù =====# export column_number # column_number ¸¦ ȯ°æÀ¸·Î export ÇØ¼ awk ½ºÅ©¸³Æ®¿¡¼ ´Ù½Ã ²¨³»°¥¼ö ÀÖ°Ô ÇÔ. # awk ½ºÅ©¸³Æ® ½ÃÀÛ. # ------------------------------------------------ awk '{ total += $ENVIRON["column_number"] } END { print total }' $filename # ------------------------------------------------ # awk script ³¡. # Stephane Chazelas Á¦°ø. exit 0 |
ÀÛÀº Á¤º¸: export var1=xxx¶ó°í ÇØ¼ ÃʱâÈ¿Í export¸¦ Çѹø¿¡ ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
declare ¿Í typeset ¸í·É¾î´Â º¯¼öÀÇ Æ¯¼ºÀ» ÁöÁ¤Çϰųª Á¦ÇÑÇØ ÁÝ´Ï´Ù.
declare -r°ú °°Àº ¿ªÇÒÀ» ÇÏ´Â ¸í·É¾î·Î¼, ¾î¶² º¯¼ö¸¦ Àбâ Àü¿ëÀ¸·Î ¸¸µé¾î ÁÖ´Â °ÍÀε¥, °á±¹ »ó¼ö·Î ¾²°Ú´Ù´Â °ÍÀÔ´Ï´Ù. ÀÌ·± º¯¼ö°ªÀ» ¹Ù²Ù·Á°í ÇÑ´Ù¸é ¿¡·¯ ¸Þ¼¼Áö¸¦ ¸¸³ª°Ô µË´Ï´Ù. C ¾ð¾îÀÇ const ÇüÁöÁ¤ÀÚ¿Í ºñ½ÁÇÑ °ÍÀ¸·Î º¸¸é µË´Ï´Ù.
À̰ÍÀº ¾ÆÁÖ °·ÂÇÑ µµ±¸·Î¼ ¸í·É¾î ÁÙ¿¡¼ ½ºÅ©¸³Æ®·Î ³Ñ¾î¿Â ÀÎÀÚ¸¦ ÆÄ½ÌÇØ ÁÝ´Ï´Ù. C ÇÁ·Î±×·¡¸Óµé¿¡°Ô Àͼ÷ÇÑ getopt ¶óÀ̺귯¸® ÇÔ¼öÀÇ bash ¹öÀüÀÔ´Ï´Ù. ½ºÅ©¸³Æ®·Î ³Ñ¾î¿À´Â ¿©·¯°³ÀÇ ¿É¼Ç [2] °ú ±× ÇØ´ç ÀÎÀÚµéÀ» ó¸®ÇØÁÝ´Ï´Ù(¿¹¸¦ µé¸é, scriptname -abc -e /usr/local).
getopts´Â ³»ºÎÀûÀ¸·Î µÎ °³ÀÇ º¯¼ö¸¦ »ç¿ëÇÕ´Ï´Ù. $OPTIND(OPTion INDex)´Â ÀÎÀÚ Æ÷ÀÎÅÍÀ̰í $OPTARG(OPTion ARGument)´Â ¿É¼Ç¿¡ µþ·Á ³Ñ¾î¿À´Â ÇØ´ç ÀÎÀÚ(¼±ÅÃÀû)ÀÔ´Ï´Ù. ¼±¾ð ű×ÀÇ ¿É¼Ç À̸§µÚ¿¡ ÄÝ·ÐÀÌ ÀÖÀ¸¸é ÇØ´ç ÀÎÀÚ°¡ ÀÖ´Ù´Â ¶æÀÔ´Ï´Ù.
getopts´Â º¸Åë while ·çÇÁ¿Í °°ÀÌ ½á¼ ¿É¼Ç°ú ÀÎÀÚ¸¦ ÇÑ ¹ø¿¡ Çϳª¾¿ ó¸®Çϰí $OPTIND º¯¼ö°ªÀ» Çϳª¾¿ ÁÙ¿©¼ ±× ´ÙÀ½À» ó¸®ÇÏ°Ô ÇÕ´Ï´Ù.
Âü°í:
¸í·É¾î ÁÙ¿¡¼ ÀÎÀÚ¾Õ¿¡´Â »©±â(-)³ª ´õÇϱâ(+)¸¦ Àû¾î Áà¾ß Çϴµ¥ ÀÌ Á¢µÎ»ç°¡ ÀÖ¾î¾ß getopts°¡ ¸í·É¾î ÁÙ ÀÎÀÚ¸¦ ¿É¼ÇÀ¸·Î ÀνÄÇÒ ¼ö ÀÖ½À´Ï´Ù. ½ÇÁ¦·Î´Â, -³ª +°¡ ºüÁ® Àִ ù¹øÂ° ÀÎÀÚ¸¦ ¸¸³ª¸é ¹Ù·Î Á¾·áÇÏ°Ô µË´Ï´Ù.
getops´Â Ç¥ÁØ while ·çÇÁ¿Í ¾à°£ ´Ù¸¥ ÇüÅ·ΠÁ¶°Ç ´ë°ýÈ£°¡ ºüÁ® ÀÖ´Â ÇüÅÂÀÔ´Ï´Ù.
¿¹ÀüÀÇ getopt ´ë½Å getopts°¡ »õ·Ó°Ô ¾²ÀÔ´Ï´Ù.
while getopts ":abcde:fg" Option # Ãʱ⠼±¾ð. # a, b, c, d, e, f, g ¿É¼Ç(Ç÷¡±×)¸¸ Áö¿ø. # 'e' µÚÀÇ :·Î 'e' ¿É¼Ç¿¡´Â ÀÎÀÚ°¡ ÀÖ¾î¾ß µÈ´Ù´Â °ÍÀ» ³ªÅ¸³¿ do case $Option in a ) # 'a'ÀÏ °æ¿ì ÇÒ ÀÏ. b ) # 'b'ÀÏ °æ¿ì ÇÒ ÀÏ. ... e) # 'e'ÀÏ °æ¿ì ÇÒ ÀÏ, $OPTARG ·Î 'e' µÚ¿¡ µû¶ó¿À´Â ÇØ´ç ÀÎÀÚ¸¦ ó¸®. ... g ) # 'g'ÀÏ °æ¿ì ÇÒ ÀÏ. esac done shift $(($OPTIND - 1)) # ÀÎÀÚ Æ÷ÀÎÅ͸¦ ´ÙÀ½À¸·Î À̵¿. # º¸ÀÌ´Â °Íó·³ ±×·¸°Ô º¹ÀâÇÏÁö´Â ¾Ê½À´Ï´Ù. <¾¾ÀÍ>. |
¿¹ 11-13. getopts·Î ½ºÅ©¸³Æ®·Î ³Ñ¾î¿Â ¿É¼Ç°ú ÀÎÀÚ Àбâ
#!/bin/bash # 'getopts' ´Â ½ºÅ©¸³Æ®·Î ³Ñ¾î¿Â ¸í·É¾îÁÙ ÀÎÀÚ¸¦ ó¸®ÇØ ÁÝ´Ï´Ù. # ÀÎÀÚµéÀº "¿É¼Ç"(Ç÷¡±×)°ú ÇØ´ç ÀÎÀÚ·Î ÆÄ½ÌµË´Ï´Ù. # ÀÌ·¸°Ô ½ÇÇà½ÃÄÑ º¸¼¼¿ä. # 'scriptname -mn' # 'scriptname -oq qOption' (qOption Àº ¾Æ¹«·± ¹®ÀÚ¿ÀÌ¸é µË´Ï´Ù.) # 'scriptname -qXXX -r' # # 'scriptname -qr' - ¿øÇÏ´ø °á°ú°¡ ¾È ³ª¿À´Âµ¥, "r"ÀÌ "q" ¿É¼ÇÀÇ Ãß°¡ ÀÎÀڷΠ󸮵DZ⠶§¹®ÀÔ´Ï´Ù. # 'scriptname -q -r' - À§¿Í ¶È°°ÀÌ ¿øÄ¡ ¾Ê´Â °á°ú. # ¾î¶² ¿É¼Ç¿¡ Ãß°¡ ÀÎÀÚ("flag:")°¡ ÇÊ¿äÇÏ´Ù°í ¼³Á¤ÀÌ µÇ¸é # ¸í·É¾îÁÙ¿¡¼ Àڱ⠹ٷΠ´ÙÀ½¿¡ ³ª¿À´Â °ÍÀ» ¹«Á¶°Ç ÀÚ½ÅÀÇ ÀÎÀÚ·Î ¹Þ¾ÆµéÀÔ´Ï´Ù. NO_ARGS=0 OPTERROR=65 if [ $# -eq "$NO_ARGS" ] # ÀÎÀÚ ¾øÀÌ ºÒ·È±º¿ä. then echo "»ç¿ë¹ý: `basename $0` options (-mnopqrs)" exit $OPTERROR # ÀÎÀÚ°¡ ÁÖ¾îÁöÁö ¾Ê¾Ò´Ù¸é »ç¿ë¹ýÀ» ¾Ë·ÁÁÖ°í Á¾·á. fi # »ç¿ë¹ý: scriptname -options # ÁÖÀÇ: ´ë½¬(-)°¡ ÇÊ¿äÇÕ´Ï´Ù. while getopts ":mnopq:rs" Option do case $Option in m ) echo "1¹ø ½Ã³ª¸®¿À: option -m-";; n | o ) echo "2¹ø ½Ã³ª¸®¿À: option -$Option-";; p ) echo "3¹ø ½Ã³ª¸®¿À: option -p-";; q ) echo "4¹ø ½Ã³ª¸®¿À: option -q-, \"$OPTARG\"¸¦ Áà¼";; # 'q' ¿É¼ÇÀº Ãß°¡ ÀÎÀÚ°¡ ÀÖ¾î¾ß Çϴµ¥ ¾ø´Ù¸é µðÆúÆ®·Î 󸮵˴ϴÙ. r | s ) echo "5¹ø ½Ã³ª¸®¿À: option -$Option-"'';; * ) echo "±¸ÇöµÇÁö ¾ÊÀº ¿É¼ÇÀÌ ¼±ÅõƽÀ´Ï´Ù.";; # µðÆúÆ® esac done shift $(($OPTIND - 1)) # ÀÎÀÚ Æ÷ÀÎÅ͸¦ °¨¼Ò½ÃÄѼ ´ÙÀ½ ÀÎÀÚ¸¦ °¡¸£Å°°Ô ÇÕ´Ï´Ù. exit 0 |
ÀÌ ¸í·É¾î°¡ ¸í·É¾î ÁÙ¿¡¼ ºÒ¸°´Ù¸é ÇØ´ç ½ºÅ©¸³Æ®¸¦ ½ÇÇà ½Ãŵ´Ï´Ù. ½ºÅ©¸³Æ®¿¡¼ source file-nameÀ̶ó°í ºÒ¸°´Ù¸é file-nameÀ» ÀÐ¾î µéÀÏ °ÍÀÔ´Ï´Ù. C/C++ÀÇ #include Áö½ÃÀÚ¿Í °°Àº ¿ªÇÒÀ» ÇÕ´Ï´Ù. ¿©·¯°³ÀÇ ½ºÅ©¸³Æ®°¡ °øÅëÀ¸·Î ¾²ÀÌ´Â µ¥ÀÌŸ ÆÄÀÏÀ̳ª ÇÔ¼ö ¶óÀ̺귯¸®¸¦ ½á¾ß ÇÒ °æ¿ì°°Àº »óȲ¿¡¼ À¯¿ëÇÕ´Ï´Ù.
¿¹ 11-14. µ¥ÀÌŸ ÆÄÀÏ "Æ÷ÇÔÇϱâ"
#!/bin/bash . data-file # µ¥ÀÌŸ ÆÄÀÏ ·Îµå. # "source data-file"À̶ó°í ÇÏ´Â °Í°ú °°Áö¸¸, ÀÌ°Ô Á» ´õ À̽ļº ÀÖ´Â ¹æ¹ýÀÔ´Ï´Ù. # "data-file"Àº 'basename'À¸·Î ÂüÁ¶µÇ±â ¶§¹®¿¡ ÇöÀç µð·ºÅ丮¿¡ ²À ÀÖ¾î¾ß µË´Ï´Ù. # ÀÌÁ¦ ±× ÆÄÀÏ¿¡ µé¾î ÀÖ´Â ¸î°³ÀÇ µ¥ÀÌŸ¸¦ ÂüÁ¶ÇØ º¸°Ú½À´Ï´Ù. echo "variable1 (data-file ¿¡ ÀÖ´Â º¯¼ö) = $variable1" echo "variable3 (data-file ¿¡ ÀÖ´Â º¯¼ö) = $variable3" let "sum = $variable2 + $variable4" echo "variable2 + variable4 (data-file ¿¡ ÀÖ´Â º¯¼ö) = $sum" echo "message1 (data-file ¿¡ ÀÖ´Â º¯¼ö) Àº \"$message1\"" # ÁÖÀÇ: À̽ºÄÉÀÌÇÁµÈ Äõ¿ìÆ® print_message À̰ÍÀº data-file ÀÇ message-print ÇÔ¼ö°¡ º¸¿©ÁÖ´Â ¸Þ¼¼ÁöÀÔ´Ï´Ù. exit 0 |
À§ÀÇ ¿¹ 11-14¿¡¼ data-fileÀº °°Àº µð·ºÅ丮¿¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù.
# error free # (¿Å±äÀÌ: # Á¦ÀÏ ÀÁÙ¿¡ ÇѱÛÀÌ µé¾î°¡ ÀÖÀ¸¸é file data-file À̶ó°í ÇßÀ» ¶§ # data-file: International language text # ¶ó°í ³ª¿À³×¿ä. ÀÌ°Í ¶§¹®ÀÎÁö ¿¹Á¦¿¡¼ ÀÌ ÆÄÀÏÀ» . ÇÏ¸é ¿¡·¯°¡ ³³´Ï´Ù. # ¸Ç À§ÀÇ error free ´Â ÀÌ ¿¡·¯¸¦ ÇÇÇϱâ À§ÇÑ °ÍÀÔ´Ï´Ù.) # # # À̰ÍÀº ½ºÅ©¸³Æ®¿¡ ÀÇÇØ ÀÐÈ÷´Â µ¥ÀÌŸ ÆÄÀÏÀÔ´Ï´Ù. # ÀÌ·± Á¾·ùÀÇ ÆÄÀÏÀº º¸Åë º¯¼ö³ª ÇÔ¼öµîÀ» ´ã°í ÀÖ½À´Ï´Ù. # ½© ½ºÅ©¸³Æ®¿¡ ÀÇÇØ 'source'³ª '.'·Î ÀûÀçµÉ ¼ö ÀÖ½À´Ï´Ù. # º¯¼ö¸¦ ÃʱâÈ ÇսôÙ. variable1=22 variable2=474 variable3=5 variable4=97 message1="¾È³ç, Àß Áö³Â¾î?" message2="ÀÌÁ¨ µÆ¾î. ¾È³ç." print_message () { # ³Ñ¾î¿Â ¾î¶² ¸Þ¼¼Áöµµ ´Ù ¿¡ÄÚ½ÃÅ´. if [ -z "$1" ] then return 1 # ÀÎÀÚ°¡ ¾øÀ¸¸é ¿¡·¯. fi echo until [ -z "$1" ] do # ÇÔ¼ö·Î ³Ñ¾î¿Â ÀÎÀÚ¸¦ Çϳª¾¿ ¸ðµÎ ó¸®. echo -n "$1" # ¶óÀÎ Çǵ带 ¾ø¾Ö¸é¼ ÇÑ ¹ø¿¡ Çϳª¾¿ ¿¡ÄÚ. echo -n " " # ³¹¸» »çÀÌ¿¡ ºó ÄÀ» Áý¾î ³ÖÀ½. shift # ´ÙÀ½. done echo return 0 } |
½ºÅ©¸³Æ®¸¦ ¹«Á¶°Ç ³¡³¿. exit´Â Á¤¼ö°ªÀ» ÀÎÀÚ·Î ¹Þ¾Æ¼ ½©¿¡°Ô ½ºÅ©¸³Æ®ÀÇ Á¾·á »óŸ¦ ¾Ë·ÁÁÙ ¼öµµ ÀÖ½À´Ï´Ù. ¾ÆÁÖ °£´ÜÇÑ ½ºÅ©¸³Æ®°¡ ¾Æ´Ï¶ó¸é ½ºÅ©¸³Æ®ÀÇ ¸¶Áö¸·¿¡ exit 0ó·³ ¼º°øÀûÀÎ ½ÇÇàÀ» ¾Ë·Á ÁÖ´Â °ÍÀº ¾ÆÁÖ ÁÁÀº ½À°üÀÔ´Ï´Ù.
Âü°í: ¸¸¾à¿¡ exit°¡ ÀÎÀÚ ¾øÀÌ ¾²ÀÎ´Ù¸é ±× ½ºÅ©¸³Æ®ÀÇ Á¾·á »óÅ´ exit¸¦ Á¦¿ÜÇÏ°í °¡Àå ¸¶Áö¸·¿¡ ½ÇÇàµÈ ¸í·É¾îÀÇ Á¾·á »óÅ·ΠµË´Ï´Ù.
ÀÌ ½© ³»ºÎ ¸í·ÉÀº ÇöÀçÀÇ ÇÁ·Î¼¼½º¸¦ ÁÖ¾îÁø ¸í·É¾î·Î ´ëÄ¡½Ãŵ´Ï´Ù. º¸ÅëÀº ½©ÀÌ ¾î¶² ¸í·É¾î¸¦ ¸¸³ª¸é ±× ¸í·É¾î¸¦ ½ÇÇàÇϱâ À§Çؼ ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ Æ÷Å© [3] ½Ãŵ´Ï´Ù. ÇÏÁö¸¸ exec ³»Àå ¸í·ÉÀº Æ÷Å©¸¦ ÇÏÁö ¾Ê°í execµÈ ±× ¸í·É¾î·Î ½© ÀÚü¸¦ ´ëÄ¡½Ãŵ´Ï´Ù. ±×·¸±â ¶§¹®¿¡ ½ºÅ©¸³Æ®¿¡¼ ÀÌ ¸í·É¾î°¡ ¾²À̸é execµÈ ¸í·É¾î°¡ Á¾·áÇÒ ¶§ ½ºÅ©¸³Æ®°¡ °Á¦·Î Á¾·áµË´Ï´Ù. ÀÌ·± ÀÌÀ¯·Î, execÀ» ½ºÅ©¸³Æ®¿¡¼ ¾²·Á¸é ¾Æ¸¶µµ Á¦ÀÏ ¸¶Áö¸· ¸í·É¾î·Î ½á¾ß ÇÒ °Ì´Ï´Ù.
exec´Â ¶ÇÇÑ ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ÀçÇÒ´ç ÇÒ ¶§µµ ¾²ÀÔ´Ï´Ù. exec <zzz-fileÀº Ç¥ÁØÀÔ·ÂÀ» zzz-fileÀ¸·Î ¹Ù²ãÁÝ´Ï´Ù(¿¹ 16-1 Âü°í).
¿¹ 11-15. exec È¿°ú
#!/bin/bash exec echo "\"$0\" ¸¦ Á¾·áÇÕ´Ï´Ù." # ½ºÅ©¸³Æ®¿¡¼ Á¾·á. # ´ÙÀ½ ÁÙÀº Àý´ë ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù. echo "¿©±â´Â Àý´ë ¿¡ÄÚµÇÁö ¾Ê½À´Ï´Ù." exit 0 # ¿ª½Ã, ¿©±â¼ Á¾·áµÇÁöµµ ¾Ê°í¿ä. |
Âü°í: find ¸í·É¾îÀÇ -exec ¿É¼ÇÀº exec ½© ³»Àå ¸í·É°ú ´Ù¸¨´Ï´Ù.
ÀÌ ¸í·É¾î´Â ½©ÀÌ ½ÇÇàÁß¿¡ ¿É¼ÇÀ» ¹Ù²Ü ¼ö ÀÖ°Ô ÇØ ÁÝ´Ï´Ù(¿¹ 24-1°ú ¿¹ 24-2 Âü°í). ÀÌ´Â Á¾Á¾ Bash ½Ã½ºÅÛ ±¸µ¿ ÆÄÀÏ(startup files)¿¡¼ ¾²ÀÌ´Â µ¥ ÀÏ¹Ý ½ºÅ©¸³Æ®¿¡¼µµ ¾²ÀÏ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¸í·É¾î´Â bash ¹öÀü 2³ª ±× ´ÙÀ½ ¹öÀüºÎÅÍ ¾µ ¼ö ÀÖ½À´Ï´Ù..
shopt -s cdspell # 'cd'¸¦ ¾µ ¶§ µð·ºÅ丮 À̸§ÀÌ ¾à°£ Ʋ¸° °Í Á¤µµ´Â ÀÚµ¿À¸·Î °íÃÄÁÝ´Ï´Ù. |
´Ü¼øÈ÷ ¼º°øÀû(0)ÀÎ Á¾·á »óŸ¦ ¸®ÅÏÇÏ´Â ¸í·É¾î.
# ¹«ÇÑ ·çÇÁ while true # ":" ÀÇ º°Äª(alias) do operation-1 operation-2 ... operation-n # ·çÇÁ¸¦ ºüÁ® ³ª°¥ ¹æ¹ýÀÌ ÇÊ¿ä. done |
´Ü¼øÈ÷ ½ÇÆÐÇÑ Á¾·á »óŸ¦ ¸®ÅÏÇÏ´Â ¸í·É¾î.
# ³Î ·çÇÁ while false do # ÀÌ ºÎºÐÀº ½ÇÇàµÇÁö ¾ÊÀ½. operation-1 operation-2 ... operation-n # ¾Æ¹« Àϵµ ¾È ÀϾ´Ï´Ù! done |
¿ÜºÎ ¸í·É¾îÀÎ which¿Í ºñ½ÁÇÏ°Ô ÁÖ¾îÁø "cmd"ÀÇ ¿ÏÀüÇÑ °æ·Î¸íÀ» º¸¿© ÁÝ´Ï´Ù. ÇÏÁö¸¸, which¿Í´Â ´Ù¸£°Ô type´Â bash ³»Àå ¸í·ÉÀÔ´Ï´Ù. À¯¿ëÇÑ ¿É¼ÇÀÎ -a¸¦ ÁÖ¸é ÁÖ¾îÁø "cmd"°¡ Ű¿öµåÀÎÁö ³»Àå ¸í·ÉÀÎÁö¸¦ ¾Ë·ÁÁÖ°í ¶È°°Àº À̸§ÀÇ ½Ã½ºÅÛ ¸í·É¾î°¡ ÀÖ´Ù¸é ±× À§Ä¡µµ ¾Ë·ÁÁÝ´Ï´Ù.
bash$ type '[' [ is a shell builtin bash$ type -a '[' [ is a shell builtin [ is /usr/bin/[ |
ÁÖ¾îÁø ¸í·É¾îÀÇ °æ·Î¸íÀ» ½© ÇØ½¬ Å×ÀÌºí¿¡ ÀúÀåÇØ¼ ±× ¸í·É¾î°¡ ´Ù½Ã ºÒ¸± ¶§ $PATH¿¡¼ ãÁö ¾Êµµ·Ï ÇØÁÝ´Ï´Ù. hash¸¦ ÀÎÀÚ ¾øÀÌ ¾²¸é ÀÚ½ÅÀÌ ÇØ½¬Çϰí ÀÖ´Â ¸ñ·ÏÀ» º¸¿©ÁÝ´Ï´Ù. -r ¿É¼ÇÀº ÇØ½¬ Å×À̺íÀ» ÃʱâÈ ÇÕ´Ï´Ù.
help ¸í·É¾î´Â ½© ³»Àå ¸í·É¿¡ ´ëÇÑ °£·«ÇÑ »ç¿ë¹ýÀ» ¾Ë·ÁÁÝ´Ï´Ù. whatis¿Í µ¿ÀÏÇÏÁö¸¸ ³»Àå ¸í·É¿¡ ´ëÇØ¼ ¾²Àδٴ Á¡ÀÌ ´Ù¸¨´Ï´Ù.
bash$ help exit exit: exit [n] Exit the shell with a status of N. If N is omitted, the exit status is that of the last command executed. |
[1] | ÀÌ·¸°Ô ÇÏ´Â ÀÌÀ¯´Â ¼º´É»óÀÇ ¹®Á¦(º¸ÅëÀº fork¸¦ ÇØ¾ß ÇÏ´Â ¿ÜºÎ ¸í·É¾îº¸´Ù ´õ ºü¸£°Ô ½ÇÇà)À̰ųª ƯÁ¤ ³»ºÎ ¸í·ÉÀÇ °æ¿ì¿¡ ½© ³»ºÎ º¯¼ö·Î Á÷Á¢ Á¢±ÙÇÒ Çʿ䰡 Àֱ⠶§¹®ÀÔ´Ï´Ù. |
[2] | ¿É¼ÇÀº Ç÷¡±×ó·³ µ¿ÀÛÇÏ´Â ÀÎÀڷμ ½ºÅ©¸³Æ®ÀÇ ÇൿÀ» Ű°Å³ª ²¨ ÁÝ´Ï´Ù. ƯÁ¤ ¿É¼Ç°ú °ü·ÃÀÌ ÀÖ´Â ÀÎÀÚ´Â ±× ¿É¼Ç(Ç÷¡±×)ÀÌ ³ªÅ¸³»´Â ÇൿÀ» Ű°Å³ª ²ô°Ô ÇÕ´Ï´Ù. |
[3] | ¸í·É¾î³ª ½© ÀÚ½ÅÀÌ ¾î¶² ÀÛ¾÷À» ¼öÇàÇϱâ À§ÇØ »õ·Î¿î ÇÏÀ§ ÇÁ·Î¼¼½º¸¦ ÃʱâÈ(ȤÀº spawn)ÇÏ´Â °ÍÀ» Æ÷Å©(fork)¶ó°í ÇÕ´Ï´Ù. ÀÌ ¶§, »õ·Ó°Ô »ý±ä ÇÁ·Î¼¼½º¸¦ "ÀÚ½Ä" ÇÁ·Î¼¼½º¶ó°í Çϰí, ±× ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ Æ÷Å©ÇÑ ÇÁ·Î¼¼½º¸¦ "ºÎ¸ð" ÇÁ·Î¼¼½º¶ó°í ÇÕ´Ï´Ù. ÀÚ½Ä ÇÁ·Î¼¼½º°¡ Àڽſ¡°Ô ÁÖ¾îÁø ÀÏÀ» ÇÏ´Â µ¿¾È ºÎ¸ð ÇÁ·Î¼¼½ºµµ °è¼Ó ÀÚ½ÅÀÇ ÀÏÀ» ÇØ ³ª°©´Ï´Ù. |