'''½© ÇÁ·Î±×·¡¹Ö °­ÁÂ''' * Âü°í¼­Àû: Ãʺ¸ÀÚ¿ë ¸®´ª½º ÇÁ·Î±×·¡¹Ö (´ë¸²ÃâÆÇ»ç, Çѵ¿ÈÆ,À̸¸¿ë¿ª, NEIL MATTHEW, RICHARD STONES Àú) * ³ÝÃ÷°í ¸®´ª½º µ¿È£È¸ 7¿ù Á¦ 5ȸ Á¤±â °ø°³°­Á ÀÚ·á * ±Û¾´ÀÌ: À§°æ¼· * À§Å°¹®¼­ º¯È¯: [À±ÇöÈ£] 2005³â 2¿ù 23ÀÏ. ¿øº»: http://wiki.kldp.org/KoreanDoc/Shell_Programming-KLDP [[TableOfContents]] == º¯¼ö == * ½©º¯¼ö´Â óÀ½ »ç¿ëµÉ ¶§ ¸¸µé¾îÁø´Ù. Áï ¹Ì¸® ¼±¾ðÇÒ ÇÊ¿ä°¡ ¾ø´Ù. * ½©º¯¼ö´Â À¯´Ð½º ¸í·É°ú ¸¶Âù°¡Áö·Î ´ë¼Ò¹®ÀÚ¿¡ ±¸º°ÀÌ ÀÖ´Ù. * ½©º¯¼ö´Â ±âº»ÀûÀ¸·Î µ¥ÀÌÅ͸¦ ¹®ÀÚ¿­·Î ÀúÀåÇÑ´Ù. ¼öÄ¡¸¦ ´ëÀÔÇصµ ½ÇÁ¦ ¼öÄ¡°¡ ¾Æ´Ñ ¹®ÀÚ¿­ÀÌ ÀúÀåµÈ´Ù. °è»êÀÌ ÇÊ¿äÇÒ °æ¿ì´Â ÀÚµ¿À¸·Î ¼öÄ¡·Î º¯È¯ÇÏ¿© °è»êÈÄ ´Ù½Ã ¹®ÀÚ¿­·Î ÀúÀåµÈ´Ù. * ½©º¯¼öÀÇ °ªÀ» »ç¿ëÇÒ ¶§´Â º¯¼ö¸í¾Õ¿¡ "$" ¸¦ ºÙ¿©¼­ »ç¿ëÇÑ´Ù. * ½©º¯¼ö¿¡ °ªÀ» ´ëÀÔÇÒ¶§´Â "$"¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù. * ½©º¯¼ö´Â ŸÀÔÀÌ ¾ø´Ù. Áï ¾Æ¹« °ªÀ̳ª ´Ù ³ÖÀ» ¼ö ÀÖ´Ù. === ȯ°æº¯¼ö === ½©À» ±âµ¿ÇÏ°í³ª¸é ±âº»ÀûÀ¸·Î ¼ÂÆõǾîÀÖ´Â º¯¼öµéÀÌ´Ù. À¯´Ð½º/¸®´ª½º¿¡´Â ¸¹Àº ȯ°æº¯¼öµéÀÌ ÀÖ°í ÇÊ¿äÇÑ°æ¿ì ÀÌ º¯¼öµéÀ» ¸¶Ä¡ ÀϹݺ¯¼öó·³ °ªÀ» ¾ò¾î¿À°Å³ª ¼ÂÆÃÇÒ ¼ö ÀÖ´Ù. ¿©±â¼­´Â ½©°ú Á÷Á¢ÀûÀÎ °ü·ÃÀÌ Àִ°͸¸ ¼³¸íÇÑ´Ù. * `$0` - ½ÇÇàµÈ ½© ½ºÅ©¸³Æ® À̸§ * `$#` - ½ºÅ©¸³Æ®¿¡ ³Ñ°ÜÁø ÀÎÀÚÀÇ °¹¼ö * `$$` - ½© ½ºÅ©¸³Æ®ÀÇ ÇÁ·Î¼¼½º ID === ÀÎÀÚ º¯¼ö === ½©½ºÅ©¸³Æ®¿¡ ÀÎÀÚ¸¦ ³Ñ°ÜÁÙ¶§ ±× ÀÎÀڵ鿡 ´ëÇÑ Á¤º¸¸¦ °¡Áö°í ÀÖ´Â º¯¼öµé. * `$1~ $nnn` - ³Ñ°ÜÁø ÀÎÀÚµé * `$*` - ½ºÅ©¸³Æ®¿¡ Àü´ÞµÈ ÀÎÀÚµéÀ» ¸ð¾Æ³õÀº ¹®ÀÚ¿­. ÇϳªÀÇ º¯¼ö¿¡ ÀúÀåµÇ¸ç IFS ȯ°æº¯¼öÀÇ Ã¹¹ø° ¹®ÀÚ·Î ±¸ºÐµÈ´Ù. * `$@` - `$*`°ú °°´Ù. ´Ù¸¸ ±¸ºÐÀÚ°¡ IFSº¯¼öÀÇ ¿µÇâÀ» ¹ÞÁö ¾Ê´Â´Ù. == ÀϹݺ¯¼ö == ÀϹݺ¯¼ö¿¡ Ưº°ÇÑ Á¦¾àÀº ¾ø´Ù. ´Ü ´ë¼Ò¹®ÀÚ ±¸ºÐ¸¸ Á¤È®ÇÏ°Ô ÇØÁÖ¸é µÈ´Ù. '''¿¹Á¦''' {{{#!vim sh #!/bin/sh echo "This Script Executable File : $0" echo "Argument Count : $#" echo "Process ID : $$" echo "Argument List \$* : $*" echo "Argument List \$@ : $@" echo "Argument 1 : $1" echo "Argument 2 : $2" echo "Argument 3 : $3" echo "Argument 4 : $4" }}} '''½ÇÇà''' {{{ $chmod 755 test1 $./test1 a1 a2 a3 a4 This Script Executable File : ./test1 Argument Count : 4 Process ID : 905 Argument List $* : a1 a2 a3 a4 Argument List $@ : a1 a2 a3 a4 Argument 1 : a1 Argument 2 : a2 Argument 3 : a3 Argument 4 : a4 }}} === ¿¬»ê === º¯¼öÀÇ »ê¼ú ¿¬»êÀº »ý°¢ÇÏ´Â °Íó·³ ½±Áö ¾Ê´Ù. À§¿¡¼­ ¾ð±ÞÇßµíÀÌ º¯¼ö¿¡´Â ¸ðµç °ÍÀÌ ¹®ÀÚ¿­·Î ÀúÀåµÇ±â ¶§¹®¿¡ ¿¬»êÀÌ ºÒ°¡´ÉÇÏ´Ù. ¿¬»êÀ» À§Çؼ­´Â Á» º¹ÀâÇÑ ÀýÂ÷¸¦ °ÅÃÄ¾ß ÇÑ´Ù. {{{ º¯¼ö = $((»ê¼ú½Ä)) }}} ÀÌ°ÍÀÌ °¡Àå ´Ü¼øÇÑ ¿¬»ê ±ÔÄ¢ÀÌ´Ù. »ê¼ú½Ä³»¿¡´Â º¯¼ö(`$1`, `$a` ¿Í °°Àº) µµ µé¾î°¥ ¼ö ÀÖ´Ù. »ê¼ú½Ä ³»¿¡ ¼ýÀÚ°¡ ¾Æ´Ñ ¹®ÀÚ¿­, ¶Ç´Â ¹®ÀÚ¿­ÀÌ ´ã°ÜÀÖ´Â º¯¼ö°¡ µé¾î°¡¸é ±×°ÍµéÀº °è»ê¿¡¼­ Á¦¿ÜµÈ´Ù. (Á¤È®È÷ ¸»Çϸé 0 À¸·Î °£ÁÖµÇ¾î ¿¬»êÀÌ ÀÌ·ç¾î ÁöÁö ¾Ê´Â´Ù.) === ¸Å°³º¯¼ö È®Àå === ¸Å°³º¯¼ö È®ÀåÀ̶õ º¯¼öÀÇ °ªÀ» ¹®ÀÚ¿­ µîÀ¸·Î ´ëüÇÏ´Â °ÍÀ» ¸»ÇÑ´Ù. ´Ü¼øÇÑ ´ëü»Ó ¾Æ´Ï¶ó º¯¼ö³»ÀÇ ¹®ÀÚ¿­À» Á¶ÀÛÇÏ¿© ¿øÇÏ´Â ¹®ÀÚ¿­¸¸À» ÃßÃâÇÒ ¼öµµ ÀÖ´Ù. Çü½Ä: * `${parm:-default}` - parmÀÌ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é default·Î ´ëüµÈ´Ù. * `${#parm}` - parmÀÇ ±æÀ̸¦ ÂüÁ¶ÇÑ´Ù.(°¡Á®¿Â´Ù) * `${parm%word}` - ³¡¿¡¼­ºÎÅÍ word¿Í ÀÏÄ¡ÇÏ´Â parmÀÇ ÃּҺκÐ(ù¹ø° ÀÏÄ¡)À» Á¦°ÅÇÏ°í ³ª¸ÓÁö¸¦ ¹ÝȯÇÑ´Ù. * `${parm%%word}` - ³¡¿¡¼­ºÎÅÍ word¿Í ÀÏÄ¡ÇÏ´Â parmÀÇ ÃÖ´ëºÎºÐ(¸¶Áö¸· ÀÏÄ¡)À» Á¦°ÅÇÏ°í ³ª¸ÓÁö¸¦ ¹ÝȯÇÑ´Ù. * `${parm#word}` - óÀ½ºÎÅÍ word¿Í ¸Â´Â parmÀÇ ÃּҺκÐ(ù¹ø° ÀÏÄ¡)À» Á¦°ÅÇÏ°í ³ª¸ÓÁö ºÎºÐÀ» ¹ÝȯÇÑ´Ù. * `${parm##word}` - óÀ½ºÎÅÍ word¿Í ¸Â´Â parmÀÇ ÃÖ´ëºÎºÐ(¸¶Áö¸· ÀÏÄ¡)À» Á¦°ÅÇÏ°í ³ª¸ÓÁö¸¦ ¹ÝȯÇÑ´Ù. word¿¡´Â ¿ÍÀϵå Ä«µå¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.¿¹¸¦ º¸ÀÚ. {{{ 1 #!/bin/sh 2 3 p="/usr/X11R6/bin/startx" 4 5 unset p 6 a=${p:-"Variable p Not found"} 7 echo $a 8 9 p="/usr/X11R6/bin/startx" 10 a=${p:-"Variable parm Not found"} 11 echo $a 12 13 a=${#p} 14 echo $a 15 16 a=${p%/*} 17 echo $a 18 19 a=${p%%/*} 20 echo $a 21 22 a=${p#*/} 23 echo $a 24 25 a=${p##*/} 26 echo $a 27 }}} À§ ½ºÅ©¸³Æ®ÀÇ °á°ú´Â ´ÙÀ½°ú °°´Ù. {{{ Variable p Not found /usr/X11R6/bin/startx 21 /usr/X11R6/bin usr/X11R6/bin/startx startx }}} * 6Çà : º¯¼ö p °¡ Á¦°Å µÇ¾úÀ¸¹Ç·Î "Variable p Not found" °¡ a¿¡ µé¾î°£´Ù. * 10Çà : º¯¼ö p °¡ ÀÖÀ¸¹Ç·Î ±×´ë·Î a¿¡ µé¾î°£´Ù. * 13Çà : a¿¡´Â º¯¼ö pÀÇ ±æÀÌ°¡ µé¾î°£´Ù. * 16Çà : p ¿¡¼­ °¡Àå ¿À¸¥ÂÊÀÇ "/"ºÎÅÍ ³¡±îÁö Áö¿ì°í ³ª¸ÓÁö¸¦ a¿¡ ³Ö´Â´Ù. * 19Çà : p ¿¡¼­ °¡Àå ¿ÞÂÊÀÇ "/" ºÎÅÍ ³¡±îÁö Áö¿ì°í ³ª¸ÓÁö¸¦ a¿¡ ³Ö´Â´Ù. (¾Æ¹«°Íµµ ¾ø´Ù) * 22Çà : p ÀÇ Ã³À½ºÎÅÍ °¡Àå¿ÞÂÊÀÇ "/" ±îÁö Áö¿ì°í ³ª¸ÓÁö¸¦ a¿¡ ³Ö´Â´Ù. * 25Çà : p ÀÇ Ã³À½ºÎÅÍ °¡Àå ¿À¸¥ÂÊÀÇ "/"±îÁö Áö¿ì°í ³ª¸ÓÁö¸¦ a¿¡ ³Ö´Â´Ù. == Á¶°Ç ÆÇ´Ü == ½© ½ºÅ©¸³Æ®¿¡¼­ Á¶°ÇÆÇ´ÜÀº if ¿Í test ¸í·ÉÀ» È¥ÇÕÇÏ¿© »ç¿ëÇÑ´Ù. ÀϹÝÀûÀÎ ¿¹´Â ´ÙÀ½°ú °°´Ù. {{{#!vim sh if test -f test1 then ... fi }}} `-f` ´Â ÁÖ¾îÁø ÀÎÀÚ°¡ ÀÏ¹Ý ÆÄÀÏÀÏ ¶§ ÂüÀÌ µÈ´Ù. test ¸í·ÉÀº `[]` ·Î ´ëüµÉ ¼ö ÀÖ´Ù. {{{#!vim sh if [ -f test1 ] then ... fi if [ -f test1 ]; then ... fi }}} === test ¸í·É === test ¸í·ÉÀÇ Á¶°ÇÀº ´ÙÀ½°ú °°ÀÌ ¼¼ ºÎ·ù·Î ³ª´©¾îÁø´Ù. ==== ¹®ÀÚ¿­ ºñ±³ ==== * `[ string ]` - stringÀÌ ºó ¹®ÀÚ¿­ÀÌ ¾Æ´Ï¶ó¸é Âü * `[ string1 = string2 ]` - µÎ ¹®ÀÚ¿­ÀÌ °°´Ù¸é Âü * `[ string1 != string2 ]` - µÎ ¹®ÀÚ¿­ÀÌ ´Ù¸£¸é Âü * `[ -n string ]` - ¹®ÀÚ¿­ÀÌ null(ºó ¹®ÀÚ¿­) ÀÌ ¾Æ´Ï¶ó¸é Âü * `[ -z string ]` - ¹®ÀÚ¿­ÀÌ null(ºó ¹®ÀÚ¿­) À̶ó¸é Âü ==== »ê¼ú ºñ±³ ==== * `[ expr1 -eq expr2 ]` - µÎ Ç¥Çö½Ä °ªÀÌ °°´Ù¸é Âü ('EQual') * `[ expr1 -ne expr2 ]` - µÎ Ç¥Çö½Ä °ªÀÌ °°Áö ¾Ê´Ù¸é Âü ('Not Equal') * `[ expr1 -gt expr2 ]` - `expr1 > expr2` À̸é Âü ('Greater Than') * `[ expr1 -ge expr2 ]` - `expr1 >= expr2` À̸é Âü ('Greater Equal') * `[ expr1 -lt expr2 ]` - `expr1 < expr2` À̸é Âü ('Less Than') * `[ expr1 -le expr2 ]` - `expr1 <= expr2` À̸é Âü ('Less Equal') * `[ ! expr ]` - expr ÀÌ ÂüÀÌ¸é °ÅÁþ, °ÅÁþÀ̸é Âü * `[ expr1 -a expr2 ]` - expr1 AND expr2 ÀÇ °á°ú (µÑ´Ù ÂüÀ̸é Âü, 'And') * `[ expr1 -o expr2 ]` - expr1 OR expr2 ÀÇ °á°ú (µÑÁß Çϳª¸¸ ÂüÀ̸é Âü, 'Or') ==== ÆÄÀÏ Á¶°Ç ==== * `[ -b FILE ]` - FILE ÀÌ ºí·° µð¹ÙÀ̽º À̸é Âü * `[ -c FILE ]` - FILE ÀÌ ¹®ÀÚ µð¹ÙÀ̽º À̸é Âü. * `[ -d FILE ]` - FILE ÀÌ µð·ºÅ丮À̸é Âü * `[ -e FILE ]` - FILE ÀÌ Á¸ÀçÇϸé Âü * `[ -f FILE ]` - FILE ÀÌ Á¸ÀçÇÏ°í Á¤±ÔÆÄÀÏÀ̸é Âü * `[ -g FILE ]` - FILE ÀÌ set-group-id ÆÄÀÏÀ̸é Âü * `[ -h FILE ]` - FILE ÀÌ ½Éº¼¸¯ ¸µÅ©À̸é Âü * `[ -L FILE ]` - FILE ÀÌ ½Éº¼¸¯ ¸µÅ©À̸é Âü * `[ -k FILE ]` - FILE ÀÌ Sticky bit °¡ ¼ÂÆõǾî ÀÖÀ¸¸é Âü * `[ -p FILE ]` - True if file is a named pipe. * `[ -r FILE ]` - ÇöÀç »ç¿ëÀÚ°¡ ÀÐÀ» ¼ö ÀÖ´Â ÆÄÀÏÀ̸é Âü * `[ -s FILE ]` - ÆÄÀÏÀÌ ºñ¾îÀÖÁö ¾ÊÀ¸¸é Âü * `[ -S FILE ]` - ¼ÒÄÏ µð¹ÙÀ̽ºÀ̸é Âü * `[ -t FD ]` - FD °¡ ¿­·ÁÁø Å͹̳ÎÀ̸é Âü * `[ -u FILE ]` - FILE ÀÌ set-user-id ÆÄÀÏÀ̸é Âü * `[ -w FILE ]` - ÇöÀç »ç¿ëÀÚ°¡ ¾µ ¼ö ÀÖ´Â ÆÄÀÏ(writable file) À̸é Âü * `[ -x FILE ]` - ÇöÀç»ç¿ëÀÚ°¡ ½ÇÇàÇÒ ¼ö ÀÖ´Â ÆÄÀÏ(Executable file) À̸é Âü * `[ -O FILE ]` - FILE ÀÇ ¼ÒÀ¯ÀÚ°¡ ÇöÀç »ç¿ëÀÚÀ̸é Âü * `[ -G FILE ]` - FILE ÀÇ ±×·ìÀÌ ÇöÀç »ç¿ëÀÚÀÇ ±×·ì°ú °°À¸¸é Âü * `[ FILE1 -nt FILE2 ]` - : FILE1ÀÌ FILE2 º¸´Ù »õ·Î¿î ÆÄÀÏÀ̸é ( ÃÖ±ÙÆÄÀÏÀ̸é ) Âü * `[ FILE1 -ot FILE2 ]` - : FILE1ÀÌ FILE2 º¸´Ù ¿À·¡µÈ ÆÄÀÏÀ̸é Âü * `[ FILE1 -ef FILE2 ]` - : FILE1 ÀÌ FILE2ÀÇ Çϵ帵ũ ÆÄÀÏÀ̸é Âü === if ±¸¹® === if ¹®Àº Á¶°ÇÀ» ÆÇ´ÜÇÏ¿© ÁÖ¾îÁø ¹®ÀåÀ» ¼öÇàÇÑ´Ù. ==== Çü½Ä 1 (´ÜÀÏ if ¹®) ==== Çü½Ä: {{{ if [ Á¶°Ç ] then ¹®Àå1 ¹®Àå2 fi }}} ==== Çü½Ä 2 (if-else ¹®) ==== Çü½Ä: {{{ if [ Á¶°Ç ] then ¹®Àå3 ¹®Àå4 fi }}} ==== Çü½Ä 3 (if-elif ¹®) ==== Çü½Ä: {{{ if [ Á¶°Ç ] then ¹®Àå1 ¹®Àå2 elif ¹®Àå3 ¹®Àå4 else ¹®Àå5 ¹®Àå6 fi }}} === case ±¸¹® === 'ÆÐÅÏ'¿¡´Â * ¹®ÀÚ, Áï ¿ÍÀϵåÄ«µå¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. Çü½Ä: {{{ case º¯¼ö in ÆÐÅÏ [ | ÆÐÅÏ ] ... ) ¹®Àå ;; ÆÐÅÏ [ | ÆÐÅÏ ] ... ) ¹®Àå ;; .... * ) ¹®Àå ;; esac }}} === ¸ñ·Ï === ¿©·¯ ¸í·ÉÀ» ½ÇÇàÇÒ¶§ ¾ÕÀÇ ¸í·ÉÀÇ °á°ú¿¡ ÀÇÇؼ­ ´ÙÀ½ÇൿÀÌ °áÁ¤µÇ¾î¾ß ÇÒ °æ¿ì°¡ ÀÖ´Ù. ÀÌ·±°æ¿ì¿¡ AND³ª ORÁ¶°ÇÀ» »ç¿ëÇؼ­ Çѹø¿¡ ó¸®ÇÒ ¼ö ÀÖ´Ù. ÀÌ°ÍÀº ½© ½ºÅ©¸³Æ® »Ó ¾Æ´Ï¶ó ¸í·ÉÇà¿¡¼­µµ »ç¿ë °¡´ÉÇÏ´Ù. ¹°·Ð if ¹®À» ÀÌ¿ëÇؼ­ ¹Ýȯ°ªÀ» °Ë»çÇÏ¿© ó¸®ÇÒ ¼ö ÀÖÁö¸¸ ¹®ÀåÀÌ ±æ¾îÁö°í º¹ÀâÇØÁø´Ù. ==== AND ¸ñ·Ï ==== {{{ statment1 && statment2 && statmentN && ..... }}} À§ÀÇ ¸í·ÉµéÀº °¢ ¸í·ÉÀÌ °ÅÁþÀÌ µÉ ¶§ ±îÁö ¸í·ÉÀ» ¼öÇàÇØ ³ª°£´Ù. ¼öÇà µµÁß °á°ú°¡ °ÅÁþÀÌ µÇ¸é ±×ÀÌÈÄÀÇ ¸í·ÉÀº ¼öÇàµÇÁö ==== OR ¸ñ·Ï ==== {{{ statment1 || statment2 || statmentN || ..... }}} À§ÀÇ ¸í·ÉµéÀº °¢ ¸í·ÉÀÌ °ÅÁþÀÌ ³ª¿À´Â µ¿¾È °è¼ÓµÈ´Ù. Áï ÂüÀÌ ³ª¿À¸é ½ÇÇàÀ» ¸ØÃá´Ù. ==== AND¿Í OR¸ñ·ÏÀº È¥¿ëÀÌ °¡´ÉÇÏ´Ù. ==== {{{ [ Á¶°Ç ] && ¹®Àå1 || ¹®Àå2 }}} À§ÀÇ ¿¹´Â Á¶°ÇÀÌ ÂüÀÌ¸é ¹®Àå1À» ¼öÇàÇÏ°í °ÅÁþÀÌ¸é ¹®Àå2¸¦ ¼öÇàÇÑ´Ù. ¶ÇÇÑ À§ÀÇ ¹®Àå1À̳ª ¹®Àå2¿¡¼­ ¿©·¯°³ÀÇ ¹®ÀåÀ» ¼öÇàÇÏ°í ½ÍÀ» ¶§´Â {}¸¦ »ç¿ëÇÏ¸é µÈ´Ù. {{{ [Á¶°Ç] && { ¹®Àå1 ¹®Àå2 ¹®Àå3 } || { ¹®Àå4 ¹®Àå5 ¹®Àå6 } }}} == Á¦¾î¹® == === for === for ¹®Àº ÁöÁ¤µÈ ¹üÀ§¾È¿¡¼­ ·çÇÁ¸¦ ¼öÇàÇÑ´Ù. ¹üÀ§´Â ¾î¶² ÁýÇÕµµ °¡´ÉÇÏ´Ù. Çü½Ä: {{{ for º¯¼ö in °ª1, °ª2, ... do ¹®Àå done }}} ¸Å ·çÇÁ¸¦ µ¹¶§¸¶´Ù º¯¼öÀÇ °ªÀº in ÀÌÈÄÀÇ °ªÀ¸·Î ´ëüµÈ´Ù. ¿¹Á¦: {{{ for str in "test1", "test2", "test3", "test4" do echo @str done }}} Ãâ·Â: {{{ test1 test2 test3 test4 }}} °ª¿¡´Â ¿ÍÀϵå Ä«µå È®ÀåÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. {{{ for file in $(ls -a | grep "^\.") do echo "$file is Hidden File" done }}} À§ ¿¹ÀÇ Ãâ·Â °á°ú´Â ÇöÀç µð·ºÅ丮¿¡¼­ óÀ½ÀÌ "." À¸·Î½ÃÀÛÇÏ´Â ÆÄÀÏ(È÷µçÆÄÀÏ)¸¸À» Ãâ·ÂÇÑ´Ù. {{{ for file in $(ls chap[345].txt); do echo "--- $file ---" >> Books.txt cat $file >> Books.txt done }}} À§ÀÇ ¿¹´Â chap3.txt, chap4.txt, chap5.txt ÆÄÀÏÀ» Books.txt ¶ó´Â ÆÄÀÏ¿¡ ºÙ¿© ³Ö´Â´Ù. ´ÙÀ½ÀÇ ¿¹¸¦ º¸°í °á°ú¸¦ ¿¹ÃøÇغ¸ÀÚ. {{{ echo "\$* output" for fvar in $* do echo $fvar done echo "\$@ output" for fvar in $@ do echo $fvar done }}} === while === for ¸í·ÉÀÇ °æ¿ì´Â Ƚ¼ö¸¦ ÁöÁ¤Çؼ­ ·çÇÁ¸¦ ¼öÇàÇÏ´Â µ¥´Â ¹®Á¦°¡ ÀÖ´Ù. while ¹®Àº ½ÇÇà Ƚ¼ö°¡ ÁöÁ¤µÇÁö ¾Ê¾ÒÀ» ¶§ Æí¸®ÇÏ´Ù. Çü½Ä: {{{ while Á¶°Ç¹® do ¹®Àå done }}} ¿¹Á¦¸¦ º¸ÀÚ. Æнº¿öµå¸¦ ÀÔ·Â¹Þ°í ¸Â´ÂÁö È®ÀÎÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù. {{{ echo "Enter Password : " read password1 echo "Retype Password : " read password2 while [ "$password1" != "$password2" ] do echo "Password mismatch Try again " echo "Retype Password : " read password2 done echo "OK Password Match complete" }}} ¾î¶»°Ô µ¿ÀÛÇϴ°¡ ? === until === untilÀº while¹®°ú µ¿ÀÏÇÑ È¿°ú¸¦ ³»Áö¸¸ Á¶°ÇÀÌ ¹Ý´ëÀÌ´Ù. Áï, while¹®Àº Á¶°ÇÀÌ ÂüÀϵ¿¾È ·çÇÁ¸¦ ¼öÇàÇÏÁö¸¸ untilÀº Á¶°ÇÀÌ °ÅÁþÀÏ µ¿¾È ·çÇÁ¸¦ ¼öÇàÇÑ´Ù. Çü½Ä: {{{ until Á¶°Ç¹® do ¹®Àå done }}} ´ÙÀ½ ¿¹¸¦ º¸ÀÚ. ÀÌ ¿¹´Â ÁöÁ¤ÇÑ À¯Àú°¡ ·Î±×ÀÎÇÏ¸é ¾Ë·ÁÁØ´Ù. {{{ #!/bin/sh until who | grep "$1" > /dev/null do sleep 10 done echo "User $1 just logged in ^_^" }}} === select === select¹®Àº ¿øÇÏ´Â ¸®½ºÆ®¸¦ Ãâ·ÂÇÏ°í ±× Áß ¼±ÅÃµÈ °ÍÀ» µ¹·ÁÁÖ´Â ±¸¹®ÀÌ´Ù. ÁÖÀÇÇÒ Á¡Àº selectÀÇ ·çÇÁ ³»¿¡¼­´Â ÀÚµ¿ÀûÀ¸·Î ·çÇÁ¸¦ ¹þ¾î³¯ ¼ö ¾ø´Ù. ¹Ýµå½Ã break¹®À» »ç¿ëÇؼ­ ·çÇÁ¸¦ ¹þ¾î³ª¾ß ÇÑ´Ù. ¿¹: °£´ÜÇÑ ÄûÁî {{{ #!/bin/sh echo "´ÙÀ½Áß ½ºÅ©¸³Æ®¾ð¾î ÇÁ·Î±×·¡¹Ö¿¡ ¼ÓÇÏ´Â °ÍÀº ?" select var in "½© ÇÁ·Î±×·¡¹Ö" "C ÇÁ·Î±×·¡¹Ö" "ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö" "Exit" do if [ "$var" = "½© ÇÁ·Î±×·¡¹Ö" ] then echo "Á¤´äÀÔ´Ï´Ù." exit 0 elif [ "$var" = "Exit" ] then echo "Á¾·áÇÕ´Ï´Ù." exit 1 else echo "$var À» ¼±ÅÃÇϼ̽À´Ï´Ù. ¿À´äÀÔ´Ï´Ù." echo "´ÙÀ½Áß ½ºÅ©¸³Æ®¾ð¾î ÇÁ·Î±×·¡¹Ö¿¡ ¼ÓÇÏ´Â °ÍÀº ?" fi done }}} == ÇÔ¼ö == ½© ½ºÅ©¸³Æ® ³»ºÎ¿¡ ¶Ç´Â ´Ù¸¥ ½ºÅ©¸³Æ®ÆÄÀÏ¿¡ ÇÔ¼ö¸¦ Á¤ÀÇÇØ ³õ°í »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÇÔ¼ö¸¦ »ç¿ëÇϸé Äڵ带 ÃÖÀûÈ­ ÇÒ ¼ö ÀÖ°í, ÄÚµùÀÌ °£°áÇØÁö¸ç,Àç»ç¿ëÀÌ °¡´ÉÇÏ´Ù. ±×·¯³ª ´Ù¸¥ ½ºÅ©¸³Æ® ÆÄÀÏÀ» È£ÃâÇؼ­ ÇÔ¼ö¸¦ ½ÇÇàÇÒ °æ¿ì, °¡´ÉÀº ÇÏÁö¸¸ ½ºÅ©¸³Æ®ÀÇ ½ÇÇà½Ã°£ÀÌ ±æ¾îÁö°í, ÇÔ¼öÀÇ °á°ú¸¦ Àü´ÞÇÏ´Â °ÍÀÌ ±î´Ù·Ó±â ¶§¹®¿¡ °¡±ÞÀûÀÌ¸é ¿ÜºÎÆÄÀÏÀÇ ÇÔ¼ö´Â ¾È¾²´Â °ÍÀÌ ÁÁ´Ù. Çü½Ä: {{{ ÇÔ¼ö¸í () { ¹®Àå return °ª } }}} »ç¿ë {{{ ÇÔ¼ö¸í ÀÎÀÚ1, ÀÎÀÚ2, ... }}} ÇÔ¼ö´Â µ¶¸³ÀûÀ¸·Î `$#`, `$*`, `$0` µîÀÇ ÀÎÀÚ º¯¼ö¸¦ »ç¿ëÇÑ´Ù. Áï ÇÔ¼ö³»ÀÇ `$#`°ú º»Ã¼ÀÇ `$#`Àº ´Ù¸¦ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ´ÙÀ½ÀÇ ¿¹¸¦ º¸ÀÚ {{{ #!/bin/sh func() { echo ------ this is func -------- echo "This Script Executable File : $0" echo "Argument Count : $#" echo "Process ID : $$" echo "Argument List \$* : $*" echo "Argument List \$@ : $@" echo "Argument 1 : $1" echo "Argument 2 : $2" echo "Argument 3 : $3" } echo ------ this is main -------- echo "This Script Executable File : $0" echo "Argument Count : $#" echo "Process ID : $$" echo "Argument List \$* : $*" echo "Argument List \$@ : $@" echo "Argument 1 : $1" echo "Argument 2 : $2" echo "Argument 3 : $3" echo "Argument 4 : $4" func aa bb cc }}} º»Ã¼¿Í ÇÔ¼ö¿¡¼­ µ¿ÀÏÇÑ º¯¼ö¸¦ º¸¿©ÁÖÁö¸¸ °ªÀº Ʋ¸°´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ÇÔ¼ö¿¡¼­ °ªÀ» ¹ÝȯÇϱâ - ÇÔ¼ö¿¡¼­ ¹Ýȯ°ªÀº ¹Ýµå½Ã Á¤¼ö°ª¸¸À» ¹ÝȯÇÒ ¼ö ÀÖ´Ù. ÀÌ °ªÀ» if µîÀ¸·Î Á¶°ÇÀ» ÆÇ´ÜÇؼ­ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¹Ýȯ°ª Áß 0Àº ÂüÀ¸·Î ³ª¸ÓÁö ¼ýÀÚ´Â °ÅÁþÀ¸·Î ÆǺ°µÈ´Ù. == ¸í·É¾î == ½©¿¡¼­ ¾µ ¼ö ÀÖ´Â ¸í·É¾î´Â µÎ°¡Áö·Î ³ª´©¾îÁø´Ù. ¸í·É ÇÁ·ÒÇÁÆ® »ó¿¡¼­ ½ÇÇà ½Ãų ¼ö ÀÖ´Â ¿ÜºÎ ¸í·É¾î¿Í ½© ³»ºÎ ¸í·ÉÀÌ´Ù. ³»ºÎ ¸í·ÉÀº º¸Åë ½© ³»ºÎ³ª ½© ±¸¹®»ó¿¡¼­ ¾²ÀδÙ. ¿ÜºÎ¸í·ÉÀº ½©¿¡ °ü°è¾øÀÌ »ç¿ëÀÌ °¡´ÉÇÏ´Ù. === break === Á¦¾î¹®À̳ª Á¶°Ç¹®ÀÇ ·çÇÁ¸¦ ºüÁ®³ª°¥¶§ »ç¿ëÇÑ´Ù. ¿¹Á¦ {{{ while [ $a -eq 10 ] do if [ $a -eq 5 ]; then break fi done }}} === continue === Á¦¾î¹®À̳ª Á¶°Ç¹®ÀÇ Ã³À½À¸·Î µ¹¾Æ°¡¼­ ´Ù½Ã¼öÇàÇÑ´Ù. ¿¹Á¦ {{{ while [ $a -eq 10 ] do if [ $a -eq 5 ]; then continue fi done }}} === : ¸í·É === Àǹ̾ø´Â ¸í·É. ³í¸®°ª true¸¦ ´ë½ÅÇØ ¾²±âµµ ÇÑ´Ù. === . ¸í·É === . ¸í·ÉÀ» »ç¿ëÇϸé ÇöÀç ½©¿¡¼­ ¸í·ÉÀ» ½ÇÇà½ÃŲ´Ù ±×·¯¹Ç·Î ½ÇÇàµÈ ¸í·ÉÀÇ °á°ú¸¦ º» ÇÁ·Î±×·¥¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¸é A ¶ó´Â ½ºÅ©¸³Æ®¿¡¼­ B¶ó´Â ½ºÅ©¸³Æ®¸¦ ±×³É ½ÇÇàÇÒ °æ¿ì B¿¡¼­ÀÇ º¯È­(ȯ°æº¯¼ö µî)´Â A¿¡°Ô ¾Æ¹«·± ¿µÇâµµ ¹ÌÄ¡Áö ¾Ê´Â´Ù. ±×·¯³ª . ¸í·ÉÀ» »ç¿ëÇؼ­ ½ÇÇàÇϸé B¿¡¼­ÀÇ º¯È­°¡ A¿¡µµ ¿µÇâÀ» ¹ÌÄ£´Ù. === echo === ¹®ÀåÀ» Ãâ·ÂÇÑ´Ù. ÀÚµ¿À¸·Î °³Ç๮ÀÚ°¡ »ðÀԵȴÙ. (´ÙÀ½ ÁÙ·Î ³Ñ¾î°£´Ù) === eval === ÀÎÀÚÀÇ ½ÇÁ¦ °ªÀ» ±¸Çϴµ¥ »ç¿ëÇÑ´Ù. {{{ foo=10 x=foo y='$'$x echo $y }}} ÀÌ ¿¹¸¦ ½ÇÇàÇØ º¸¸é $foo°¡ Ãâ·ÂµÈ´Ù {{{ foo=10 x=foo eval y='$'$x echo $y }}} ÀÌ ¿¹¿¡¼­´Â $fooÀÇ °ª Áï 10 ÀÌ Ãâ·ÂµÈ´Ù. eval¸í·ÉÀº ¿øÇÏ´Â ¹®ÀÚ¿­µéÀ» Á¶ÇÕÇؼ­ º¯¼ö¸¦ ¾×¼¼½º ÇÒ ¼ö ÀÖ´Ù. === exec === ÇöÀç ½©À» ´Ù¸¥ ÇÁ·Î±×·¥À¸·Î ´ëüÇÑ´Ù. ¿¹Á¦ {{{ exec csh }}} === exit n === ÇöÀç ½©À» Á¾·áÇÑ´Ù. Á¾·á½Ã n °ªÀ» ¸®ÅÏÇÑ´Ù. === export === ÇØ´ç ½©¿¡¼­ ÆÄ»ýµÈ ÀÚ½Ä ÇÁ·Î¼¼½º¿¡¼­ exportÇÑ È¯°æº¯¼ö´Â º»·¡ ½©¿¡¼­ °ü¸®ÇÑ´Ù. === expr === Ç¥Çö½ÄÀÇ °ªÀ» ±¸ÇÑ´Ù. {{{ x=`expr 1 + 2` }}} ¿äÁòÀº exprº¸´Ù´Â `$((°è»ê½Ä))` ±¸¹®À» ¸¹ÀÌ »ç¿ëÇÑ´Ù. === printf === C ¾ð¾îÀÇ printf¸í·É°ú Èí»çÇÏ´Ù. Çü½Ä: {{{ printf "Format String" arg1 arg2 arg3 ... }}} === return === ½© ÇÔ¼ö¿¡¼­ °ªÀ» ¹Ýȯ ÇÒ ¶§ ¾²ÀδÙ. 0Àº ¼º°øÀ» 1~125±îÁö´Â ½© ¿¡·¯Äڵ带 ³ªÅ¸³½´Ù. === set === ½© ³»ºÎ¿¡¼­ ¸Å°³ ÀÎÀÚ¸¦ ¼³Á¤ÇÑ´Ù. setÀÇ ÀÎÀÚ·Î ¾²ÀÎ ¹®ÀÚ¿­Àº °ø¹é¿¡ ÀÇÇØ `$1` ºÎÅÍ Â÷·Ê´ë·Î ´ëÀԵȴÙ. ¿¹Á¦ {{{ #!/bin/sh echo $# set $(ls) echo $# }}} °á°ú´Â {{{ 0 22 }}} ÀÌ´Ù. (22´Â ÇÊÀÚÀÇ ls °á°úÀÇ °¹¼öÀÌ´Ù.) ù¹ø° 0´Â ÀÌ ½ºÅ©¸³Æ®¿¡ Àμö°¡ ¾øÀ¸¹Ç·Î 0ÀÌ°í set $(ls) ¿¡ ÀÇÇؼ­ ÀμöÀÇ °¹¼ö°¡ 22°³·Î ´Ã¾ú´Ù. === shift === ½©ÀÇ ÀÎÀÚ¸¦ ÇÑÀÚ¸®¾¿ ¾Æ·¡·Î(n -> 1 ·Î) À̵¿½ÃŲ´Ù. ¿¹Á¦ {{{ #!/bin/sh echo $1 shift echo $1 shift 5 echo $1 }}} ½ÇÇà {{{ #./myscript 1 2 3 4 5 6 7 8 9 0 1 2 7 }}} === trap === ½©ÀÇ ½ÇÇ൵Áß ½Ã±×³ÎÀ» ó¸®ÇÏ´Â ½Ã±×³Î 󸮱⸦ ¸¸µå´Â ¿ªÇÒÀ» ÇÑ´Ù. Çü½Ä: {{{ trap command signal }}} ½© ½ºÅ©¸³Æ®´Â À§¿¡¼­ ¾Æ·¡·Î ½ÇÇàµÇ¹Ç·Î º¸È£ÇÏ·Á´Â ºÎºÐ ÀÌÀü¿¡ trap ¸í·ÉÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. trap Á¶°ÇÀ» ±âº»À¸·Î »ç¿ëÇÏ·Á¸é ¸í·É¿¡ - ¸¦ ³ÖÀ¸¸é µÈ´Ù. ½ÅÈ£¸¦ ¹«½ÃÇÏ·Á¸é '' ºó ¹®ÀÚ¿­À» ÁØ´Ù. === unset === º¯¼ö³ª ÇÔ¼ö¸¦ Á¦°ÅÇÑ´Ù. == ¸í·É ½ÇÇà == ¿ÜºÎ ¸í·ÉÀÇ ½ÇÇà °á°ú¸¦ º¯¼ö¿¡ Áý¾î³Ö¾î º¯¼öÀÇ °ªÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. Çü½Ä: {{{ x = $(¸í·É) }}} ÀÌ·¸°Ô º¯¼ö¿¡ °á°ú¸¦ ³ÖÀº ÈÄ¿¡´Â ÀÌ º¯¼ö¸¦ ÀϹݹ®ÀÚ¿­·Î »ý°¢ÇÏ°í ¿øÇÏ´Â °¡°øÀ» Çؼ­ °á°ú¸¦ ¾ò¾î³¾ ¼ö ÀÖ´Ù. À§¿¡¼­ º¸¾Ò´ø ¸Å°³º¯¼ö È®ÀåÀ̳ª set¸í·ÉÀ» ÀÌ¿ëÇؼ­ ¿øÇÏ´Â ºÎºÐÀ» ÃßÃâÇØ ³»¸é ±×¸¸ÀÌ´Ù. == ½© ½ºÅ©¸³Æ® ³»ºÎ¿¡¼­ ¸í·É¿¡ ÀÔ·Â Àü´ÞÇϱâ (Here Documents) == ÀÌ ±â´ÉÀº ½© ³»ºÎ¿¡¼­ ¸í·É¾î¿¡ ÀÔ·ÂÀ» Àü´ÞÇÏ´Â ¹æ¹ýÀÌ´Ù. Àü´ÞµÈ ÀÔ·ÂÀº ¸¶Ä¡ Å°º¸µå¿¡¼­ ´­·ÁÁø °Íó·³ ¹ÝÀÀÇÑ´Ù. Çü½Ä: {{{ ¸í·É << Á¾·á¹®ÀÚ¿­ ÀԷ°ª..... Á¾·á¹®ÀÚ¿­ }}} ¿¹Á¦: ÀÚµ¿À¸·Î ¸ÞÀÏÀ» º¸³»´Â ½ºÅ©¸³Æ® {{{ #!/bin/sh mail $1 << myscript This is Header This is Body . myscript }}} == µð¹ö±ë Çϱâ == ½© ÇÁ·Î±×·¡¹Ö ½Ã °£´ÜÇÏ°Ô µð¹ö±ëÇÏ´Â ¹æ¹ýÀ» ¼Ò°³ÇÕ´Ï´Ù. === ½© ¿É¼Ç === * `sh -n ½ºÅ©¸³Æ®` : ¹®¹ý ¿¡·¯¸¸À» °Ë»ç, ¸í·ÉÀ» ½ÇÇàÇÏÁö ¾ÊÀ½ * `sh -v ½ºÅ©¸³Æ®` : ¸í·ÉÀ» ½ÇÇàÇϱâ Àü¿¡ ¿¡ÄÚ * `sh -x ½ºÅ©¸³Æ®` : ¸í·ÉÁÙ¿¡¼­ ó¸®ÇÑ ´ÙÀ½ ¿¡ÄÚ === set ¿É¼Ç === À§ÀÇ ½© ¿É¼ÇÀº ¾Æ·¡¿Í °°ÀÌ set ¿É¼ÇÀ¸·Îµµ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. * `set -o noexec` ¶Ç´Â `set -n` : ¹®¹ý ¿¡·¯¸¸À» °Ë»ç, ¸í·ÉÀ» ½ÇÇàÇÏÁö ¾ÊÀ½ * `set -o verbose` ¶Ç´Â `set -v` : ¸í·ÉÀ» ½ÇÇàÇϱâ Àü¿¡ ¿¡ÄÚ * `set -o xtrace` ¶Ç´Â `set -x` : ¸í·ÉÁÙ¿¡¼­ ó¸®ÇÑ ´ÙÀ½ ¿¡ÄÚ * `set -o nounset` ¶Ç´Â `set -u` : Á¤ÀǵÇÁö ¾ÊÀº º¯¼ö°¡ »ç¿ëµÇ¸é ¿¡·¯ ¸Þ½ÃÁö¸¦ Á¦°øÇÑ´Ù. ¾Æ·¡¿Í °°ÀÌ `set -x`¸¦ ÀÌ¿ëÇÏ¿© ¼Õ½±°Ô ½ÇÇà°úÁ¤À» ÃßÀûÇÒ ¼ö ÀÖ´Ù. (Âü°í·Î set ¿É¼ÇÀ» Ãë¼ÒÇÏ·Á¸é `set +x`¸¦ ÀÔ·ÂÇÏ¸é µÈ´Ù. ´Ù¸¥ ¿É¼Çµµ ¸¶Âù°¡Áö) {{{set -x for str in "test1" "test2" "test3" "test4" do echo $str done }}} °á°ú {{{+ for str in '"test1"' '"test2"' '"test3"' '"test4"' + echo @str @str + for str in '"test1"' '"test2"' '"test3"' '"test4"' + echo @str @str + for str in '"test1"' '"test2"' '"test3"' '"test4"' + echo @str @str + for str in '"test1"' '"test2"' '"test3"' '"test4"' + echo @str @str }}}