Ç×»ó ±âº»ÀûÀ¸·Î ¿·ÁÀÖ´Â "ÆÄÀϵé"ÀÌ Àִµ¥, Ç¥ÁØÀÔ·Â(stdin)-(Űº¸µå), Ç¥ÁØÃâ·Â(stdout)-(½ºÅ©¸°), Ç¥ÁØ¿¡·¯(stderr)-(½ºÅ©¸°¿¡ »Ñ·ÁÁú ¿¡·¯ ¸Þ¼¼Áö)ÀÔ´Ï´Ù. ÀÌ ÆÄÀϵéÀ» Æ÷ÇÔÇØ¼ ¾î¶² ¿·Á ÀÖ´Â ÆÄÀÏÀÌ¶óµµ ÀçÁöÇâ µÉ ¼ö ÀÖ½À´Ï´Ù. ÀçÁöÇâÀ̶õ °£´ÜÈ÷ ¸»Çؼ ÆÄÀÏ, ¸í·É¾î, ÇÁ·Î±×·¥, ½ºÅ©¸³Æ®, ½ÉÁö¾î ½ºÅ©¸³Æ®¼ÓÀÇ ÄÚµå ºí·°ÀÇ Ãâ·Â(예 3-2, 예 3-3 Âü°í)À» Àâ¾Æ¼ ´Ù¸¥ ÆÄÀÏ, ¸í·É¾î, ÇÁ·Î±×·¥, ½ºÅ©¸³Æ®ÀÇ ÀÔ·ÂÀ¸·Î º¸³»´Â °ÍÀÔ´Ï´Ù.
°¢°¢ÀÇ ¿·Á ÀÖ´Â ÆÄÀÏÀº ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ÇÒ´ç¹Þ½À´Ï´Ù. [1] Ç¥ÁØÀԷ°ú Ç¥ÁØÃâ·Â, Ç¥ÁØ¿¡·¯¿¡ ´ëÇÑ ÆÄÀÏ µð½ºÅ©¸³ÅÍ´Â °¢°¢ 0, 1, 2 ÀÔ´Ï´Ù. Ãß°¡ÀûÀ¸·Î ¿¸®´Â ÆÄÀÏÀ» À§Çؼ 3ºÎÅÍ 9±îÁö°¡ ³²°ÜÁ® ÀÖ½À´Ï´Ù. Á¾Á¾, ÀÌ Ãß°¡Àû ÆÄÀÏ µð½ºÅ©¸³Å͸¦ Ç¥ÁØÀÔ·Â, Ç¥ÁØÃâ·Â, Ç¥ÁØ¿¡·¯·Î ÇÒ´çÇØ¼ Àӽ÷ΠÁߺ¹µÈ ¸µÅ©·Î ¾²´Â°ÍÀÌ À¯¿ëÇÒ ¶§°¡ ÀÖ½À´Ï´Ù. [2] ¾ÆÁÖ º¹ÀâÇÑ ÀçÁöÇâÀ̳ª ÆÄÀÏ µð½ºÅ©¸³ÅÍÀÇ º¹ÀâÇÑ »ç¿ëÈÄ¿¡ ¿ø·¡´ë·Î °£´ÜÇÏ°Ô º¹±¸½ÃÄÑ ÁÝ´Ï´Ù(예 3-72 Âü°í).
> # Ç¥ÁØÃâ·ÂÀ» ÆÄÀÏ·Î ÀçÁöÇâ. # ¾ø´Â ÆÄÀÏÀ̶ó¸é ¸¸µé°í ÀÖ´Â ÆÄÀÏÀ̶ó¸é µ¤¾î ¾¹´Ï´Ù. ls -lR > dir-tree.list # µð·ºÅ丮 ±¸Á¶ ¸ñ·ÏÀ» ÆÄÀÏ·Î ÀúÀåÇØ ÁÝ´Ï´Ù. >> # Ç¥ÁØÃâ·ÂÀ» ÆÄÀÏ·Î ÀçÁöÇâ. # ¾ø´Â ÆÄÀÏÀ̶ó¸é ¸¸µé°í ÀÖ´Â ÆÄÀÏÀ̶ó¸é ÆÄÀÏ ³¡¿¡ µ¡ºÙÀÔ´Ï´Ù. 2> &1 # Ç¥ÁØ¿¡·¯¸¦ Ç¥ÁØÃâ·ÂÀ¸·Î ÀçÁöÇâ. # ¿ø·¡´Â ¾È º¸ÀÏ ¿¡·¯ ¸Þ¼¼ÁöµéÀ» º¸¿© ÁÝ´Ï´Ù. i> &j # i¹ø ÆÄÀÏ µð½ºÅ©¸³Å͸¦ j¹ø ÆÄÀÏ µð½ºÅ©¸³ÅÍ·Î ÀçÁöÇâ. # i°¡ °¡¸£Å°´Â ÆÄÀÏÀÇ ¸ðµç Ãâ·ÂÀÌ j°¡ °¡¸£Å°´Â ÆÄÀÏ·Î º¸³»Áý´Ï´Ù. < # ÆÄÀÏ¿¡¼ ÀÔ·Â ¹Þ°Ô ÇØ ÁÝ´Ï´Ù. # ">"¿Í ¦À» ÀÌ·ç´Â ¸í·É¾î·Î, Á¾Á¾ °°ÀÌ ¾²ÀÔ´Ï´Ù. grep search-word <filename | # ÆÄÀÌÇÁ. # ÀϹÝÀûÀÎ ¸ñÀûÀ¸·Î ¾²ÀÌ´Â, ÇÁ·Î¼¼½º¿Í ¸í·É¾î¸¦ ¹¾î ÁÖ´Â Åø. # ">"¿Í ºñ½ÁÇÏÁö¸¸, ½ÇÁ¦·Î´Â Á» ´õ ÀϹÝÀûÀ¸·Î ¾²ÀÔ´Ï´Ù. # ¸í·É¾î, ½ºÅ©¸³Æ®, ÆÄÀÏ, ÇÁ·Î±×·¥µéÀ» ¹´Âµ¥ À¯¿ëÇÏ°Ô ¾²ÀÔ´Ï´Ù. cat *.txt | sort | uniq > result-file # ¸ðµç *.txt ÆÄÀÏÀÇ Ãâ·ÂÀ» Á¤·ÄÇÑ ´ÙÀ½ Áߺ¹µÇ´Â ÁÙÀ» Á¦°ÅÇϰí # ¸¶Áö¸·¿¡ °á°ú¸¦ "result-file"¿¡ ÀúÀå. |
참고: ¿©·¯°³ÀÇ ÀÔÃâ·Â ÀçÁöÇâ°ú ÆÄÀÌÇÁ´Â ÇÑ ÁÙ¿¡¼ °°ÀÌ ¾²ÀÏ ¼ö ÀÖ½À´Ï´Ù.
command < input-file > output-file command1 | command2 | command3 > output-file |
n¹ø ÀÔ·Â ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ´Ý¾ÆÁÝ´Ï´Ù.
Ç¥ÁØÀÔ·ÂÀ» ´Ý½À´Ï´Ù.
n¹ø Ãâ·Â ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ´Ý¾ÆÁÝ´Ï´Ù.
Ç¥ÁØÃâ·ÂÀ» ´Ý½À´Ï´Ù.
exec <filename´Â Ç¥ÁØÀÔ·ÂÀ» ÆÄÀÏ·Î ÀçÁöÇâ ½ÃÄÑÁÝ´Ï´Ù(º¸ÅëÀº Űº¸µå¿¡¼ ¹Þ¾Æ µéÀÌÁö¸¸). ±× ¼ø°£ºÎÅÍ, ¸ðµç Ç¥ÁØÀÔ·ÂÀº ±× ÆÄÀÏ¿¡¼ ¹Þ¾Æ µéÀÔ´Ï´Ù. ÀÌ·¸°Ô Çϸé sed³ª awk¿¡¼ ÆÄÀÏÀ» ÁÙ ´ÜÀ§·Î ÀÐ¾î °¢ ÁÙÀ» ÆÄ½ÌÇÒ ¼ö ÀÖ°Ô ÇØ ÁÝ´Ï´Ù.
예 3-72. execÀ» ½á¼ Ç¥ÁØÀÔ·Â ÀçÁöÇâ Çϱâ
#!/bin/bash # 'exec'·Î Ç¥ÁØÀÔ·Â ÀçÁöÇâ Çϱâ. exec 6<&0 # Ç¥ÁØÀÔ·ÂÀ» 6¹ø ÆÄÀÏ µð½ºÅ©¸³ÅÍ·Î ÀúÀå exec < data-file # Ç¥ÁØÀÔ·ÂÀº "data-file"·Î º¯°æµÊ read a1 # "data-file" ÀÇ Ã¹¹øÂ° ÁÙÀ» ÀÐÀ½ read a2 # "data-file" ÀÇ µÎ¹øÂ° ÁÙÀ» ÀÐÀ½ echo echo "´ÙÀ½Àº ÆÄÀÏ¿¡¼ ÀÐ¾î µéÀÎ °ÍÀÔ´Ï´Ù." echo "-----------------------------------" echo $a1 echo $a2 echo; echo; echo exec 0<&6 # 6¹ø¿¡ ÀúÀåµÅ ÀÖ´ø Ç¥ÁØÀÔ·ÂÀ» º¹±¸½Ã۰í echo -n "µ¥ÀÌŸ¸¦ ³ÖÀ¸¼¼¿ä " read b1 # ÀÌÁ¦ "read"´Â ¿ì¸®°¡ ¹Ù¶ó´ø´ë·Î º¸ÅëÀÇ Ç¥ÁØÀԷ¿¡¼ ÀоîµéÀÔ´Ï´Ù. echo "Ç¥ÁØÀԷ¿¡¼ ÀÐÀº ÀԷ°ª." echo "-------------------------" echo "b1 = $b1" echo exit |
while, until, for·çÇÁµéÀÇ ÄÚµå ºí·°, ½ÉÁö¾î´Â if/then Å×½ºÆ® ºí·°µéµµ Ç¥ÁØÀÔ·ÂÀÇ ÀçÁöÇâÀ» ¹Þ¾Æ µéÀÏ ¼ö ÀÖ½À´Ï´Ù. ±× ÄÚµå ºí·°ÀÇ Á¦ÀÏ ³¡¿¡ < ¿¬»êÀÚ¸¦ µÎ¸é À̰ÍÀÌ °¡´ÉÇØ Áý´Ï´Ù.
예 3-73. ÀçÁöÇâµÈ while ·çÇÁ
#!/bin/bash if [ -z $1 ] then Filename=names.data # ÆÄÀÏ À̸§ÀÌ ÁÖ¾îÁöÁö ¾ÊÀ» °æ¿ì ¾µ ±âº»°ª else Filename="$1" fi while [ "$name" != Smith ] # ¿Ö $name À» Àοë(quote) ÇßÀ»±î¿ä? do read name # Ç¥ÁØÀÔ·ÂÀÌ ¾Æ´Ñ $Filename ¿¡¼ ÀнÀ´Ï´Ù. echo $name done <$Filename # Ç¥ÁØÀÔ·ÂÀÌ $Filename À¸·Î ÀçÁöÇ⠵ƽÀ´Ï´Ù. exit 0 |
예 3-74. ÀçÁöÇâµÈ until ·çÇÁ
#!/bin/bash # ¹Ù·Î ¾Õ¿¡¼ ±¸ÇöÇß´ø °ÍÀ» "until"·Î ±¸ÇöÇÑ ¿¹Á¦. if [ -z $1 ] then Filename=names.data # ÆÄÀÏ À̸§ÀÌ ÁÖ¾îÁöÁö ¾Ê¾ÒÀ» °æ¿ì ¾µ ±âº»°ª else Filename="$1" fi # while [ "$name" != Smith ] until [ "$name" = Smith ] # != ¸¦ = ·Î ¹Ù²ãÁÖ¼¼¿ä. do read name # Ç¥ÁØÀÔ·ÂÀÌ ¾Æ´Ñ $Filename ¿¡¼ ÀÐ¾î µéÀÔ´Ï´Ù. echo $name done <$Filename # Ç¥ÁØÀÔ·ÂÀ» $Filename À¸·Î ÀçÁöÇâ. # ¾ÕÀÇ "while" ·çÇÁ¿Í °°Àº °á°ú exit 0 |
예 3-75. ÀçÁöÇâµÈ for ·çÇÁ
#!/bin/bash if [ -z $1 ] then Filename=names.data # ÆÄÀÏ À̸§ÀÌ ÁÖ¾îÁöÁö ¾Ê¾ÒÀ» °æ¿ì ¾µ ±âº»°ª else Filename="$1" fi line_count=`wc $Filename | awk '{ print $1 }'` # ÇØ´ç ÆÄÀÏÀÇ ÁÙ ¼ö # "for" ·çÇÁ¿¡¼ Ç¥ÁØÀÔ·ÂÀ» ÀçÁöÇâ ÇÏ´Â°Ô ¾ÆÁÖ ºÎÀÚ¿¬½º·¯¿ö º¸ÀÌ°í ±¸ÇöÇϱâ # ±î´Ù·Ó°ÚÁö¸¸, ¿©·¯ºÐÀÌ ÃæºÐÈ÷ ¶È¶ÈÇÏ´Ù¸é °¡´ÉÇÏ´Ù´Â °ÍÀ» º¸¿©ÁÝ´Ï´Ù. for name in `seq $line_count` # "seq"°¡ ¿¬¼ÓµÈ ¼ýÀÚ¸¦ Âï¾î³½´Ù´Â °Å, ±â¾ï³ª½ÃÁÒ? # while [ "$name" != Smith ] -- "while" ·çÇÁº¸´Ù ´õ º¹ÀâÇÕ´Ï´Ù. do read name # Ç¥ÁØÀÔ·ÂÀÌ ¾Æ´Ñ $Filename ¿¡¼ ÀÐ¾î µéÀÔ´Ï´Ù. echo $name if [ "$name" = Smith ] # ÀÌ·± ÀÛ¾÷À» Ãß°¡ÀûÀ¸·Î µ¡ºÙ¿©¾ß ÇÕ´Ï´Ù. then break fi done <$Filename # Ç¥ÁØÀÔ·ÂÀ» $Filename À¸·Î ÀçÁöÇâ exit 0 |
예 3-76. ÀçÁöÇâµÈ if/then Å×½ºÆ®¹®
#!/bin/bash if [ -z $1 ] then Filename=names.data # ÆÄÀÏ À̸§ÀÌ ÁÖ¾îÁöÁö ¾ÊÀ» °æ¿ì¿¡ ¾µ ±âº»°ª else Filename="$1" fi TRUE=1 if [ $TRUE ] then read name echo $name fi <$Filename # ÆÄÀÏÀÇ Ã¹¹øÂ° ÁÙ¸¸ ÀÐ¾î µéÀÔ´Ï´Ù. # if/then Å×½ºÆ® ¹®Àº ·çÇÁ¾È¿¡¼ ¾²ÀÌÁö ¾Ê´Â ÇÑ, ¹Ýº¹Çؼ ºñ±³ÇÒ ¹æ¹ýÀÌ ¾ø½À´Ï´Ù. exit 0 |
참고: Here documents´Â I/O ÀçÁöÇâÀÇ Æ¯º°ÇÑ ÄÉÀ̽ºÀÔ´Ï´Ù. 3.24절¸¦ Âü°íÇϼ¼¿ä.
[1] | ÆÄÀÏ µð½ºÅ©¸³ÅÍ´Â ¿î¿µÃ¼Á¦°¡ ¿·Á ÀÖ´Â ÆÄÀÏ¿¡ ´ëÇØ ÃßÀûÇÒ ¼ö ÀÖ°Ô ÇÒ´çÇØ ÁÖ´Â °£´ÜÇÑ ¼ýÀÚÀÔ´Ï´Ù. ÆÄÀÏ Æ÷ÀÎÅ͸¦ °£·«ÈÇÑ ¹öÀüÀ̶ó°í »ý°¢ÇÏ¸é µË´Ï´Ù. C ¿¡¼ ÆÄÀÏ ÇÚµé¿Í À¯»çÇÑ °³³äÀÔ´Ï´Ù. |
[2] | 5¹ø ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ¾²¸é ¹®Á¦°¡ »ý±æ ¼ö ÀÖ½À´Ï´Ù. Bash°¡ ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ exec·Î Æ÷Å©(fork)ÇÒ ¶§, ÀÚ½Ä ÇÁ·Î¼¼½º°¡ 5¹ø ÆÄÀÏ µð½ºÅ©¸³Å͸¦ »ó¼Ó ¹Þ½À´Ï´Ù(Chet RameyÀÇ ¿¹Àü À̸ÞÀÏ( SUBJECT: RE: File descriptor 5 is held open)À» Âü°íÇϼ¼¿ä). ÀÌ 5¹ø ÆÄÀÏ µð½ºÅ©¸³ÅÍ´Â °Çµå¸®Áö ¾Ê´Â°Ô ÁÁ½À´Ï´Ù. |