¿©·¯ºÐÀÌ ½© ½ºÅ©¸³Æ®¸¦ ½ÇÇà½ÃÅ°°Ô µÇ¸é ´Ù¸¥ ¸í·É¾î ÇÁ·Î¼¼½ºÀÇ ÀνºÅϽº¸¦ ¶ç¿ó´Ï´Ù. ¿©·¯ºÐÀÌ ½ÇÇà½ÃŲ ¸í·É¾î°¡ ¸í·É¾î ÁÙ ÇÁ·ÒÇÁÆ®¿¡¼ Çؼ®µÉ ¶§, ½ºÅ©¸³Æ® ÆÄÀÏ¿¡ µé¾î ÀÖ´Â ¸í·É¾î ¸ñ·Ïµµ ÇÑ ¹ø¿¡ °°ÀÌ Ã³¸®ÇÏ°Ô µË´Ï´Ù. ÀÌ ¶§ ½ÇÇàµÇ´Â °¢°¢ÀÇ ½© ½ºÅ©¸³Æ®´Â »ç½Ç, ÄܼÖÀ̳ª ÇÑÅÒ¿¡¼ ¿©·¯ºÐ¿¡°Ô ÇÁ·ÒÇÁÆ®¸¦ º¸¿©ÁÖ´ø ºÎ¸ð ½©ÀÇ ¼ºê ÇÁ·Î¼¼½ºÀÔ´Ï´Ù.
½© ½ºÅ©¸³Æ® Àڽŵµ ¼ºê ÇÁ·Î¼¼½º¸¦ ¶ç¿ï ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¼ºê½© ´öºÐ¿¡ ½ºÅ©¸³Æ®°¡ º´·Ä·Î ó¸®µÇ°í °á±¹ µ¿½Ã¿¡ ´ÙÁß ÀÛ¾÷À» ÇÏ´Â °Í°ú µ¿ÀÏÇÑ °á°ú¸¦ °¡Á®¿É´Ï´Ù.
Áß°ýÈ£ ¼Ó¿¡ µé¾î ÀÖ´Â ¸í·É¾îµéÀº ¼ºê½©·Î µ¹°Ô µË´Ï´Ù.
Âü°í: ¼ºê½©ÀÇ º¯¼öµéÀº ¼ºê½©ÀÌ ¼ÓÇØ ÀÖ´Â ÄÚµå ºí·° ¹ÛÀ¸·Î º¸ÀÌÁö ¾Ê½À´Ï´Ù. ÀÌ º¯¼öµéÀº ºÎ¸ð ÇÁ·Î¼¼½º³ª ±× ¼ºê½©À» ¶ç¿î ½©¿¡¼ Á¢±ÙÇÒ ¼ö ¾ø±â ¶§¹®¿¡ ½ÇÁ¦·Î´Â Áö¿ª º¯¼ö°¡ µË´Ï´Ù.
¿¹ 20-1. ¼ºê½©¿¡¼ º¯¼öÀÇ Åë¿ë ¹üÀ§(variable scope)
#!/bin/bash # subshell.sh echo outer_variable=Outer ( inner_variable=Inner echo "¼ºê½©ÀÇ \"inner_variable\" = $inner_variable" echo "¼ºê½©ÀÇ \"outer\" = $outer_variable" ) echo if [ -z "$inner_variable" ] then echo "inner_variable Àº ½©ÀÇ ¸ÞÀο¡¼ Á¤ÀǵÇÁö ¾Ê¾Ò½À´Ï´Ù." else echo "inner_variable Àº ½©ÀÇ ¸ÞÀο¡¼ Á¤ÀǵǾú½À´Ï´Ù." fi echo "½© ¸ÞÀÎÀÇ \"inner_variable\" = $inner_variable" # $inner_variable Àº ÃʱâȵÇÁö ¾ÊÀº °Íó·³ º¸À̴µ¥, # ¼ºê½©¿¡¼ Á¤ÀÇµÈ º¯¼ö´Â ±× ¼ºê½©ÀÇ "Áö¿ª º¯¼ö"À̱⠶§¹®ÀÔ´Ï´Ù. echo exit 0 |
¿¹ 32-1 Âü°í.
+
¼ºê½©¿¡¼ ÀÛ¾÷ µð·ºÅ丮°¡ º¯°æµÅµµ, ºÎ¸ð ½©¿¡°Ô ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê½À´Ï´Ù.
¿¹ 20-2. »ç¿ëÀÚ ÇÁ·ÎÆÄÀÏ º¸±â
#!/bin/bash # allprofs.sh: ¸ðµç »ç¿ëÀÚÀÇ ÇÁ·ÎÆÄÀÏ Ãâ·Â # ÀÌ ½ºÅ©¸³Æ®´Â Heiner Steven ÀÌ ÀÛ¼ºÇÏ°í, ÀÌ ¹®¼ÀÇ ÀúÀÚ°¡ ¼öÁ¤Çß½À´Ï´Ù. FILE=.bashrc # »ç¿ëÀÚ ÇÁ·ÎÆÄÀÏÀ» ´ã°í ÀÖ´Â ÆÄÀÏ. #+ ¿ø·¡ ½ºÅ©¸³Æ®¿¡¼´Â ".profile" À̾ú½À´Ï´Ù. for home in `awk -F: '{print $6}' /etc/passwd` do [ -d "$home" ] || continue # Ȩ µð·ºÅ丮°¡ ¾ø´Â »ç¿ëÀÚ¶ó¸é ´ÙÀ½À¸·Î ³Ñ¾î°¨. [ -r "$home" ] || continue # ÀÐÀ»¼ö ¾ø´Â Ȩµð·ºÅ丮¶ó¸é ¿ª½Ã ±×³É ³Ñ¾î°¨. (cd $home; [ -e $FILE ] && less $FILE) done # 'cd $home' ÀÌ ¼ºê½©¿¡¼ µ¹±â ¶§¹®¿¡, #+ ½ºÅ©¸³Æ®°¡ ³¡³ ´ÙÀ½, 'cd'¸¦ ½á¼ ¿ø·¡ µð·ºÅ丮·Î ´Ù½Ã µ¹¾Æ°¥ ÇÊ¿ä°¡ ¾ø½À´Ï´Ù. exit 0 |
¼ºê½©Àº ƯÁ¤ ¸í·É¾î ±×·ì¿¡ ±×µé¸¸ÀÇ "Àü¿ë ȯ°æ"(dedicated environment)À» ¼³Á¤ÇØ ÁÙ ¼ö ÀÖ½À´Ï´Ù.
COMMAND1 COMMAND2 COMMAND3 ( IFS=: PATH=/bin unset TERMINFO set -C shift 5 COMMAND4 COMMAND5 exit 3 # ¼ºê½©¸¸ Á¾·á½ÃÅ´. ) # ºÎ¸ð ½©ÀÇ È¯°æÀº ¿µÇâÀ» ¹ÞÁö ¾Ê°í ±×´ë·Î ³²¾Æ ÀÖ½À´Ï´Ù. COMMAND6 COMMAND7 |
if (set -u; : $variable) 2> /dev/null then echo "º¯¼ö°¡ ¼¼Æ®µÇ¾î ÀÖ½À´Ï´Ù." fi # ÀÌ·¸°Ôµµ ÇÒ ¼ö ÀÖÁÒ. [[ ${variable-x} != x || ${variable-y} != y ]] # ȤÀº [[ ${variable-x} != x$variable ]] # ¿ª½Ã [[ ${variable+x} = x ]]) |
if (set -C; : > lock_file) 2> /dev/null then echo "´Ù¸¥ »ç¿ëÀÚ°¡ ÀÌ¹Ì ½ÇÇàÁßÀÔ´Ï´Ù." exit 65 fi # Thanks, S.C. |
ÇÁ·Î¼¼½º¸¦ ´Ù¸¥ ¼ºê½©¿¡¼ º´·Ä·Î ½ÇÇà½Ãų ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ·¸°Ô ÇÏ¸é º¹ÀâÇÑ ÀÛ¾÷À» ¿©·¯°³·Î ³ª´©¾î¼ µ¿½Ã¿¡ ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù.
¿¹ 20-3. ÇÁ·Î¼¼½º¸¦ ¼ºê½©¿¡¼ º´·Ä·Î µ¹¸®±â
(cat list1 list2 list3 | sort | uniq > list123) & (cat list4 list5 list6 | sort | uniq > list456) & # µ¿½Ã¿¡ µÎ Á¾·ùÀÇ ÆÄÀϵéÀ» ÇÕÄ¡°í Á¤·Ä. # ¹é±×¶ó¿îµå·Î µ¹·Á¼ º´·Ä·Î È®½ÇÈ÷ ¼öÇàµÇµµ·Ï ÇÔ. # # ´ÙÀ½°ú °°Àº °á°ú. # cat list1 list2 list3 | sort | uniq > list123 & # cat list4 list5 list6 | sort | uniq > list456 & wait # ¼ºê½©ÀÌ ³¡³ª±â Àü¿¡ ´ÙÀ½ ¸í·É¾î¸¦ ½ÇÇàÇÏÁö ¾Ê°Ô ÇÔ. diff list123 list456 |
¼ºê½©·Î I/O ÀçÁöÇâÀ» ÇÏ·Á¸é ls -al | (command) ó·³ ÆÄÀÌÇÁ ¿¬»êÀÚÀÎ "|"¸¦ ¾¹´Ï´Ù.
Âü°í: Áß°ýÈ£¼ÓÀÇ ¸í·É¾î ºí·°Àº ¼ºê½©À» ¶ç¿ìÁö ¾Ê½À´Ï´Ù.
{ command1; command2; command3; ... }