ÇÔ¼ö´Â ÀÎÀÚ¸¦ ¹Þ¾Æ µéÀÏ ¼ö ÀÖ°í ´ÙÀ½ ÀÛ¾÷µéÀ» À§Çؼ Á¾·á »óŸ¦ ¸®ÅÏÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
function_name $arg1 $arg2 |
ÇÔ¼ö´Â Àڽſ¡°Ô ³Ñ¾î¿Â ÀÎÀÚ¸¦ À§Ä¡ ¸Å°³º¯¼öó·³, ÀÎÀÚÀÇ À§Ä¡·Î ÂüÁ¶Çϴµ¥ ¿¹¸¦ µé¸é, ù¹øÂ° ÀÎÀÚ´Â $1, µÎ¹øÂ° ÀÎÀÚ´Â $2 µîÀÔ´Ï´Ù.
¿¹ 23-2. ¸Å°³º¯¼ö¸¦ ¹Þ´Â ÇÔ¼ö
#!/bin/bash func2 () { if [ -z "$1" ] # ù¹øÂ° ¸Å°³º¯¼ö ±æÀ̰¡ 0 ÀÎÁö È®ÀÎ. then echo "-ù¹øÂ° ¸Å°³º¯¼ö ±æÀ̰¡ 0 ÀÔ´Ï´Ù.-" # ¸Å°³º¯¼ö°¡ ¾øÀ» °æ¿ì¿¡µµ. else echo "-ù¹øÂ° ¸Å°³º¯¼ö´Â \"$1\" ÀÔ´Ï´Ù.-" fi if [ "$2" ] then echo "-µÎ¹øÂ° ¸Å°³º¯¼ö´Â \"$2\" ÀÔ´Ï´Ù.-" fi return 0 } echo echo "¸Å°³º¯¼ö ¾øÀÌ ºÒ·¯º¸ÁÒ." func2 # ¸Å°³º¯¼ö ¾øÀÌ È£Ãâ echo echo "±æÀ̰¡ 0 ÀÎ ¸Å°³º¯¼ö¸¦ ³Ñ±è." func2 "" # ±æÀ̰¡ 0 ÀÎ ¸Å°³º¯¼ö·Î È£Ãâ echo echo "³Î ¸Å°³º¯¼ö¸¦ ³Ñ±è." func2 "$uninitialized_param" # ³Î ¸Å°³º¯¼ö·Î È£Ãâ echo echo "¸Å°³º¯¼ö ÇÑ °³¸¦ ³Ñ±è." func2 first # ¸Å°³º¯¼ö ÇÑ °³·Î È£Ãâ echo echo "¸Å°³º¯¼ö µÎ °³¸¦ ³Ñ±è." func2 first second # ¸Å°³º¯¼ö µÎ °³·Î È£Ãâ echo echo "\"\" \"second\" ¸¦ ³Ñ±è." func2 "" second # ù¹øÂ° ¸Å°³º¯¼ö ±æÀÌ´Â 0 echo # µÎ¹øÂ° ¸Å°³º¯¼ö´Â ¾Æ½ºÅ° ¹®ÀÚ¿ exit 0 |
Âü°í: ´Ù¸¥ ÇÁ·Î±×·¡¹Ö ¾ð¾îµé°ú´Â ´Ù¸£°Ô ½© ½ºÅ©¸³Æ®´Â º¸Åë, ÀÎÀÚ¸¦ °ª¿¡ ÀÇÇØ¼ ¹Þ¾Æ µéÀÔ´Ï´Ù. [1] ½ÇÁ¦·Î´Â Æ÷ÀÎÅÍÀÎ º¯¼ö À̸§ÀÌ ÇÔ¼öÀÇ ¸Å°³º¯¼ö·Î ³Ñ¾î°£´Ù¸é ¹®ÀÚ¿ ±×´ë·Î Ãë±ÞµÉ °ÍÀ̱⠶§¹®¿¡ ¿ªÂüÁ¶°¡ ºÒ°¡´ÉÇØ Áý´Ï´Ù. ÇÔ¼ö´Â ÀÎÀÚ¸¦ ¹®ÀÚ ±×´ë·Î ÇØ¼®ÇÕ´Ï´Ù.
ÇÔ¼ö´Â Á¾·á »óŶó°í ºÎ¸£´Â °ªÀ» ¸®ÅÏÇÕ´Ï´Ù. Á¾·á »óÅ´ return ¹®¿¡ ÀÇÇØ¼ ºÐ¸íÇÏ°Ô Ç¥ÇöµÇ°Å³ª ±× ÇÔ¼ö¾È¿¡¼ ¸¶Áö¸·À¸·Î ½ÇÇàµÈ ¸í·É¾îÀÇ Á¾·á »óŸ¦ ÇÔ¼ö ÀÚ½ÅÀÇ Á¾·á »óÅ·Π°¡Á®°©´Ï´Ù(¼º°øÀ̸é 0, ½ÇÆÐ¶ó¸é 0ÀÌ ¾Æ´Ñ ¿¡·¯ ÄÚµå). $?¸¦ ÂüÁ¶Çؼ Á¾·á »óŸ¦ ¾Ë¾Æ³¾ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ ¹æ¹ýÀ¸·Î½á C ÇÔ¼ö¿Í ºñ½ÁÇÏ°Ô ½© ½ºÅ©¸³Æ® ÇÔ¼öµµ È¿°úÀûÀ¸·Î "¸®ÅÏ °ª"À» °¡Áú ¼ö ÀÖ½À´Ï´Ù.
ÇÔ¼ö¸¦ ³¡³À´Ï´Ù. return ¸í·É¾î [2] ´Â ÀÓÀÇÀÇ Á¤¼ö ÀÎÀÚ¸¦ °¡Áú ¼ö Àִµ¥ ÀÌ´Â ÀÌ ÇÔ¼ö¸¦ ºÎ¸¥ ÂÊ¿¡°Ô ÇÔ¼öÀÇ "Á¾·á »óÅÂ"¸¦ ¾Ë·Á ÁÖ°í, ¶ÇÇÑ ÀÌ Á¾·á »óÅ´ $? º¯¼ö¿¡ ÇÒ´ç µË´Ï´Ù.
¿¹ 23-3. µÎ ¼ýÀÚÁß Å« ¼ö ã±â
#!/bin/bash # max.sh: µÎ Á¤¼öÁß Å« ¼ö ã±â. E_PARAM_ERR=-198 # ÇÔ¼ö·Î 2°³ ¹Ì¸¸ÀÇ ¸Å°³º¯¼ö°¡ ³Ñ¾î ¿ÔÀ» ¶§. EQUAL=-199 # µÎ ¸Å°³º¯¼ö°¡ °°À» °æ¿ìÀÇ ¸®Åϰª. max2 () # µÎ ¼ýÀÚÁß Å« ¼ö¸¦ ¸®ÅÏ. { # ÁÖÀÇ: ºñ±³ÇÒ ¼ýÀÚ´Â 257º¸´Ù ÀÛ¾Æ¾ß ÇÕ´Ï´Ù. if [ -z "$2" ] then return $E_PARAM_ERR fi if [ "$1" -eq "$2" ] then return $EQUAL else if [ "$1" -gt "$2" ] then return $1 else return $2 fi fi } max2 33 34 return_val=$? if [ "$return_val" -eq $E_PARAM_ERR ] then echo "¸Å°³º¯¼ö°¡ µÎ °³ ÇÊ¿äÇÕ´Ï´Ù." elif [ "$return_val" -eq $EQUAL ] then echo "µÎ ¼ýÀÚ´Â °°½À´Ï´Ù." else echo "µÎ ¼ýÀÚÁß Å« ¼ö´Â $return_val ÀÔ´Ï´Ù." fi exit 0 # µ¶ÀÚ¿ë ¿¬½À¹®Á¦(ÃʱÞ): # ´ëȸðµå ½ºÅ©¸³Æ®·Î º¯°æÇØ º¸¼¼¿ä. # »ç¿ëÀÚ¿¡°Ô ÀÔ·Â(µÎ ¼ýÀÚ)À» ¹°¾îº¸°Ô ÇÏ¸é µË´Ï´Ù. |
ÀÛÀº Á¤º¸: ÇÔ¼ö°¡ ¹®ÀÚ¿À̳ª ¹è¿À» ¸®ÅÏÇϱâ À§Çؼ´Â Àü¿ë º¯¼ö¸¦ ¾²¸é µË´Ï´Ù.
count_lines_in_etc_passwd() { [[ -r /etc/passwd ]] && REPLY=$(echo $(wc -l < /etc/passwd)) # /etc/passwd ¸¦ ÀÐÀ» ¼ö ÀÖÀ¸¸é REPLY ¿¡ ÁÙ ¼ö¸¦ ¼¼ÆÃ. # ¸Å°³º¯¼ö °ª°ú »óÅ Á¤º¸¸¦ °°ÀÌ ¸®ÅÏ. } if count_lines_in_etc_passwd then echo "/etc/passwd ¿¡´Â $REPLY °³ÀÇ ÁÙÀÌ ÀÖ½À´Ï´Ù." else echo "/etc/passwd ÀÇ ÁÙ ¼ö¸¦ ¼¿ ¼ö°¡ ¾ø½À´Ï´Ù." fi # Thanks, S.C.
¿¹ 23-4. ¼ýÀÚ¸¦ ·Î¸¶ ¼ýÀÚ·Î ¹Ù²Ù±â
#!/bin/bash # ¾Æ¶óºñ¾Æ ¼ýÀÚ¸¦ ·Î¸¶ ¼ýÀÚ·Î ¹Ù²Ù±â # ¹üÀ§: 0 - 200 # Á¶ÀâÇÏÁö¸¸ µ¿ÀÛÀº ÇÕ´Ï´Ù. # ó¸® °¡´ÉÇÑ ¼ýÀÚÀÇ ¹üÀ§¸¦ ´Ã¸®°Å³ª ½ºÅ©¸³Æ®ÀÇ ±â´ÉÀ» Çâ»ó½ÃŰ´Â °ÍÀº # µ¶ÀÚ ¿©·¯ºÐÀ» À§ÇØ ¿¬½À¹®Á¦·Î ³²°Ü ³õ½À´Ï´Ù. # »ç¿ë¹ý: roman number-to-convert LIMIT=200 E_ARG_ERR=65 E_OUT_OF_RANGE=66 if [ -z "$1" ] then echo "»ç¿ë¹ý: `basename $0` number-to-convert" exit $E_ARG_ERR fi num=$1 if [ "$num" -gt $LIMIT ] then echo "ó¸® °¡´É ¹üÀ§ Ãʰú!" exit $E_OUT_OF_RANGE fi to_roman () # ÇÔ¼ö¸¦ ºÎ¸£±â Àü¿¡ ¹Ì¸® ¼±¾ðÇØ Áà¾ß µË´Ï´Ù. { number=$1 factor=$2 rchar=$3 let "remainder = number - factor" while [ "$remainder" -ge 0 ] do echo -n $rchar let "number -= factor" let "remainder = number - factor" done return $number # µ¶ÀÚ¿ë ¿¬½À¹®Á¦: # ÀÌ ÇÔ¼ö°¡ ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö ¼³¸íÇØ º¸¼¼¿ä. # ÈùÆ®: ¿¬¼ÓÀû »©±â¿¡ ÀÇÇÑ ³ª´©±â. } to_roman $num 100 C num=$? to_roman $num 90 LXXXX num=$? to_roman $num 50 L num=$? to_roman $num 40 XL num=$? to_roman $num 10 X num=$? to_roman $num 9 IX num=$? to_roman $num 5 V num=$? to_roman $num 4 IV num=$? to_roman $num 1 I echo exit 0 |
¿¹ 10-26 µµ Âü°í.
Áß¿ä: ÇÔ¼ö°¡ ¸®ÅÏÇÒ ¼ö ÀÖ´Â °¡Àå Å« ¾ç¼ö´Â 256ÀÔ´Ï´Ù. return ¸í·É¾î´Â ÀÌ Á¦ÇÑ »çÇ×ÀÇ ¿øÀÎÀÌ µÇ´Â Á¾·á »óÅÂÀÇ °³³ä¿¡ ¾ÆÁÖ ¹ÐÁ¢ÇÏ°Ô ¿¬°áµÇ¾î ÀÖ½À´Ï´Ù. ´ÙÇàÈ÷µµ, ÇÔ¼ö¿¡¼ ¾ÆÁÖ Å« Á¤¼ö¸¦ ¸®ÅÏÇØ¾ß ÇÏ´Â °æ¿ì°¡ »ý±â¸é ÀÌ·± Á¦ÇÑ »çÇ×À» ÇØ°áÇÒ ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù.
¿¹ 23-5. ÇÔ¼ö¿¡¼ Å« °ªÀ» ¸®ÅÏÇÏ´ÂÁö Å×½ºÆ®Çϱâ
#!/bin/bash # return-test.sh # ÇÔ¼ö¿¡¼ ¸®ÅÏÇÒ ¼ö ÀÖ´Â °¡Àå Å« ¾ç¼ö´Â 256 ÀÔ´Ï´Ù. return_test () # ¹«Á¶°Ç ³Ñ¾î¿Â °ÍÀ» ¸®ÅÏ. { return $1 } return_test 27 # o.k. echo $? # 27 ¸®ÅÏ. return_test 256 # ¿ª½Ã o.k. echo $? # 256 ¸®ÅÏ. return_test 257 # ¿¡·¯! echo $? # 1 ¸®ÅÏ(ÀÚÁú±¸·¹ÇÑ ¿¡·¯¿ë ÄÚµå ¸®ÅÏ). return_test -151896 # ÇÏÁö¸¸, Å« À½¼ö´Â µË´Ï´Ù. echo $? # -151896 ¸®ÅÏ. exit 0»ìÆìº» °Íó·³, ÇÔ¼ö´Â Å« À½¼ö°ªÀ» ¸®ÅÏÇÒ ¼ö ÀÖ½À´Ï´Ù. À̸¦ ÀÌ¿ëÇÏ¸é ¾à°£ÀÇ ²Ç¼ö¸¦ ½á¼ Å« ¾ç¼ö¸¦ ¸®ÅÏÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
´Ù¸¥ ¹æ¹ýÀ¸·Î´Â "¸®ÅÏ °ª"À» ±×³É Àü¿ª º¯¼ö¿¡ ÇÒ´çÇÏ¸é µË´Ï´Ù.
Return_Val= # ÃʰúµÇ´Â ÇÔ¼ö ¸®ÅϰªÀ» ´ãÀ» Àü¿ª º¯¼ö. alt_return_test () { fvar=$1 Return_Val=$fvar return # 0 ¸®ÅÏ(¼º°ø). } alt_return_test 1 echo $? # 0 echo "return value = $Return_Val" # 1 alt_return_test 256 echo "return value = $Return_Val" # 256 alt_return_test 257 echo "return value = $Return_Val" # 257 alt_return_test 25701 echo "return value = $Return_Val" #25701¿¹ 23-6. Å« µÎ Á¤¼ö ºñ±³Çϱâ
#!/bin/bash # max2.sh: ¾ÆÁÖ Å« µÎ Á¤¼öÁß Å« ¼ö ±¸Çϱâ. # ÀÌ ½ºÅ©¸³Æ®´Â ¾Õ¿¡¼ ¼Ò°³Çß´ø "max.sh" ¿¹Á¦¸¦ # Å« Á¤¼ö¿¡ ´ëÇØ¼ µ¿ÀÛÇϵµ·Ï ¼öÁ¤ÇÑ °ÍÀÔ´Ï´Ù. EQUAL=0 # µÎ ¸Å°³º¯¼ö°¡ °°À» °æ¿ìÀÇ ¸®ÅÏ °ª. MAXRETVAL=256 # ÇÔ¼ö°¡ ¸®ÅÏÇÒ ¼ö ÀÖ´Â ÃÖ´ë ¾ç¼ö. E_PARAM_ERR=-99999 # ¸Å°³º¯¼ö ¿¡·¯. E_NPARAM_ERR=99999 # "ÀϹÝȵÈ"(Normalized) ¸Å°³º¯¼ö ¿¡·¯. max2 () # µÎ ¼ýÀÚÁß Å« ¼ö¸¦ ¸®ÅÏ. { if [ -z "$2" ] then return $E_PARAM_ERR fi if [ "$1" -eq "$2" ] then return $EQUAL else if [ "$1" -gt "$2" ] then retval=$1 else retval=$2 fi fi # -------------------------------------------------------------- # # ¿©±â°¡ Å« Á¤¼ö¸¦ ¸®ÅÏÇÒ ¼ö ÀÖ°Ô ÇØ ÁÖ´Â ºÎºÐÀÔ´Ï´Ù. if [ "$retval" -gt "$MAXRETVAL" ] # ¹üÀ§¸¦ ³Ñ´Â ¼ö¶ó¸é, then let "retval = (( 0 - $retval ))" # À½¼ö·Î Á¶ÀýÇØ ÁÝ´Ï´Ù. # (( 0 - $VALUE )) °¡ VALUE ÀÇ ºÎÈ£¸¦ ¹Ù²ãÁÝ´Ï´Ù. fi # ´ÙÇེ·´°Ôµµ, Å« *À½¼ö* ¸®ÅÏÀº °¡´ÉÇÕ´Ï´Ù. # -------------------------------------------------------------- # return $retval } max2 33001 33997 return_val=$? # -------------------------------------------------------------------------- # if [ "$return_val" -lt 0 ] # "Á¶ÀýµÈ" À½¼ö¶ó¸é, then let "return_val = (( 0 - $return_val ))" # ¾ç¼ö·Î º¯È¯. fi # $return_valÀÇ "Àý´ë°ª". # -------------------------------------------------------------------------- # if [ "$return_val" -eq "$E_NPARAM_ERR" ] then # ¸Å°³º¯¼ö ¿¡·¯ "Ç÷¡±×"µµ ºÎÈ£°¡ ¹Ù²ò´Ï´Ù. echo "¿¡·¯: ¸Å°³º¯¼ö°¡ ¸ðÀÚ¶ø´Ï´Ù." elif [ "$return_val" -eq "$EQUAL" ] then echo "µÎ ¼ýÀÚ°¡ °°½À´Ï´Ù." else echo "µÎ ¼ýÀÚÁß Å« ¼ö´Â $return_val ÀÔ´Ï´Ù." fi exit 0¿¹ A-6 Âü°í.
µ¶ÀÚ¿ë ¿¬½À¹®Á¦: ¿©±â¼ ¹è¿î °ÍÀ» °¡Áö°í ¾Õ¿¡¼ »ìÆìºÃ´ø ·Î¸¶ ¼ýÀÚ ¿¹Á¦°¡ ÀÓÀÇÀÇ Å« ÀԷ°ªÀ» ó¸®Çϵµ·Ï °íÃÄ º¸¼¼¿ä.
ÇÔ¼ö´Â º»ÁúÀûÀ¸·Î ÄÚµå ºí·°Àε¥ À̰ÍÀº ÇÔ¼öÀÇ Ç¥ÁØÀÔ·ÂÀÌ ÀçÁöÇâ µÉ ¼ö ÀÖ´Ù´Â ¶æÀÔ´Ï´Ù(¿¹ 4-1¿¡ ÀÖ´Â °Íó·³).
¿¹ 23-7. »ç¿ëÀÚ °èÁ¤ À̸§¿¡¼ ½ÇÁ¦ À̸§À» ¾Ë¾Æ³»±â
#!/bin/bash # /etc/passwd ¸¦ º¸°í »ç¿ëÀÚ °èÁ¤À̸§¿¡¼ "½ÇÁ¦ À̸§"À» ¾Ë¾Æ³¿. ARGCOUNT=1 # ÇÑ °³ ÀÎÀÚ¸¸ ÇÊ¿ä. E_WRONGARGS=65 file=/etc/passwd pattern=$1 if [ $# -ne "$ARGCOUNT" ] then echo "»ç¿ë¹ý: `basename $0` USERNAME" exit $E_WRONGARGS fi file_excerpt () # ÆÄÀÏ¿¡¼ ÆÐÅÏÀ» °Ë»öÇØ¼ ÇØ´ç ºÎºÐÀ» Ãâ·Â. { while read line # while ¿¡¼ ²À "[ condition ]" À» ¾È ½áµµ µË´Ï´Ù. do echo "$line" | grep $1 | awk -F":" '{ print $5 }' # awk °¡ ":" ±¸ºÐÀÚ¸¦ ¾²µµ·Ï. done } <$file # ÇÔ¼ö Ç¥ÁØÀÔ·ÂÀ¸·Î ÀçÁöÇâ. file_excerpt $pattern # ÀÌ Àüü ½ºÅ©¸³Æ®´Â ´ÙÀ½Ã³·³ ÇØµµ µË´Ï´Ù. # grep PATTERN /etc/passwd | awk -F":" '{ print $5 }' # ¾Æ´Ï¸é # awk -F: '/PATTERN/ {print $5}' # ȤÀº # awk -F: '($1 == "username") { print $5 }' # »ç¿ëÀÚ À̸§À» º¸°í ½ÇÁ¦À̸§À» ã¾Æ³¿ # ÇÏÁö¸¸, ÀÌ·± ¹æ¹ýÀº ±³À°ÀûÀÌÁö´Â ¾ÊÀº °Í °°³×¿ä. exit 0 |
ÇÔ¼öÀÇ Ç¥ÁØÀÔ·ÂÀ» ÀçÁöÇâ ÇØÁÖ´Â ´ú Çò°¥¸° ´Ù¸¥ ¹æ¹ýÀÌ Àִµ¥, ÇÔ¼ö ¾È¿¡ µé¾î ÀÖ´Â Áß°ýÈ£ ÄÚµå ºí·°À¸·Î Ç¥ÁØÀÔ·ÂÀ» ÀçÁöÇâ ½ÃŰ´Â °ÍÀÔ´Ï´Ù.
# ÀÌ·¸°Ô ÇÏÁö ¸»°í, Function () { ... } < file # ÀÌ·¸°Ô Çϼ¼¿ä. Function () { { ... } < file } # ºñ½ÁÇϰÔ, Function () # ÀÌ°Ç µÇÁö¸¸, { { echo $* } | tr a b } Function () # ÀÌ°Ç ¾È µË´Ï´Ù. { echo $* } | tr a b # ¿©±â¼´Â ÁßøµÈ ÄÚµå ºí·°ÀÌ ²À ÀÖ¾î¾ß µË´Ï´Ù. # Thanks, S.C. |
[1] | °£Á¢ º¯¼ö ÂüÁ¶(¿¹ 35-2 ÂüÁ¶)´Â ÇÔ¼ö¿¡ º¯¼ö Æ÷ÀÎÅ͸¦ ³Ñ°ÜÁÖ´Â ¼Åõ¸¥ ¹æ¹ýÀ» Á¦°øÇØ ÁÝ´Ï´Ù.
| |
[2] | return ¸í·É¾î´Â BashÀÇ ³»Àå ¸í·ÉÀÔ´Ï´Ù. |