½© ÇÁ·Î±×·¡¹Ö °­Á Âü°í¼­Àû : Ãʺ¸ÀÚ¿ë ¸®´ª½º ÇÁ·Î±×·¡¹Ö ( ´ë¸²ÃâÆÇ»ç, Çѵ¿ÈÆ,À̸¸¿ë¿ª, NEIL MATTHEW, RICHARD STONES Àú ) ¡Ø ³ÝÃ÷°í ¸®´ª½º µ¿È£È¸ 7¿ù Á¦ 5ȸ Á¤±â °ø°³°­Á ÀÚ·á ±Û¾´ÀÌ : À§°æ¼· ( powerhack@netsgo.com ) 1. º¯¼ö . ½©º¯¼ö´Â óÀ½ »ç¿ëµÉ¶§ ¸¸µé¾îÁø´Ù. Áï ¹Ì¸® ¼±¾ðÇÒ ÇÊ¿ä°¡ ¾ø´Ù. . ½©º¯¼ö´Â À¯´Ð½º ¸í·É°ú ¸¶Âù°¡Áö·Î ´ë¼Ò¹®ÀÚ¿¡ ±¸º°ÀÌ ÀÖ´Ù. . ½©º¯¼ö´Â ±âº»ÀûÀ¸·Î µ¥ÀÌÅ͸¦ ¹®ÀÚ¿­·Î ÀúÀåÇÑ´Ù. ¼öÄ¡¸¦ ´ëÀÔÇصµ ½ÇÁ¦ ¼öÄ¡ °¡ ¾Æ´Ñ ¹®ÀÚ¿­ÀÌ ÀúÀåµÈ´Ù. °è»êÀÌ ÇÊ¿äÇÒ °æ¿ì´Â ÀÚµ¿À¸·Î ¼öÄ¡·Î º¯È¯ÇÏ¿© °è»êÈÄ ´Ù½Ã ¹®ÀÚ¿­·ÎÀúÀåµÈ´Ù. . ½©º¯¼öÀÇ °ªÀ» »ç¿ëÇÒ ¶§´Â º¯¼ö¸í¾Õ¿¡ "$" ¸¦ ºÙ¿©¼­ »ç¿ëÇÑ´Ù. . ½©º¯¼ö¿¡ °ªÀ» ´ëÀÔÇÒ¶§´Â "$"¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù. . ½©º¯¼ö´Â ŸÀÔÀÌ ¾ø´Ù. Áï ¾Æ¹« °ªÀ̳ª ´Ù ³ÖÀ» ¼ö ÀÖ´Ù. 1.1 ȯ°æº¯¼ö ½©À» ±âµ¿ÇÏ°í³ª¸é ±âº»ÀûÀ¸·Î ¼ÂÆõǾîÀÖ´Â º¯¼öµéÀÌ´Ù. À¯´Ð½º/¸®´ª½º¿¡´Â ¸¹Àº ȯ°æº¯¼öµéÀÌ ÀÖ°í ÇÊ¿äÇÑ°æ¿ì ÀÌ º¯¼öµéÀ» ¸¶Ä¡ ÀϹݺ¯¼öó·³ °ªÀ» ¾ò¾î¿À°Å³ª ¼Â ÆÃÇÒ ¼ö ÀÖ´Ù. ¿©±â¼­´Â ½©°ú Á÷Á¢ÀûÀÎ °ü·ÃÀÌ Àִ°͸¸ ¼³¸íÇÑ´Ù. $0 - ½ÇÇàµÈ ½© ½ºÅ©¸³Æ® À̸§ $# - ½ºÅ©¸³Æ®¿¡ ³Ñ°ÜÁø ÀÎÀÚÀÇ °¹¼ö $$ - ½© ½ºÅ©¸³Æ®ÀÇ ÇÁ·Î¼¼½º ID 1.2 ÀÎÀÚ º¯¼ö ½©½ºÅ©¸³Æ®¿¡ ÀÎÀÚ¸¦ ³Ñ°ÜÁÙ¶§ ±× ÀÎÀڵ鿡 ´ëÇÑ Á¤º¸¸¦ °¡Áö°í ÀÖ´Â º¯¼öµé. $1~ $nnn : ³Ñ°ÜÁø ÀÎÀÚµé $* : ½ºÅ©¸³Æ®¿¡ Àü´ÞµÈ ÀÎÀÚµéÀ» ¸ð¾Æ³õÀº ¹®ÀÚ¿­. ÇϳªÀÇ º¯¼ö¿¡ ÀúÀåµÇ¸ç IFS ȯ°æº¯¼öÀÇ Ã¹¹ø° ¹®ÀÚ·Î ±¸ºÐµÈ´Ù. $@ : $*°ú °°´Ù. ´Ù¸¸ ±¸ºÐÀÚ°¡ IFSº¯¼öÀÇ ¿µÇâÀ» ¹ÞÁö ¾Ê´Â´Ù. 1.3 ÀϹݺ¯¼ö ÀϹݺ¯¼ö¿¡ Ưº°ÇÑ Á¦¾àÀº ¾ø´Ù. ´Ü ´ë¼Ò¹®ÀÚ ±¸ºÐ¸¸ Á¤È®ÇÏ°Ô ÇØÁÖ¸é µÈ´Ù. ¿¹Á¦ ) #!/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.4 ¿¬»ê º¯¼öÀÇ »ê¼ú¿¬»êÀº »ý°¢ÇÏ´Â°Í Ã³·³ ½±Áö¾Ê´Ù. À§¿¡¼­ ¾ð±ÞÇßµíÀÌ º¯¼ö¿¡´Â ¸ðµç°Í ÀÌ ¹®ÀÚ¿­·Î ÀúÀåµÇ±â ¶§¹®¿¡ ¿¬»êÀÌ ºÒ°¡´ÉÇÏ´Ù. ¿¬»êÀ» À§Çؼ­´Â Á» º¹ÀâÇÑ ÀýÂ÷ ¸¦ °ÅÃÄ¾ß ÇÑ´Ù. º¯¼ö = $((»ê¼ú½Ä)) ÀÌ°ÍÀÌ °¡Àå ´Ü¼øÇÑ ¿¬»ê ±ÔÄ¢ÀÌ´Ù. »ê¼ú½Ä³»¿¡´Â º¯¼ö( $1, $a ¿Í °°Àº ) µµ µé¾î °¥ ¼ö ÀÖ´Ù. »ê¼ú½Ä ³»¿¡ ¼ýÀÚ°¡ ¾Æ´Ñ ¹®ÀÚ¿­, ¶Ç´Â ¹®ÀÚ¿­ÀÌ ´ã°ÜÀÖ´Â º¯¼ö°¡ µé¾î °¡¸é ±×°ÍµéÀº °è»ê¿¡¼­ Á¦¿ÜµÈ´Ù. (Á¤È®È÷ ¸»Çϸé 0 À¸·Î °£ÁÖµÇ¾î ¿¬»êÀÌ ÀÌ·ç¾î ÁöÁö ¾Ê´Â´Ù.) 1.5 ¸Å°³º¯¼ö È®Àå ¸Å°³º¯¼ö È®ÀåÀ̶õ º¯¼öÀÇ °ªÀ» ¹®ÀÚ¿­µîÀ¸·Î ´ëüÇÏ´Â °ÍÀ» ¸»ÇÑ´Ù. ´Ü¼øÇÑ ´ëü»Ó ¾Æ´Ï¶ó º¯¼ö³»ÀÇ ¹®ÀÚ¿­À» Á¶ÀÛÇÏ¿© ¿øÇÏ´Â ¹®ÀÚ¿­¸¸À» ÃßÃâÇÒ ¼öµµ ÀÖ´Ù. Çü½Ä ${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¿¡ ³Ö´Â´Ù. 2. Á¶°Ç ÆÇ´Ü ½© ½ºÅ©¸³Æ®¿¡¼­ Á¶°ÇÆÇ´ÜÀº if ¿Í test ¸í·ÉÀ» È¥ÇÕÇÏ¿© »ç¿ëÇÑ´Ù. ÀϹÝÀûÀÎ ¿¹´Â ´ÙÀ½°ú °°´Ù. if test -f test1 then ... fi -f ´Â ÁÖ¾îÁø ÀÎÀÚ°¡ ÀϹÝÆÄÀÏ À϶§ ÂüÀ̵ȴÙ. test ¸í·ÉÀº [] ·Î ´ëüµÉ ¼ö ÀÖ´Ù. if [ -f test1 ] then ... fi ----------------------------- if [ -f test1 ]; then ... fi 2.1 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 Then ) [ expr1 -ge expr2 ] : expr1 >= expr2 À̸é Âü ( Greater Equal ) [ expr1 -lt expr2 ] : expr1 < expr2 À̸é Âü ( Less Then ) [ expr1 -le expr2 ] : expr1 <= expr2 À̸é Âü ( Less Equal ) [ ! expr ] : expr ÀÌ ÂüÀÌ¸é °ÅÁþ, °ÅÁþÀ̸é Âü [ expr1 -a expr2 ] : expr1 AND expr2 ÀÇ °á°ú ( µÑ´Ù ÂüÀ̸é Âü ) [ expr1 -o expr2 ] : expr1 OR expr2 ÀÇ °á°ú ( µÑÁß Çϳª¸¸ ÂüÀ̸é Âü ) ÆÄÀÏÁ¶°Ç [ -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ÀÇ Çϵ帵ũ ÆÄÀÏÀ̸é Âü 2.2 if ±¸¹® if ¹®Àº Á¶°ÇÀ» ÆÇ´ÜÇÏ¿© ÁÖ¾îÁø ¹®ÀåÀ» ¼öÇàÇÑ´Ù. 1. Çü½Ä 1 ( ´ÜÀÏ if ¹® ) Çü½Ä : if [ Á¶°Ç ] then ¹®Àå1 ¹®Àå2 fi 2. Çü½Ä 2 ( if~else ¹® ) Çü½Ä : if [ Á¶°Ç ] then ¹®Àå3 ¹®Àå4 fi 3. Çü½Ä 3 ( if~elif ¹® ) Çü½Ä : if [ Á¶°Ç ] then ¹®Àå1 ¹®Àå2 elif ¹®Àå3 ¹®Àå4 else ¹®Àå5 ¹®Àå6 fi 2.3 case ±¸¹® ¡Ø ÆÐÅÏ¿¡´Â * ¹®ÀÚ, Áï ¿ÍÀϵåÄ«µå¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. Çü½Ä : case º¯¼ö in ÆÐÅÏ [ | ÆÐÅÏ ] ... ) ¹®Àå ;; ÆÐÅÏ [ | ÆÐÅÏ ] ... ) ¹®Àå ;; .... * ) ¹®Àå ;; easc 2.4 ¸ñ·Ï ¿©·Á¸í·ÉÀ» ½ÇÇàÇÒ¶§ ¾ÕÀÇ ¸í·ÉÀÇ °á°ú¿¡ ÀÇÇؼ­ ´ÙÀ½ÇൿÀÌ °áÁ¤µÇ¾î¾ß ÇÒ °æ¿ì °¡ ÀÖ´Ù. ÀÌ·±°æ¿ì¿¡ 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 } 3. Á¦¾î¹® 3.1 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 3.2 while for ¸í·ÉÀÇ °æ¿ì´Â Ƚ¼ö¸¦ ÁöÁ¤Çؼ­ ·çÇÁ¸¦ ¼öÇàÇϴµ¥´Â ¹®Á¦°¡ ÀÖ´Ù. while ¹®Àº ½ÇÇàȽ¼ö°¡ ÁöÁ¤µÇÁö ¾Ê¾ÒÀ»¶§ Æí¸®ÇÏ´Ù. Çü½Ä : while Á¶°Ç¹® do ¹®Àå done ¿¹Á¦¸¦ º¸ÀÚ. Æнº¿öµå¸¦ ÀÔ·Â¹Þ°í ¸Â´ÂÁö È®ÀÎÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù. echo "Enter Password : " read password1 echo "Retype Password : " read password2 while [ "$password1" != "$password2" ] do echo "Password miss match Try again " echo "Retype Password : " read password2 done echo "OK Password Match complete" ¾î¶»°Ô µ¿ÀÛÇϴ°¡ ? 3.3 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 ^_^" 3.4 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 4. ÇÔ¼ö ½© ½ºÅ©¸³Æ® ³»ºÎ¿¡ ¶Ç´Â ´Ù¸¥ ½ºÅ©¸³Æ®ÆÄÀÏ¿¡ ÇÔ¼ö¸¦ Á¤ÀÇÇØ ³õ°í »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÇÔ¼ö¸¦ »ç¿ëÇϸé Äڵ带 ÃÖÀûÈ­ ÇÒ ¼ö ÀÖ°í, ÄÚµùÀÌ °£°áÇØÁö¸ç,Àç»ç¿ëÀÌ °¡´ÉÇÏ´Ù. ±×·¯³ª ´Ù¸¥ ½ºÅ©¸³Æ® ÆÄÀÏÀ» È£ÃâÇؼ­ ÇÔ¼ö¸¦ ½ÇÇàÇÒ °æ¿ì, °¡´ÉÀº ÇÏÁö¸¸ ½ºÅ©¸³ Æ®ÀÇ ½ÇÇà½Ã°£ÀÌ ±æ¾îÁö°í, ÇÔ¼öÀÇ °á°ú¸¦ Àü´ÞÇÏ´Â °ÍÀÌ ±î´Ù·Ó±â ¶§¹®¿¡ °¡±ÞÀûÀÌ ¸é ¿ÜºÎÆÄÀÏÀÇ ÇÔ¼ö´Â ¾È¾²´Â °ÍÀÌ ÁÁ´Ù. Çü½Ä : Á¤ÀÇ - ÇÔ¼ö¸í () { ¹®Àå 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Àº ÂüÀ¸·Î ³ª¸ÓÁö ¼ýÀÚ´Â °ÅÁþÀ¸·Î ÆǺ°µÈ´Ù. 5. ¸í·É¾î ½©¿¡¼­ ¾µ ¼ö ÀÖ´Â ¸í·É¾î´Â µÎ°¡Áö·Î ³ª´©¾îÁø´Ù. ¸íÇÁ·ÒÇÁÆ® »ó¿¡¼­ ½ÇÇà ½Ãų ¼ö ÀÖ´Â ¿ÜºÎ ¸í·É¾î¿Í ½© ³»ºÎ ¸í·ÉÀÌ´Ù. ³»ºÎ¸í·ÉÀº º¸Åë ½© ³»ºÎ³ª ½© ±¸¹®»ó¿¡¼­ ¾²ÀδÙ. ¿ÜºÎ¸í·ÉÀº ½©¿¡ °ü°è¾øÀÌ »ç¿ëÀÌ °¡´ÉÇÏ´Ù. break Á¦¾î¹®À̳ª Á¶°Ç¹®ÀÇ ·çÇÁ¸¦ ºüÁ®³ª°¥¶§ »ç¿ëÇÑ´Ù. ¿¹) while [ $a -eq 10 ] do if [ $a -eq 5 ]; then break fi done :¸í·É Àǹ̾ø´Â ¸í·É. ³í¸®°ª true¸¦ ´ë½ÅÇØ ¾²±âµµ ÇÑ´Ù. continue Á¦¾î¹®À̳ª Á¶°Ç¹®ÀÇ Ã³À½À¸·Î µ¹¾Æ°¡¼­ ´Ù½Ã¼öÇàÇÑ´Ù. ¿¹) while [ $a -eq 10 ] do if [ $a -eq 5 ]; then continue fi done . ¸í·É . ¸í·ÉÀ» »ç¿ëÇϸé ÇöÀç ½©¿¡¼­ ¸í·ÉÀ» ½ÇÇà½ÃŲ´Ù ±×·¯¹Ç·Î ½ÇÇàµÈ ¸í·ÉÀÇ °á°ú ¸¦ º» ÇÁ·Î±×·¥¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¸é 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 º¯¼ö³ª ÇÔ¼ö¸¦ Á¦°ÅÇÑ´Ù. 6. ¸í·É½ÇÇà ¿ÜºÎ¸í·ÉÀÇ ½ÇÇà °á°ú¸¦ º¯¼ö¿¡ Áý¾î³Ö¾î º¯¼öÀÇ °ªÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. Çü½Ä : x = $(¸í·É) ÀÌ·¸°Ô º¯¼ö¿¡ °á°ú¸¦ ³ÖÀº ÈÄ¿¡´Â ÀÌ º¯¼ö¸¦ ÀϹݹ®ÀÚ¿­·Î »ý°¢ÇÏ°í ¿øÇÏ´Â °¡°øÀ» Çؼ­ °á°ú¸¦ ¾ò¾î³¾ ¼ö ÀÖ´Ù. À§¿¡¼­ º¸¾Ò´ø ¸Å°³º¯¼ö È®ÀåÀ̳ª set¸í·ÉÀ» ÀÌ¿ëÇؼ­ ¿øÇÏ´Â ºÎºÐÀ» ÃßÃâÇØ ³»¸é ±×¸¸ÀÌ´Ù. 7. ½© ½ºÅ©¸³Æ® ³»ºÎ¿¡¼­ ¸í·É¿¡ ÀÔ·Â Àü´ÞÇϱâ ( Here Documents ) ÀÌ ±â´ÉÀº ½© ³»ºÎ¿¡¼­ ¸í·É¾î¿¡ ÀÔ·ÂÀ» Àü´ÞÇÏ´Â ¹æ¹ýÀÌ´Ù. Àü´ÞµÈ ÀÔ·ÂÀº ¸¶Ä¡ Å° º¸µå¿¡¼­ ´­·ÁÁø °Í ó·³ ¹ÝÀÀÇÑ´Ù. Çü½Ä : ¸í·É << Á¾·á¹®ÀÚ¿­ ÀԷ°ª..... Á¾·á¹®ÀÚ¿­ ¿¹Á¦ ) ÀÚµ¿À¸·Î ¸ÞÀÏÀ» º¸³»´Â ½ºÅ©¸³Æ® #!/bin/sh mail $1 << myscript This is Header This is Body . myscript