############################################################################################################################ # º» ¹®¼­ÀÇ ÀúÀÛ±ÇÀº ³ªÇö±æ º»Àο¡°Ô ÀÖÀ½À» ¾Ë·Áµå¸³´Ï´Ù. # ÀÛ¼ºÀϽà : 2004³â 6¿ù 30ÀÏ # Á¦¸ñ : Shell ProgrammingÀÇ ±âº» # ÀÛ¼ºÀÚ : ³ªÇö±æ # E-Mail : vsnet@naver.com # HomePage : http://www.csnet.pe.kr ############################################################################################################################ ============================================================================================================================ # À¯¿ëÇÑ ¸í·É¾î sh -x : ½ÇÇàµÇ´Â °úÁ¤À» º¸¿©ÁØ´Ù. ldd : ¸í·É¾î°¡ ÂüÁ¶ÇÏ´Â ¶óÀ̺귯¸® ÆÄÀÏ Ãâ·Â strings : ¹ÙÀ̳ʸ® ÆÄÀÏ º¸´Â ¸í·É truss : truss -p PID = ÇÁ·Î¼¼½º°¡ ÇÏ´Â ÇൿÀ» º¼¼ö ÀÖ´Ù truss ls : ls°¡ ½ÇÇàµÇ´Â °úÁ¤À» º¸¿©ÁØ´Ù. ============================================================================================================================ # ÀÏ¹Ý Ç¥Çö½ÄÀÇ ¸ÞŸ ¹®ÀÚ ¸ÞŸ¹®ÀÚ ±â´É ¿ë·Ê ^ ÁÙ ½ÃÀÛ ¾ÞÄ¿ /^love/ $ ÁÙ ³¡ ¾ÞÄ¿ /love$/ . ÇϳªÀÇ ¹®ÀÚ ÀÏÄ¡ /l..e/ * °ø¹éÀ̳ª ¾Õ ¹®ÀÚ ¹Ýº¹ /*love/ [] []Çѹ®ÀÚ ÀÏÄ¡ /[Ll]ove/ [a-z] ÀÏÁ¤ÇÑ ¹üÀ§ ÀÏÄ¡ /[A-Z]ve/ [^] ÀÏÁ¤ÇÑ ¹üÀ§ ÀÏÄ¡ ¾ÊÀ½ /[^A-Z]/ \ Ư¼ö¹®ÀÚ ÀÇ¹Ì Á¦°Å /love\./ \< ´Ü¾îÀÇ ½ÃÀÛ ¾ÞÄ¿ /\ ´Ü¾îÀÇ ³¡ ¾ÞÄ¿ /love\>/ \(..\) ·¹Áö½ºÅÍ¿¡ ÀúÀå(9°³±îÁö) /\(love\)able\1er/ x{m\} ƯÁ¤¹®ÀÚ ÀÏÁ¤ Ƚ¼ö /x\{5\}/ x\{m,\} ƯÁ¤¹®ÀÚ ÀÏÁ¤ Ƚ¼ö¿¡¼­ ¹«ÇÑ´ë /x\{5,\}/ x\{m,n\} ƯÁ¤¹®ÀÚ m-n±îÁö ¹üÀ§ ¹Ýº¹ Ƚ¼ö /x\{5,10\}/ ============================================================================================================================ # grepÀÇ ÀÏ¹Ý Ç¥Çö½Ä ¸ÞŸ ¹®ÀÚ # grepÄڸǵå´Â ÆÄÀÏ ÀüüÀûÀ¸·Î ÀÏ¹Ý Ç¥Çö½ÄÀ» ã¾Æ ÇØ´ç Ç¥Çö½ÄÀÌ Æ÷ÇÔµÈ ¸ðµç ÃâÀ» Ãâ·Â½ÃŲ´Ù. # /usr/xgp4/bin¿¡ Á¸Àç ¸ÞŸ¹®ÀÚ ±â´É ¿ë·Ê ^ ÁÙ ½ÃÀÛ ¾ÞÄ¿ '^love' $ ÁÙ ³¡ ¾ÞÄ¿ 'love$' . ÇϳªÀÇ ¹®ÀÚ ÀÏÄ¡ 'l..e' * °ø¹éÀ̳ª ¾Õ ¹®ÀÚ ¹Ýº¹ '*love' [] []Çѹ®ÀÚ ÀÏÄ¡ '[Ll]ove' [a-z] ÀÏÁ¤ÇÑ ¹üÀ§ ÀÏÄ¡ '[A-Z]ve' [^] ÀÏÁ¤ÇÑ ¹üÀ§ ÀÏÄ¡ ¾ÊÀ½ '[^A-Z]' \ Ư¼ö¹®ÀÚ ÀÇ¹Ì Á¦°Å 'love\.' \< ´Ü¾îÀÇ ½ÃÀÛ ¾ÞÄ¿ '\ ´Ü¾îÀÇ ³¡ ¾ÞÄ¿ 'love\>' \(..\) ·¹Áö½ºÅÍ¿¡ ÀúÀå(9°³±îÁö) '\(love\)able\1er' x{m\} ƯÁ¤¹®ÀÚ ÀÏÁ¤ Ƚ¼ö 'x\{5\}' x\{m,\} ƯÁ¤¹®ÀÚ ÀÏÁ¤ Ƚ¼ö¿¡¼­ ¹«ÇÑ´ë 'x\{5,\}' x\{m,n\} ƯÁ¤¹®ÀÚ m-n±îÁö ¹üÀ§ ¹Ýº¹ Ƚ¼ö 'x\{5,10\}' # grepÀÇ ¿É¼Ç ¿É¼Ç µ¿ÀÛ¼³¸í -b °¢ ÁÙ ¾Õ¿¡ ºí·° ¹øÈ£¸¦ ³Ö´Â´Ù. -c ÀÏÄ¡ÇÏ´Â ÁÙÀÇ Ãâ·Â´ë½Å ÁÙ °¹¼ö¸¦ Ãâ·Â. -h ÆÄÀÏ À̸§À» Ãâ·ÂÇÏÁö ¾Ê´Â´Ù. -i ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö ¾Ê´Â´Ù. -l ÆÐÅÏÀÌ ÀÏÄ¡ÇÏ´Â ÁÙÀÌ ÀÖ´Â ÆÄÀϵéÀÇ À̸§¸¸À» ¸®½ºÆ®·Î Á¦°øÇÑ´Ù. -n °¢ ÁÙ ¾Õ¿¡ ÆÄÀÏ¿¡¼­ À§Â÷ÇÏ´Â ÁÙ ¹øÈ£¸¦ ³Ö´Â´Ù. -s ¿¡·¯ ¸Þ½ÃÁö Àܴ̿ Ãâ·ÂÀ» ÇÏÁö ¾Ê´Â´Ù, ÀÌ ¿É¼ÇÀº exit status¸¦ °Ë»çÇÒ ¶§ À¯¿ë(echo $?) -v ÀÏÄ¡ÇÏÁö ¾Ê´Â Ãâµé¸¸À» Ãâ·ÂÇÑ´Ù. -w ÀÏ¹Ý Ç¥Çö½ÄÀ» ÇϳªÀÇ ´Ü¾î·Î »ý°¢ÇÏ°í °Ë»öÀ» ÇÑ´Ù. # egrepÀÇ »õ·Î¿î ¸ÞŸ¹®ÀÚ ¸ÞŸ¹®ÀÚ ±â´É ¿ë·Ê + ¾Õ¼±¹®ÀÚ ÇѹøÀÌ»ó ¹Ýº¹ '[a-z]+ove' ? ¾Õ¼±¹®ÀÚ ¿µ¹ø ¶Ç´Â Çѹø ¹Ýº¹ 'lo?ve' a|b a³ª b¸¦ ã´Â´Ù. 'love|like' () ±×·ì¹®ÀÚ 'love(able|ly)(ov)+' ============================================================================================================================ # sed Äڸǵå # ¸ðµç ÁÙµéÀº ½ºÅ©¸°À¸·Î ³ª¿Àµµ·Ï ±âº» ¼³Á¤ # ÀÎÅÍ·ºÆ¼ºê ±â´ÉÀÌ ¾ø´Â °£ÆíÇÑ ÆíÁý±â # Çѹø¿¡ ÇÑÁÙ¾¿ ó¸® °á°ú´Â ½ºÅ©¸°À¸·Î Ãâ·Â, ÇöÀç ó¸®Çϰí ÀÖ´Â ÁÙÀ» ÆÐÅÏ ½ºÆäÀ̽ºÀÇ ÀӽùöÆÛ¿¡ ÀúÀå ÄÚ¸Çµå ±â´É a\ ÇöÀçÀÇ ÁÙ¿¡ Çϳª ÀÌ»óÀÇ »õ·Î¿î ÁÙÀ» ºÙÀδÙ(ºÙÀ̱â) c\ ÇöÀçÀÇ ÁÙ¿¡ ÀÖ´Â ÅØ½ºÆ®¸¦ »õ·Î¿î ÅØ½ºÆ®·Î ±³Ã¼ÇÑ´Ù d(»èÁ¦) ÁÙµéÀ» »èÁ¦ÇÑ´Ù ****** i\ ÇöÀçÀÇ ÁÙ À§·Î ÅØ½ºÆ®¸¦ »ðÀÔÇÑ´Ù(»ðÀÔ) h ÆÐÅÏ ½ºÆäÀ̽º¿¡ ÀÖ´Â ³»¿ëÀ» Ȧµù ¹öÆÛ¿¡ º¹»çÇÑ´Ù H ÆÐÅÏ ½ºÆäÀ̽º¿¡ ÀÖ´Â ³»¿ëÀ» Ȧµù ¹öÆÛ¿¡ ºÙÀδ٠g Ȧµù ½ºÆäÀ̽º¿¡ ÀÖ´Â ³»¿ëÀ» ÆÐÅÏ ½ºÆäÀ̽º·Î º¹»çÇÑ´Ù G Ȧµù ½ºÆäÀ̽º¿¡ ÀÖ´Â ³»¿ëÀ» ÆÐÅÏ ½ºÆäÀ̽º·Î ºÙÀδ٠l Ãâ·ÂµÇÁö ¾Ê´Â ¹®ÀÚ¸¦ ¸®½ºÆ®·Î Á¦°øÇÑ´Ù p(Ãâ·Â) ÁÙµéÀ» Ãâ·ÂÇÑ´Ù ****** n(´ÙÀ½) ´ÙÀ½ ÀÔ·ÂÁÙÀ» Àо óÀ½ Äڸǵ尡 ¾Æ´Ñ ´ÙÀ½ Äڸǵå·Î »õÁÙ¹®ÀÚ¸¦ ó¸®ÇÑ´Ù q(Á¾·á) sed¸¦ Á¾·áÇÑ´Ù r ÆÄÀϷκÎÅÍ ÁÙµéÀ» Àд´Ù(ÆÄÀÏ Àбâ) ! ¼±ÅÃµÈ ÁÙµé ¿ÜÀÇ ¸ðµç ÁÙµéÀ» ÇØ´ç Äڸǵ忡 ºÙÀδ٠s(±³Ã¼) ¹®ÀÚ¿­À» ±³Ã¼ÇÑ´Ù ****** , ÁÙÀÇ ¹üÀ§ # ±³Ã¼ Ç÷¡±× ÄÚ¸Çµå ±â´É g ÇÑÁÙ Àüü¿¡ À־ ±³Ã¼¸¦ ½ÃÇàÇÑ´Ù p ÁÙµéÀ» Ãâ·ÂÇÑ´Ù w Ãâ·ÂÀ» ÆÄÀÏ·Î Àü¼ÛÇÑ´Ù(ÆÄÀÏ Ãâ·Â) z Ȧµù ¹öÆÛ¿Í ÆÐÅÏ ½ºÆäÀ̽ºÀÇ ³»¿ëµéÀ» ¼­·Î ±³Ã¼ÇÑ´Ù y(º¯È¯) ÇÑ ¹®ÀÚ¸¦ ´ÙÀ½ ¹®ÀÚ·Î º¯È¯½ÃŲ´Ù # sed ¿É¼Ç -e ´ÙÁß ÆíÁýÀ» °¡´ÉÇÏ°Ô ÇÑ´Ù -f sed ½ºÅ©¸³Æ® ÆÄÀÏ À̸§À» ¾Õ¿¡ ºÙÀδ٠-n µðÆúÆ® Ãâ·ÂÀ» ¾ïÁ¦ÇÑ´Ù ***(ÀÌ ¿É¼ÇÀ» ºÙÀÌ¸é ¹Ýµå½Ã p¸í·ÉÀ» Àû¾î ÁÖ¾î¾ß ÇÑ´Ù)*** # sedÀÇ ÀÏ¹Ý Ç¥Çö½Ä ¸ÞŸ ¹®ÀÚ ¸ÞŸ¹®ÀÚ ±â´É ¿ë·Ê ^ ÁÙ ½ÃÀÛ ¾ÞÄ¿ /^love/ $ ÁÙ ³¡ ¾ÞÄ¿ /love$/ . ÇϳªÀÇ ¹®ÀÚ ÀÏÄ¡ /l..e/ * °ø¹éÀ̳ª ¾Õ ¹®ÀÚ ¹Ýº¹ /*love/ [] []Çѹ®ÀÚ ÀÏÄ¡ /[Ll]ove/ [a-z] ÀÏÁ¤ÇÑ ¹üÀ§ ÀÏÄ¡ /[A-Z]ve/ [^] ÀÏÁ¤ÇÑ ¹üÀ§ ÀÏÄ¡ ¾ÊÀ½ /[^A-Z]/ \ Ư¼ö¹®ÀÚ ÀÇ¹Ì Á¦°Å /love\./ \< ´Ü¾îÀÇ ½ÃÀÛ ¾ÞÄ¿ /\ ´Ü¾îÀÇ ³¡ ¾ÞÄ¿ /love\>/ \(..\) ·¹Áö½ºÅÍ¿¡ ÀúÀå(9°³±îÁö) /\(love\)able\1er/ & °Ë»ö¿­À» ÀúÀå, ±³Ã¼¿­¿¡¼­ ÀçÇö s/love/**&**/ x{m\} ƯÁ¤¹®ÀÚ ÀÏÁ¤ Ƚ¼ö /x\{5\}/ x\{m,\} ƯÁ¤¹®ÀÚ ÀÏÁ¤ Ƚ¼ö¿¡¼­ ¹«ÇÑ´ë /x\{5,\}/ x\{m,n\} ƯÁ¤¹®ÀÚ m-n±îÁö ¹üÀ§ ¹Ýº¹ Ƚ¼ö /x\{5,10\}/ # ´ÙÁß Äڸǵ尡 »ç¿ëµÇ¾î¾ß ÇÏ°í ¶Ç ÁÖ¼ÒµéÀÌ ´Ù¸¥ ÁÖ¼ÒµéÀÇ ¹üÀ§ ¾È¿¡ ³õ¿©¾ß ÇÏ´Â °æ¿ì # ÄڸǵåµéÀ» Áß°ýÈ£ ¾È¿¡ ³Ö°í °¢ ÄڸǵåµéÀ» ´Ù¸¥ ÁÙ¿¡ ÀÔ·ÂÇØ Áְųª ;ÀÇ ±¸ºÐÀ¸·Î Á¾·á½ÃŲ´Ù # !´Â Äڸǵ带 ¹ÝÀü½Ã۱â À§ÇÏ¿© »ç¿ë sed '/Tom/!d' file ex> sed -n '/west/,/east/s/$/**VACA**/p' datafile ex> sed -e '1,3d' -e 's/Hemenway/Jones/' datafile ex> sed '/Suan/ r newfile' datafile ex> sed -n '/north/ w looney' datafile ex> sed '/^north/ a\ --> The North Sales District Has Moved <--' datafile ex> sed '/eastern/ i\ New England Region \ -----------------------------------' datafile ex> sed '/eastern/{n; s/AM/Archile/;}' datafile ex> sed '1,3y/abcdefghigklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' datafile ex> sed '5q' datafile ex> sed '/Lewis/{ s/Lewis/Joseph/; q; }' datafile ex> sed -e '/northeast/h' -e '$G' datafile ex> sed -e '/WE/{h;d;}' -e '/CT/{G;}' datafile(G:Ãß°¡) ex> sed -e '/northeast/h' -e '$g' datafile(g:µ¤¾î¾²±â) ex> sed -e '/Patricia/h' -e '/Margot/x' datafile ============================================================================================================================ # nawk # awk´Â µ¥ÀÌÅ͸¦ Á¶ÀÛÇÏ°í ¸®Æ÷Æ®¸¦ »ý¼º½Ã۴µ¥ »ç¿ëÇÏ´Â ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÌ´Ù # µ¥ÀÌÅʹ ǥÁØÀÔ·Â, ÆÄÀÏ ¶Ç´Â ÇϳªÀÇ ÇÁ·Î¼¼½ºÀÇ Ãâ·Á¿¡¼­ ¿Ã¼ö ÀÖ´Ù # awk´Â ÁÙ ´ÜÀ§·Î ù¹øÂ° ÁÙºÎÅÍ ¸¶Áö¸·±îÁö ÆÄÀÏÀ» ½ºÄµÇÑ´Ù. ±×¸®°í ÁöÁ¤µÈ ÆÐÅÏÀÌ Æ÷ÇÔµÈ ÁÙÀ» ã¾Æ¼­ ¼±ÅÃµÈ µ¿ÀÛ(Áß°ýÈ£) À» °¢ ÁÙ¿¡¼­ ¸ðµÎ ¼öÇàÇÑ´Ù. ÆÐÅÏ¿¡ ´ëÇØ¼­ Ưº°ÇÑ µ¿ÀÛÀ» ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ÆÐÅÏÀÌ Æ÷ÇÔµÈ ÁÙµéÀ» ´Ü¼øÈ÷ Ãâ·Â½ÃŲ´Ù ¸¸¾à µ¿ÀÛÀº ÁöÁ¤µÇ¾î Àִµ¥ ÆÐÅÏÀÌ ÁöÁ¤µÇÁö ¾ÊÀº °æ¿ì¿¡´Â ÇØ´ç µ¿ÀÛ¿¡ ÀÇÇØ¼­ ÁöÁ¤µÈ ¸ðµç ÀÔ·Â Áٵ鿡 ´ëÇØ µ¿ÀÛÀÌ Ã³¸®µÈ´Ù # ÆÄÀÏ·Î ºÎÅÍ ÀÔ·Â nawk 'pattern' filename nawk '{action;}' filename nawk 'pattern {action;}' filename # awkÁö½Ã´Â ÆÐÅÏ, ¾×¼Ç ¶Ç´Â ÀÌµé µÑÀÇ È¥ÇÕÀ¸·Î ÀÌ·ç¾îÁø´Ù. ÆÐÅÏÀº Ưº°ÇÑ ÇüÀÇ Ç¥Çö½ÄÀ¸·Î ÀÌ·ç¾îÁø ¹®Àå ¾×¼ÇÀº ;À̳ª »õÁÙ¹®ÀÚ·Î ±¸ºÐµÈ Çϳª ÀÌ»óÀÇ ¹®ÀåµéÀ̳ª Áß°ýÈ£¾È¿¡ Æ÷ÇÔµÈ ¹®Àåµé·Î ±¸¼ºµÈ´Ù, ÆÐÅÏÀº Áß°ýÈ£¿¡ Æ÷ÇԵɼö ¾øÀ¸¸ç // »çÀÌ¿¡ ¿Í¾ß ÇÑ´Ù # Äڸǵå·Î ºÎÅÍ ÀÔ·Â command | nawk 'pattern' command | nawk '{action;}' command | nawk 'pattern {action;}' # print ÇÔ¼ö(printf, sprinf»ç¿ë °¡´É) # ½°Ç¥´Â Ãâ·ÂÇÊµå ±¸ºÐÀÚ(OFS)°ªÀ¸·Î Æò°¡, ±âº»Àº ½ºÆäÀ̽º # print ¿¡½ºÄÉÀ̽º ½ÃÄö½º \b ¹é½ºÆäÀ̽º \f ÆûÇǵå \n »õÁÙ \r ij¸®Áö ¸®ÅÏ \t ÅÇ \\ \ # printf ÇÔ¼ö = C¾ð¾î¿¡¼­ »ç¿ëÇß´ø °Í°ú °°À½ # ÆÄÀÏ ³»ÀÇ awk Äڸǵå = -f¸¦ ºÙÀ̰í À̸§ µÚ¾î ÀÔ·ÂÆÄÀÏÀ» ÁöÁ¤ cat awkfile /^Mary/{printf("Hello Mary!\n")} {pirnt $1, $2, $3} nawk -f awkfile employees # $0 = ÇöÁ¦ ·¹ÄÚµå, NR = ·¹ÄÚµå ¹øÈ£, NF = ·¹ÄÚµåÀÇ ÇÊµå ¼ö, NR = ·¹ÄÚµå ¼ö # ÇÊµå ±¸ºÐÀÚ = FSÀÇ µðÆúÆ®´Â È­ÀÌÆ® ½ºÆäÀ̽ºÀÌ´Ù # ¸í·ÉÁÙ¿¡¼­ ÇÊµå ±¸ºÐÀÚ º¯°æ -F'[:\t]' -F: # awkÀÇ ÀÏ¹Ý Ç¥Çö½Ä ¸ÞŸ ¹®ÀÚ ^ ½ºÆ®¸µÀÇ Ã³À½¿¡¼­ ÀÏÄ¡ÇÑ´Ù $ ½ºÆ®¸µÀÇ ³¡¿¡¼­ ÀÏÄ¡ÇÑ´Ù . ´ÜÀÏ ¹®ÀÚ¿¡ ÀÏÄ¡ÇÑ´Ù * Á¦·Î ȤÀº ¸¹Àº ¼±Çà ¹®ÀÚ¿¡ ÀÏÄ¡ÇÑ´Ù + Çϳª ÀÌ»óÀÇ ¼±Çà ¹®ÀÚ¿¡ ÀÏÄ¡ÇÑ´Ù ? Á¦·Î ȤÀº ¼±Ç๮ÀÚ Çϳª¿À ÀÏÄ¡ÇÑ´Ù [ABC] ¹®ÀÚ ¼¼Æ®¿¡ ÀÖ´Â ÇϳªÀÇ ¹®ÀÚ¿Í ÀÏÄ¡ÇÑ´Ù [^ABC] ¹®ÀÚ ¼¼Æ®¿¡ ¾ø´Â ¹®ÀÚ¿Í ÀÏÄ¡ÇÑ´Ù [A-Z] A-Z±îÁö¿¡ ÀÖ´Â ¹®ÀÚ¿Í ÀÏÄ¡ÇÑ´Ù A|B AȤÀº B¿Í ÀÏÄ¡ÇÑ´Ù (AB)+ ABÇϳª ÀÌ»óÀÇ ¼¼Æ®¿Í ÀÏÄ¡ÇÑ´Ù \* ¹®ÀÚ ±×´ë·ÎÀÇ º°Ç¥½Ã¿Í ÀÏÄ¡ÇÑ´Ù & °Ë»ö ½ºÆ®¸µ¿¡¼­ ¹ß°ßµÈ °ÍÀ» Ç¥½ÃÇϱâ À§ÇØ ´ëü ½ºÆ®¸µ¿¡¼­ »ç¿ëµÈ´Ù # match ¿¬»êÀÚ = ~, !~ (¿ÏÀüÇÑ ´Ü¾î°¡ ¾Æ´Ï¿©µµ °Ë»ö) # ºñ±³ Ç¥Çö½Ä <, <=, ==, !=, >=, >, ~, !~ nawk '$3 == 1234' employees nawk '$3 > 5000 {print $1}' employees nawk '$3 ~ /Admin/' employees # Á¶¼± Ç¥Çö½Ä nawk '{max=($1>$2)?$1:$2; print max); filename # »ê¼ú °è»ê +, -, *, /, %, ^ nawk '$3 * $4 > 500' filename # º¹ÇÕ ÆÐÅÏ &&, ||, ! nawk '$3 == 100 || $4 > 50' filename naek '!($2 < 100 && $3 < 20)' filename # ¹üÀ§ ÆÐÅÏ nawk '/tom/, /suzanne/' filename # º¯¼ö nawk '$1 ~ /Tom/ {wage=$2*$3; print wage}' filenamel # BEGINÆÐÅÏ = À̰ÍÀº awk°¡ ÀÔ·Â ÆÄÀÏÁÙÀ» ó¸®Çϱâ Àü¿¡ ¸ÕÁ¦ ½ÇÇà½ÃÄÑ ÁÖ´Â ¾×¼Ç ºí·°À» °®´Â´Ù nawk 'BEGIN{ FS=":"; OFS="\t"; ORS="\n\n"} {print $1, $2, $3}' file # ENDÆÐÅÏ = ÀÔ·ÂÀÇ ¸ðµç ÁÙµéÀÌ Ã³¸®µÈ ´ÙÀ½¿¡¾ß ENDÆÐÅÏÀÌ Ã³¸®µÈ´Ù nawk 'END{ print "The number of records is " NR}' filename nawk '/Mary/{count++} END{print "Mary was found "count"times.")' filename # Script BEGIN { FS=":"; OFS="\t"; print "NAME\t\tDISTRICT\tQUANTITY" print "---------------------------------------------\n" } {print $1"\t " $3"\t\t" $7} {total += $7} /north/{count++} END { print "-------------------------------------------" print "The total quantity is "total print "The number of northern salespersons is "count "." } # ¹æÇâ Àç ÁöÁ¤°ú ÆÄÀÌÇÁ nawk '/north/{print $1, $3, $4 > "distcts"}' datafile =========================================================================================================================== # BOURNE SHELL # ½Ã±×³Î ¹øÈ£ º¸±â = man -s3head signal # trap "" 2 3 = ½Ã±×³ÎÀ» Á¦¾î, Áï 2, 3¹ø ½Ã±×³ÎÀÌ ¹ß»ý½Ã ¹«½ÃÇÑ´Ù.(ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ´Â µ¿¾È ÇÁ·Î±×·¥À¸·Î µé¾î¿À´Â ½Ã±×³Î) # /etc/profileÀº ·Î±×ÀÎÇÒ ¶§¸¸ µ·´Ù(login¸í·É) su - lognameÀº .profile¸¸ µ·´Ù # TERM=vt102 # HOSTNAME=`uname -n` # EDITOR=/usr/ucb/vi # umask 022 # stty erase ^H # PS1="[`logname`@`hostname` \$PWD \!]#"; # PS2=">" # export LD_LIBRARY_PATH, PATH, MANPATH, CDPATH # \ = ¿©·¯ÁÙ¿¡ ÇѸí·É ÀÔ·Â, ; = ÇÑÁÙ¿¡ ¿©·¯¸í·É ÀÔ·Â # echo `` = ¸í·É ½ÇÇà, echo '' = ³»¿ë ±×´ë·Î Ãâ·Â, echo "" = º¯¼ö°ªÀº Ãâ·Â # hash = shellÀÌ ÄÚ¸Çµå °Ë»öÀÇ È¿À²¼ºÀ» °³¼±½Ã۱â À§Çؼ­ »ç¿ëÇÏ´Â ÇØ½Ã Å×À̺íÀ» Á¦¾î hash = table³»¿ë Ãâ·Â, hash vi = hash table¿¡ vi Àý´ë°æ·Î Ãß°¡, hash -r = table Áö¿ò # . = ³»Àå Bourne Shell Äڸǵå, ÇØ´ç ½ºÅ©¸³Æ®¸¦ ÇöÀç shellÀÇ È¯°æ¿¡¼­ ½ÇÇàµÈ´Ù, Áï Á¾¼Ó ÇÁ·Î¼¼½º°¡ »ý¼ºµÇÁö ¾Ê´Â´Ù # ÄÚ¸Çµå ±×·ìÇÎ = (ls; pwd; date) > outputfile # exit status = echo $? # Äڸǵå Á¶°Ç½ÇÇà = cc prgm1.c - prgm1 && prgm1 = ù¹øÂ° ÄڸǵåÀÇ ½ÇÇàÀÌ ¼º°øÇϸé(exit status°¡ 0À̸é) && ´ÙÀ½¿¡ ¿À´Â Äڸǵ嵵 ½ÇÇàµÈ´Ù cc prog.c >& err || mail bob < err = ù¹øÂ° ÄڸǵåÀÇ ½ÇÇàÀÌ ½ÇÆÐÇϸé || ´ÙÀ½¿¡ ¿À´Â Äڸǵ尡 ½ÇÇàµÈ´Ù. # ¹é±×¶ó¿îµå Äڸǵå = &, $!º¯¼ö´Â ¹é±×¶ó¿îµå¿¡ ÀÖ´Â ¸¶Áö¸· ÀÛ¾÷ÀÇ PID¹øÈ£¸¦ °®´Â´Ù # ¸ÞŸ ¹®ÀÚ(¿ÍÀϵåÄ«µå) ¸ÞÀÚ¹®ÀÚ ÀÇ¹Ì \ ´ÙÀ½¿¡ ³ª¿À´Â ¹®ÀÚ¸¦ ´ëÇ¥ÇÑ´Ù & ¹é±×¶ó¿îµå¿¡¼­ ÇÁ·Î¼¼½º¸¦ ÁøÇàÇÑ´Ù ; Äڸǵ带 ±¸ºÐÇØ ÁØ´Ù $ º¯¼ö¸¦ ±³Ã¼ÇØ ÁØ´Ù ? ÇϳªÀÇ ¹®ÀÚ¸¦ °Ë»öÇÑ´Ù [abc] ¹®Àڼ¿¡ ÀÖ´Â ¹®ÀÚµé Áß¿¡ ÀÏÄ¡ÇÏ´Â °ÍÀÌ ÀÖ³ª ã¾ÆÁØ´Ù [!abc] ¹®Àڼ¿¡ ÀÖÁö ¾Ê´Â ¹®ÀÚµé Áß¿¡¼­ ÀÏÄ¡ÇÏ´Â °ÍÀÌ ÀÖ³ª ã¾ÆÁØ´Ù * 0¹øÀÌ»óÀÇ ¹®ÀÚµéÀ» ã¾ÆÁØ´Ù (cmds) ¼­ºê shell¿¡ ÀÖ´Â Äڸǵ带 ½ÇÇà½ÃŲ´Ù {cmds} ÇöÁ¦ shell¿¡ ÀÖ´Â Äڸǵ带 ½ÇÇà½ÃŲ´Ù # ÆÄÀÏÀ̸§ ´ëü ¸ÞŸ¹®ÀÚ ÀÇ¹Ì * 0¹ø ÀÌ»óÀÇ ¹®ÀÚ¸¦ ã´Â´Ù ? ÇϳªÀÇ ¹®ÀÚ¸¦ ã´Â´Ù [abc] a,b,cÁß¿¡¼­ ÀÏÄ¡ÇÏ´Â ¹®ÀÚ°¡ ÀÖ´ÂÁö ã´Â´Ù [a-z] a-z»çÀÌÀÇ ¹üÀ§¿¡ ¿À´Â ¹®ÀÚ°¡ ÀÖ´ÂÁö ã´Â´Ù [!a-z] a-z»çÀÌÀÇ ¹üÀ§¿¡ ¿ÀÁö ¾Ê´Â ¹®ÀÚ°¡ ÀÖ´ÂÁö ã´Â´Ù \ ¿¡½ºÄÉÀÌÇÁ ½ÃÄö½º, ¸ÞŸ ¹®ÀÚÀÇ »ç¿ëÀ» ¾ïÁ¦ÇÑ´Ù # ·ÎÄú¯¼ö´Â ÀÚ½ÅÀÌ »ý¼ºµÈ shell¿¡¼­¸¸ ¾Ë·ÁÁø´Ù. ±×·¡¼­ ¼­ºê shell¿¡ Àü´ÞµÇÁö ¾Ê´Â´Ù. # $Àº ÇØ´ç Àå¼Ò¿¡ ÀúÀåµÈ °ªÀ» ÃßÃâÇϱâ À§ÇØ º¯¼ö ¾Õ¿¡¼­ »ç¿ëµÈ´Ù round=world; echo $rount; x= ; °ªÀ» ¾ÈÁÖ¸é NULL¹®ÀÚ°¡ µé¾î°£´Ù # $$ = Ư¼öº¯¼ö·Î ÇöÀç shellÀÇ PID°ªÀ» °®´Â´Ù echo $$ # Àбâ Àü¿ë º¯¼ö ¼³Á¤ = name=Tom; readonly name; echo $name ÇØÁö´Â unset name; name=Joe # ȯ°æº¯¼ö´Â ÀڽŵéÀÌ »ý¼ºµÈ shell°ú ´õºí¾î ÀÌ shell·ÎºÎÅÍ ³ª¿Â ¾î¶°ÇÑ Á¾¼Ó shellÀ̳ª ÇÁ·Î¼¼½º¿¡¼­µµ »ç¿ëµÉ¼ö ÀÖ´Ù. ȯ°æº¯¼ö´Â ´ë¹®ÀÚ·á Ç¥±â PATH HOME IFS LOGNAME MAIL MAILCHECK MAILPATH PWD PS1 PS2 SHELL # º¯¼öÀÇ °ªÀ» Ãâ·Â½ÃŰ´Â ³»Àå Äڸǵå set, env, setÄڸǵå´Â ·ÎÄà º¯¼ö¿Í Àü¿ªº¯¼ö ¸ðµÎ Ãâ·Â envÄڸǵå´Â Àü¿ª º¯¼ö¸¸À» Ãâ·Â½ÃŲ´Ù # º¯¼ö ¼³Á¤ ÇØÁ¦ = unset name; unset TERM; unsetÄڸǵå´Â º¯¼ö¸¦ shellÀÇ ¸Þ¸ð¸®·ÎºÎÅÍ Á¦°Å½ÃŲ´Ù. # º¯¼ö°ª Ãâ·Â = echo Äڸǵå(bourne shell, c shell¿¡¼­ ÁÖ·Î »ç¿ë, korn shell¿¡¼­´Â printÄÚ¸Çµå »ç¿ë BDS=-n, System V=\b, \c, \f, \n, \r, \t, \v, \\ # º¯¼ö È®Àå ¼öÁ¤ÀÚ = Ư¼ö¼öÁ¤ÀÚ¸¦ »ç¿ëÇØ¼­ º¯¼ö¸¦ Å×½ºÆ®ÇØ º¸°í ¶Ç ¼öÁ¤µµ ÇÒ¼ö ÀÖ´Ù ¼öÁ¤ÀÚ °ª ${variable:-word} º¯¼ö°¡ ¼³Á¤µÇ¾î ÀÖ°í ³Î ¹®ÀÚ°¡ ¾Æ´Ï¶ó¸é °ªÀ» ´ëü(and), ±×·¸Áö ¾ÊÀ¸¸é ¿öµå¸¦ ´ëü(¿µ±¸´Â ¾Æ´Ï´Ù) ${variable:=word} º¯¼ö°¡ ¼³Á¤µÇ¾î Àְųª ¶Ç´Â ³Î¹®ÀÚ°¡ ¾Æ´Ï¶ó¸é °ªÀ» ´ëüÇÑ´Ù(or), ±×·¸Áö ¾ÊÀ¸¸é ¿öµå¸¦ ´ëü(¿µ±¸ÀûÀ¸·Î ´ëü) ${variable:+word} ÀÎÀÚ°¡ ¼³Á¤µÇ¾î ÀÖ°í³Î ¹®ÀÚ°¡ ¾Æ´Ï¶ó¸é À§µå¸¦ ´ëüÇÑ´Ù. ±×·¸Áö¾ÊÀ¸¸é ´ëü°¡ ¾Æ¹«°Íµµ ÀÌ·ç¾î ÁöÁö ¾Ê´Â´Ù(¿µ±¸´Â ¾Æ´Ï´Ù) ${variable:?word} º¯¼ö°¡ ¼³Á¤µÇ¾î ÀÖ°í ³Î ¹®ÀÚ°¡ ¾Æ´Ï¶ó¸é °ªÀ» ´ëüÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ¿öµå¸¦ Ãâ·Â½Ã۰í shellºüÁ®³ª¿Â´Ù #Æ÷Áö¼Ç ÀÎÀÚ = ¸í·ÉÁٷκÎÅÍ ÀÎÀÚ¸¦ Àü´ÞÇϱâ À§Çؼ­ shell½ºÅ©¸³Æ®¿¡¼­ »ç¿ëµÇ°Å³ª ÇÔ¼ö¿¡ Àü´ÞµÇ´Â ÀÎÀÚµéÀ» º¸°üÇϱâ À§Çؼ­ ÇÔ¼ö¿¡¼­ »ç¿ë Æ÷Áö¼Ç ÀÎÀÚ ÀÇ¹Ì $0 ÇöÀç shell½ºÅ©¸³Æ®ÀÇ À̸§À» ÂüÁ¶ÇÑ´Ù $1-$9 1¹ø Æ÷Áö¼ÇÀÎÀÚ¿¡¼­ 9¹ø Æ÷Áö¼Ç ÀÎÀÚ±îÁö °¢°¢ ³ªÅ¸³½´Ù $# Æ÷Áö¼Ç ÀÎÀÚÀÇ °³¼ö·Î Æò°¡µÈ´Ù $* ¸ðµç Æ÷Áö¼Ç ÀÎÀÚµé·Î Æò°¡µÈ´Ù $@ $*¿Í °°Àº Àǹ̸¦ Áö´ÏÁö¸¸ Å«µû¿òÇ¥¸¦ »ç¿ëÇÑ´Ù "$*" "$1, $2, $3"À¸·Î Æò°¡µÈ´Ù "%@" "$1", "$2", "$3"À¸·Î Æò°¡µÈ´Ù # setÄڸǵå·Î Æ÷Áö¼Ç ÀÎÀÚµéÀ» ¼³Á¤½ÃŰ°Å³ª ¸®¼Â ½Ãų ¼ö ÀÖ´Ù. set a b c d e f g h i j k l m n echo $* À¸·Î 9°³°¡ ³Ñ´Â º¯¼öµµ Ãâ·ÂÇÒ¼ö ÀÖ´Ù. echo $10ÇßÀ»°æ¿ì¿£ a0ÀÌ Ãâ·ÂµÈ´Ù set file1 file2 file3 echo \$$# ==> $3 eval echo \$$# ==> file3 # eval Äڸǵå´Â ¸í·ÉÁÙÀÇ Äڸǵ带 ½ÇÇà½Ã۱â Àü¿¡ µÎ¹ø ÇØ¼®À» ÇÑ´Ù # ±âŸµæ¼ö º¯¼ö º¯¼ö ÀÇ¹Ì $ shellÀÇ PID¹øÈ£ - ÇöÀç ¼³Á¤µÈ sh ¿É¼Ç ? ¸¶Áö¸·À¸·Î ½ÇÇàµÈ ÄڸǵåÀÇ exit status°ª ! ¹é±×¶ó¿îµå¿¡¼­ ÁøÇàµÈ ¸¶Áö¸· ÀÛ¾÷ÀÇ PID¹øÈ£ # ÀοëºÎÈ£´Â Ư¼ö¸ÞŸ ¹®ÀÚ¸¦Çؼ® ½Ã¿¡ º¸È£Çϱâ À§ÇØ »ç¿ëµÈ´Ù \, ', " # ÇÔ¼öÀÇ Á¤ÀÇ = ÇÔ¼ö À̸§ ´ÙÀ½¿¡´Â ÇѽÖÀÇ °ýÈ£(())°¡ ¿Â´Ù. ÇÔ¼öÀÇ Á¤ÀÇ ºÎºÐÀº ¼¼¹ÌÄÝ·ÐÀ¸·Î ±¸ºÐµÈ ÀÏ·ÃÀÇ Äڸǵåµé·Î ±¸¼º À̶§ ÄڸǵåµéÀº Áß°ýÈ£ ¾È¿¡ ³õÀÌ°Ô µÈ´Ù. ÇÑÆí ¸¶Áö¸· Äڸǵå´Â ¼¼¹ÌÄÝ·ÐÀ¸·Î ³¡³ª°í Áß°ýÈ£ ¾Õ°ú µÚ¿¡´Â ½ºÆäÀ̽º°¡ ¹Ýµå½Ã »ç¿ëµÇ¾î¾ß ÇÑ´Ù. function_name() { Commands; Commands; } # Ç¥ÁØ ÀÔÃâ·Â ¹æÇâ Àç ÁöÁ¤ ¹æÇâ Àç ÁöÁ¤ ¿¬»êÀÚ µ¿ÀÛ ¼³¸í < ÀԷ¹æÇâÀ» Àç ÁöÁ¤ÇÑ´Ù > Ãâ·ÂÀÇ ¹æÇâÀ» Àç ÁöÁ¤ÇÑ´Ù >> Ãâ·ÂÀ» µÚ¿¡ ºÙ¿©ÁØ´Ù 2> ¿¡·¯ÀǹæÇâÀ» Àç ÁöÁ¤ÇÑ´Ù 1>&2 Ãâ·ÂÀ» ¿¡·¯°¡ °¡´Â ¹æÇâÀ¸·Î Àç ÁöÁ¤ÇÑ´Ù 2>&1 ¿¡·¯¸¦ Ãâ·ÂÀÌ °¡´Â ¹æÇâÀ¸·Î Àç ÁöÁ¤ÇÑ´Ù # execÄڸǵå´Â »õ·Î¿î ÇÁ·Î¼¼½ºÀÇ »ý¼º ¾øÀÌ ÇöÀçÀÇ ÇÁ·Î±×·¥À» »õ·Î¿î ÇÁ·Î±×·¥À¸·Î ´ëüÇÒ¶§ »ç¿ëµÈ´Ù. ex> exec date; exec>tmp; ls; pwd; echo Hello; exec > /dev/tty; echo Hello; more tmp; # Bourne Shell ÇÁ·Î±×·¡¹Ö # #! = ±âÈ£´Â ¸ÅÁ÷ ³Ñ¹ö¶ó°í ºÒ¸°´Ù. Ä¿³ÎÀº À̰ÍÀ» º¸°í ½ºÅ©¸³Æ®ÀÇ °¢ ÁÙµéÀ» ÇØ¼®ÇØ¾ß µÉ ÇÁ·Î±×·¥À» È®ÀÎÇÑ´Ù. ÀÌ ÁÙÀº »óÇ× ½ºÅ©¸³Æ®ÀÇ Ã¹ÁÙ¿¡ ³ª¿Í¾ß ÇÑ´Ù. # # = ÁÖ¼® # »ç¿ëÀÚ ÀÔ·Â Àбâ = read answer setting # »ê¼ú¿¬»ê = Bourne shell¿¡ ³»ÀåµÇ¾î ÀÖÁö ¾Ê´Ù. »ç¿ëÇϰíÀÚ ÇÒ°æ¿ì exprÄڸǵ带 »ç¿ëÇÑ´Ù. ±×¸®°í ºÎµ¿ ¼Ò¼öÁ¡ °è»êÀÏ °æ¿ì awk³ª bc¸¦ »ç¿ëÇÑ´Ù. expr 1+4; # test Äڸǵå = Á¶°Ç Ç¥Çö½ÄÀ» Æò°¡Çϱâ À§ÇØ »ç¿ëµÈ´Ù, Æò°¡ °á°ú´Â Âü:0 °ÅÁþ:1 # test Äڸǵå¿Í []´Â ¼­·Î °°Àº ±â´ÉÀ» °°´Â´Ù # ¹®ÀÚ¿­ Å×½ºÆ® ÀÇ¹Ì string1 = string2 °°´Ù(=ÀüÈÄ¿¡ ½ºÆäÀ̽º°¡ ¿Í¾ß ÇÑ´Ù) string1 != string2 °°Áö ¾Ê´Ù(!=ÀüÈÄ¿¡ ½ºÆäÀ̽º°¡ ¿Í¾ß ÇÑ´Ù) string ¹®ÀÚ¿­ÀÌ ³ÎÀÌ ¾Æ´Ï´Ù -z string ¹®ÀÚ¿­ ±æÀ̰¡ 0ÀÌ´Ù -n string ¹®ÀÚ¿­ÀÇ ±æÀ̰¡ 0ÀÌ ¾Æ´Ï´Ù ¿ë·Ê : test -n $world or [ -n $world ] test tom = sue or [ tome = sue ] # Á¤¼ö Å×½ºÆ® ÀÇ¹Ì int1 -eq int2 °°´Ù int1 -ne int2 °°Áö ¾Ê´Ù int1 -gt int2 Å©´Ù int1 -ge int2 Å©°Å³ª °°´Ù int1 -lt int2 ÀÛ´Ù int1 -le int2 À۰ųª °°´Ù # ÆÄÀÏ Å×½ºÆ® ÀÇ¹Ì -b filename ºí·° Ư¼ö ÆÄÀÏ -c filename ¹®ÀÚ Æ¯¼ö ÆÄÀÏ -d filename µð·ºÅ丮 Á¸Àç -f filename ÀÏ¹Ý ÆÄÀÏÀº Á¸ÀçÇÏÁö¸¸ µð·ºÅ丮´Â Á¸ÀçÇÏÁö ¾ÊÀ½ -g filename set-group-ID°¡ ¼³Á¤µÇ¾î ÀÖÀ½ -k filename stityºñÆ®°¡ ¼³Á¤µÇ¾î ÀÖÀ½ -p filename ÆÄÀÏÀÌ ÆÄÀÌÇÁµÇ¾î ÀÖ´Ù -r filename ÆÄÀÏÀ» ÀÐÀ» ¼ö ÀÖ´Ù -s filename ÆÄÀÏÀÇ Å©±â°¡ 0ÀÌ ¾Æ´Ï´Ù -i filename set-user-ID°¡ ¼³Á¤µÇ¾î ÀÖ´Ù -w filename ÆÄÀÏ¿¡ ¾²±â¸¦ ÇÒ ¼ö ÀÖ´Ù -x filename ÆÄÀÏÀ» ½ÇÇàÇÒ ¼ö ÀÖ´Ù #if Äڸǵå : exit status°ªÀÌ 0À̸é Äڸǵ尡 ¼º°øÀûÀ¸·Î ½ÇÇàµÈ °ÍÀ̵µ thenŰ¿öµå ´ÙÀ½¿¡ ³ª¿À´Â ¹®ÀÚµéÀ» ½ÇÇàÇÑ´Ù # []³ª = ÀüÈÄ¿¡´Â ¹Ýµå½Ã ½ºÆäÀ̽º°¡ ¿Í¾ß ÇÑ´Ù if command then command command fi if test expression then command fi or if [ expression ] then command fi if command then command(s) elif command then command(s) else command(s) fi #!/bin/sh echo -n "how old are you? " read age if [ $age -lt 0 -o $age -gt 120 ] then echo "Welcome to our planet! " exit 1 fi if [ $age -ge 0 -a $age -lt 13 ] then echo "A child is a garden of verses" elif [ $age -ge 12 -a $age -lt 20 ] then echo "Rebel without a cause" elif [ $age -ge 20 -a $age -lt 30 ] then echo "You got the world by the tail!!" elif [ $age -ge 30 -a $age -lt 40 ] then echo "Thirty something..." else echo "Sorry I asked" fi #!/bin/sh file=./testing if [ -d $file ] then echo "$file is a directory" elif [ -f $file ] then if [ -r $file -a -w $file -a -x $file ] then echo "You have read, write, and execute permission on $file." fi else echo "$file is neither a file not a directory." fi # Null Äڸǵå = null ÄڸǵåÀÎ : Äڸǵå´Â ³»Àå ÄڸǵåÀε¥ ¾Æ¹«·± Àϵµ ÇØÁÖÁö ¾Ê´Â´Ù ´Ù¸¸ exit statusÀÇ °ªÀ» 0À¸·Î µÇµ¹¸± »ÓÀÌ´Ù, if ÄÚ¸Çµå ´ÙÀ½¿¡ ¾Æ¹«·± Àϵµ ÇÏÁö ¾Ê¾Æ¾ß ÇÒ¶§ »ç¿ë, nullÄڸǵå´Â loopÄڸǵ带 ¹«ÇÑ ·çÇÁ·Î ¸¸µé±â À§Çؼ­µµ »ç¿ë name=Tom if grep "$name" databasefile > /dev/null 2>&1 then : else echo "$1 not fount in databasefile" exit 1 fi # case Äڸǵå case variable in value1) command(s) ;; value2) command(s) ;; *) command(s) ;; esac #!/bin/sh echo "Which color do you like? \c" read color case "$color" in [Bb]l??) echo "I fell $color" echo "The dky is $color" ;; [Gg]ree*) echo "$color is for trees" echo "$color is for seasick ;; red | orange) echo "$color is very warm! ;; *) echo "No suck color as $color ;; esac echo "Our of case" # here¹®¼­¿Í case Äڸǵå·Î ¸Þ´º »ý¼º #!/bin/sh echo "Select a terminal type: " cat << EOF 1) vt 120 2) wyse50 3) sun EOF read choice case "$choice" in 1) TERM=vt120 export TERM ;; 2) TERM=wyse50 export TERM ;; 3) TERM=sun export TERM ;; esac echo "TERM is $TERM" # for Äڸǵå for variable in word_list do command(s) done #!/bin/sh for pal in Tom Dick Harry Joe do echo "Hi $pal" done echo "Out of loop" #!/bin/sh for person in `cat mylist` do mail $person < letter echo "$person was send a letter" done echo "The letter has been sent" #!/bin/sh dir=/home/jody/ellie/backupscripts for file in memo[1-5] do if [ -f $file ] then cp $file $dir/$file.bak echo "$file is backed up in $dir" fi done #!/bin/sh for name in $* do echo "Hi $name" done #!/bin/sh for file //¿öµå ¸®½ºÆ®°¡ Á¦°øµÇÁö ¾ÊÀ¸¸é Æ÷Áö¼Ç ÀÎÀÚµéÀ» Â÷·Ê·Î ó¸®ÇÑ´Ù. do if [ -f $file -a ! -x $file ] then chmod +x $file echo "$file now has execute permission" fi done # while Äڸǵå while command do command(s) done #!/bin/sh echo "Who was the chief defense lawyer in the OJ case? \c" read answer while [ "$answer" != "Johnny" ] do echo "Wrong try again!" read answer done echo You got it! #!/bin/sh echo "Type q to quit" go=start while [ -n "$go" ] do echo "I Love You.\c" read word if [ "$word" = q -o "$word = Q ] then echo "I'll always love you!" go= fi done # until Äڸǵå = whileÄڸǵå¿Í ºñ½ÁÇÏ°Ô »ç¿ëµÈ´Ù, ÇÏÁö¸¸ untilÀº exit status°ªÀÌ ½ÇÆÐÇßÀ»¶§¸¸ ½ÇÇàÇÑ´Ù. until command do command(s) done #!/bin/sh until who | grep linda do sleep 5 donw talk linda@localhost #!/bin/sh hour=1 until [ $hour -gt 42 ] do case "$hour" in [0-9]|1[0-1]) echo "Good morning!" ;; 12) echo "Lunch time" ;; 1[3-7]) echo "Siesta time." ;; *) echo "Good night" ;; esac hour=`expr $hour + 1` done # ·çÇÁÁ¦¾î Äڸǵå = shift, break, continue # shiftÄڸǵå = ÀÎÀÚ ¸®½ºÆ®ÀÇ ¿ä¼Ò¸¦ ¿ÞÂÊÀ¸·Î ƯÁ¤ Ƚ¼ö¸¸Å­ À̵¿½ÃŲ´Ù, °ªÀ» ÁÖÁö ¾ÊÀ¸¸é ÀÎÀÚ ¸®½ºÆ®ÀÇ ÀÚ¸®¸¦ Çѹø¸¸ À̵¿½ÃŲ´Ù, ¸®½ºÆ®ÀÇ ÀÚ¸® À̵¿ÀÌ ³¡³ª¸é ¹Ð¸° ÀÎÀÚµéÀº ¿µ±¸ÀûÀ¸·Î »èÁ¦ #!/bin/sh while [ $# -gt 0 ] do echo $* shift done # doita b c d e a b c d e b c d e c d e d e e # I/O “‡Çâ ÀçÁöÁ¤°ú ¼­ºê shell # ·çÇÁÀÇÃâ·ÂÀ» ÆÄÀÏ·Î ¹æÇâ ÀçÁöÁ¤ done > looney done < memo > looney # ·çÇÁÀÇ Ãâ·ÂÀ» UNIX Äڸǵå·Î ÆÄÀÌÇÎ done | sort -n # ¹é±×¶ó¿îµå¿¡¼­ÀÇ ·çÇÁ ±¸µ¿ done & # exec Äڸǵå¿Í ·çÇÁ # IFS¿Í ·çÇÁ # ÇÔ¼ö # 1, Bourne shellÀº ÀÔ·ÂÇÑ ¸í·ÉÀÌ ³»Àå ÄÚ¸àµåÀÎÁö, ÇÔ¼öÀÎÁö ¾Æ´Ï¸é µð½ºÅ© »ó¿¡¼­ ã¾ÆÁö´Â ½ÇÇà ÇÁ·Î±×·¥ÀÎÁö¸¦ °áÁ¤ÇÑ´Ù # 2, ÇÔ¼ö´Â »ç¿ëµÇ±â Àü¿¡ Á¤ÀǵǾî¾ß ÇÑ´Ù # 3, ÇÔ¼ö´Â ÇöÀç ȯ°æ¿¡¼­ ±¸µ¿µÈ´Ù, ±×·¡¼­ ÇÔ¼ö¸¦ È£ÃâÇÑ ½ºÅ©¸³Æ®¿Í º¯¼ö¸¦ °øÀ¯ÇÑ´Ù. ÀÎÀÚµéÀ» Æ÷Áö¼Ç ÀÎÀÚ·Î ÁöÁ¤ÇÔÀ¸·Î½á À̰͵éÀ» ÇÔ¼ö¿¡ Àü´ÞÇÒ ¼ö ÀÖ´Ù. ÇÔ¼ö¿¡¼­ exit Äڸǵ带 »ç¿ëÇϸé Àüü ½ºÅ©¸³Æ®¸¦ Á¾·á½Ãų ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ÇÔ¼öÀÇ ÀÔ·Â À̳ª Ãâ·ÂÀÌ ¹æÇâ ÀçÁöÁ¤µÇ°Å³ª ÇÔ¼ö°¡ ¹éÄÚ¿ìÆ®¿¡ µé¾î°¡ ÀÖÀ¸¸é ¼­ºê shellÀÌ »ý¼ºµÇ¾î ÇÔ¼ö, ÀÌÀÇ º¯¼ö ¹× ÇöÀç ÀÛ¾÷ µð·ºÅ丮´Â ¼­ºê shell¿¡¼­¸¸ À¯È¿ÇÏ°Ô µÈ´Ù. ÇÔ¼ö ¾È¿¡¼­ ¼³Á¤µÈ º¯¼öµéÀº ÇÔ¼ö°¡ Á¾·áÇÏ¸é ´õ ÀÌ»ó »ç¿ëµÉ ¼ö ¾ø´Ù. ±×¸®°í µð·ºÅ丮°¡ º¯°æµÇ¾î ÀÖ´Ù¸é ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡ ÀÖ¾ú´ø °æ·Î·Î ´Ù½Ã µÇµ¹¾Æ °£´Ù. Áï ÇÔ¼ö¸¦ È£ÃâÇϸ鼭 ½ºÅ©¸³Æ®¿¡¼­ ¶°³µ´ø ÀÚ¸®·Î µÇµ¹¾Æ°¡´Â °ÍÀÌ´Ù. # 4, return ¹®Àº ÇÔ¼ö ³»¿¡¼­ °¡Àå ÃÖ±Ù¿¡ ½ÇÇàµÇ¾ú´ø ÄڸǵåÀÇ exit status°ªÀ̳ª ÁÖ¾îÁø ÀÎÀÚÀÇ °ªÀ» µÇµ¹¸°´Ù. 255³ÑÁö ¸øÇÔ # 5, ÇÔ¼ö´Â ÀÚ½ÅÀÌ Á¤ÀÇµÈ shell¿¡¼­¸¸ À¯È¿ÇÏ´Ù, ÇÔ¼ö´Â ´Ù¸¥ ¼­ºê shell¿¡ ¿¢½ºÆ÷Æ® µÉ ¼ö ¾ø´Ù, ÇÑÆí ÆÄÀÏ¿¡ ÀúÀåµÈ ÇÔ¼ö µéÀ» ½ÇÇàÇÒ ¶§¿¡´Â Å䯮 ÄڸǴٸ¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù # 6, ÇÔ¼ö¿Í ÀÌÀÇ Á¤ÀǸ¦ Ãâ·Â½ÃÄÑ º¸·Á¸é set Äڸǵ带 »ç¿ëÇÑ´Ù. # 7, Æ®·¦Àº º¯¼ö¿Í ¸¶Âù°¡Áö·Î ÇÔ¼ö ³»¿¡¼­ Àü¿ªÀÌ´Ù. ±×·¡¼­ ½ºÅ©¸³Æ®¿Í È£ÃâµÈ ÇÔ¼ö¿¡¼­ ¸ðµÎ »ç¿ëµÉ ¼ö ÀÖ´Ù Áï, ÇÔ¼ö¿¡¼­ Á¤ÀÇµÈ Æ®·¦ÀÌ ½ºÅ©¸³Æ®¿¡ ÀÇÇØ¼­ °øÀ¯µÉ ¼ö ÀÖ´Ù. # 8, ÇÔ¼ö°¡ ´Ù¸¥ ÆÄÀÏ¿¡ ÀúÀåµÇ¾î ÀÖÀ¸¸é µµÆ® Äڸǵ带 »ç¿ëÇØ À̸¦ ÇöÀç ½ºÅ©¸³Æ®¿¡ ·Îµå ½Ãų¼ö ÀÖ´Ù function_name() { command; command; } # ÇÔ¼ö ¼³Á¤ ÇØÁ¦ = unset function_name # ÇÔ¼ö ÀÎÀÚ¿Í ¸®Åϰª = ÇÔ¼ö´Â ÇöÀç shell¿¡¼­ ½ÇÇà, ÇÔ¼ö¿¡¼­ ȯ°æ º¯È­¸¦ ½ÃŰ¸é ±× º¯°æ »çÇ×ÀÌ shell¿¡¼­µµ Àû¿ë Æ÷Áö¼Ç ÀÎÀÚ´Â ÇÔ¼ö ³»¿¡¼­¸¸ À¯È¿, return Äڸǵå´Â ÇÔ¼ö¸¦ Á¾·á½Ã۰í ÇÔ¼ö°¡ È£ÃâµÈ ´ç½Ã¿¡ Áß´Ü µÇ¾ú´ø ÇÁ·Î±×·¥ ºÎºÐÀ¸·Î º¹±Í return¿¡ ƯÁ¤ÇÑ °ªÀ» ÁÖÁö ¾ÊÀ¸¸é exit status°ªÀÌ µÈ´Ù, ƯÁ¤ °ªÀÌ ÁöÁ¤µÇ¸é ?º¯¼ö¿¡ ÀúÀå #!/bin/sh square() { sq=`expr $1 \* $1` echo "Number to be squared is $1." echo "The result is $sq" } echo "Give me a number to square" read number value_returned=`sqare $number` echo "$value_returned" # ÇÔ¼ö´Â Á¾Á¾ .profileÆÄÀÏ¿¡ ÀúÀåµÈ´Ù. ±×·¡¼­ »ç¿ëÀÚ°¡ ·Î±×ÀÎÇϸé ÀÚµ¿ÀûÀ¸·Î Á¤ÀǵȴÙ. ÇÏÁö¸¸ ¿¢½ºÆ÷Æ® µÉ¼ö´Â ¾ø´Ù. ÇÏÁö¸¸ ´Ù¸¥ ÆÄÀÏ¿¡ ÀúÀå½Ãų ¼ö´Â ÀÖ´Ù. ±×·± ´ÙÀ½ ÇÔ¼ö°¡ ÇÊ¿äÇÒ ¶§ µµÆ® Äڸǵ带 »ç¿ëÇØ¼­ ÇÁ·Î±×·¥ ³»¿¡¼­ ÇÔ¼öÀÇ Á¤ÀǸ¦ Ȱ¼ºÈ° ½Ãų ¼ö ÀÖ´Ù. [looney@cnm /export/home/looney/Bourne 560] # more ./.dbfunctions addon() { while true do echo "Adding information " echo "Type the full name of employee " read name echo "Type address for employee " read name echo "Type start dote for employee (4/10/88) :" read startdate echo $name:$address:$startdate echo "Is thie correct? \c " read ans case "$ans" in [Yy]*) echo "Adding info..." echo $name:$address:$startdate>>datafile sort -u datafile -o datefile echo "Do you want to go back to the main menu? \c " read ans if [ $ans = Y -o $ans = y ] then return else continue fi ;; *) echo "Do you want to try again? " read answer case "$answer" in [Yy]*) continue;; *) exit;; esac ;; esac done } [looney@cnm /export/home/looney/Bourne 564] # more mainprog #!/bin/sh datafile=$HOME/Bourne/datafile . ./.dbfunctions if [ ! -f $datafile ] then echo "`basename $datafile` does not exist" 1>&2 exit 1 fi echo "select one: " cat << EOF [1] Add Info [2] Delete Info [3] Update Info [4] Exit EOF read choice case $choice in 1) addon;; 2) delete;; 3) update;; 4) echo "Bye" exit 0;; *) echo "bad Choice" exit 2;; esac echo Returned Form functions call echo The Name is $name # ½Ã±×³Î Æ®·¡ÇÎ = ÇÁ·Î±×·¥ÀÌ ±¸µ¿µÇ°í ÀÖÀ»¶§ Control-C³ª Control-\۸¦ ´©¸£¸é ½Ã±×³ÎÀÌ µµÂøÇÏ´Â µ¿½Ã¿¡ ÇÁ·Î±×·¥ÀÌ Á¾·áµÈ´Ù trap Äڸǵå´Â ÇÁ·Î±×·¥ÀÌ ½Ã±×³ÎÀ» ¹ÞÀ» ¶§ ´ëó ¹æ¹ýÀ» Á¦¾îÇÑ´Ù trap Äڸǵå´Â shell·Î ÇÏ¿©±Ý ½Ã±×³ÎÀÌ µµÂøÇϸé ÇöÀç ±¸µ¿µÇ°í ÀÖ´Â Äڸǵ带 Á¾·á½Ã۵µ·Ï ¸í·ÉÇÑ´Ù trap ÄÚ¸Çµå ´ÙÀ½¿¡ ÄڸǵåµéÀÌ ÀÎ¿ë ºÎÈ£ ¾Æ³ß ¿À¸é ƯÁ¤ ½Ã±×³ÎÀÌ µµÂøÇÒ ¶§ À̵é ÄڸǵåµéÀÌ ½ÇÇàµÈ´Ù À̶§ shellÀº Äڸǵ带 µÎ¹ø Àд´٠# kill -l·Î ¸ðµç ½Ã±×³Î ¸®½ºÆ®¸¦ º¼¼ö ÀÖ´Ù. trap 'command; command' signal-number trap 'rm tmp*; exit1' 1 2 15' # ½Ã±×³Î ¼³Á¤ ÇØÁ¦ = trap 2, trap 'trap 2' 2 # ½Ã±×³Î ¹«½Ã = trap " " 1 2 # µð¹ö±ë ÄÚ¸Çµå ¿É¼Ç µ¿ÀÛ¼³¸í sh -x scriptname ¿¡ÄÚ¿ì ¿É¼Ç ½ÇÇàµÇ±â Àü¿¡ º¯¼ö ´ëü°¡ µÈ »óÅ·Π½ºÅ©¸³Æ®ÀÇ °¢ ÁÙÀ» Ãâ·Â½ÃÄÑ ÁØ´Ù sh -v scriptname verbose¿É¼Ç ½ÇÇàµÇ±â Àü¿¡ ½ºÅ©¸³Æ®¿¡ ÀÔ·ÂµÈ »óÅ·Π°¢ ÁÙÀ» Ãâ·Â½ÃÄÑ ÁØ´Ù sh -n scriptname noexec¿É¼Ç ½ºÅ©¸³Æ®ÀÇ °¢ ÁÙÀ» ÇØ¼®Àº ÇØ ÁÖÁö¸¸ ½ÇÇàÀº ½ÃŰÁö ¾Ê´Â´Ù set -x echo¿É¼Ç on ½ºÅ©¸³Æ®ÀÇ ½ÇÇà ÃßÀûÇÑ´Ù set +x echo¿É¼Ç off ÃßÀû ±â´ÉÀ» ÇØÁ¦½ÃŲ´Ù # getopts·Î ¸í·ÉÁÙ ¿É¼Ç ó¸® getoptsÇÔ¼ö´Â ls Äڸǵ尡 ¸í·ÉÁÙ ¿É¼Ç°ú ÀÎÀÚ¸¦ ó¸®ÇÏ´Â ¹æ½Ä´ë·Î ¶È°°ÀÌ Ã³¸®¸¦ ÇØÁØ´Ù while getopts :xny: name [looney@cnm /export/home/looney/Bourne 503] # more opts1 #!/bin/sh while getopts xy options do case $options in x) echo "You entered -x as an option";; y) echo "you entered -y as an option";; \?) echo "Please Input option -x or -y";; esac done # eval Äڸǵå¿Í ¸í·ÉÁÙ ÇØ¼® eval ¸ðĵµå´Â ¸í·ÉÁÙÀ» ÇØ¼­Çؼ­ ¸ðµç Shell´ëü¸¦ ¼öÇàÇÑ ´ÙÀ½¿¡ ÇØ´ç ¸í¤©¿©ÁÙÀ» ½ÇÇà½ÃŲ´Ù # Set Äڸǵå¿Í ¿É¼Ç ¿É¼Ç ÀÇ -a ¼öÁ¤µÇ°Å³ª ¿¢½ºÆ÷Æ®µÈ º¯¼öµéÀ» Ç¥½ÃÇÑ´Ù -e Äڸǵ尡 0ÀÌ ¾Æ´Ñ exit status °ªÀ» ³»¸é ÇÁ·Î±×·¥À» Á¾·á½ÃŲ´Ù -f globbing±â´ÉÀÇ ¼³Á¤À» ÇØÁ¦½ÃŲ´Ù -h ÇÔ¼ö°¡ Á¤ÀÇµÉ ¶§ ÇÔ¼öÀÇ À§Ä¡¸¦ ã¾Æ¼­ ÇÔ¼ö·Î ±â¾ï½ÃŲ´Ù. º¸Åë ÇÔ¼ö°¡¤¿ ½ÇÇàµÉ ¶§ ÀÌ·¯ÇÑ µ¿ÀÛÀÌ ÀϾ´Ù -k Äڸǵå À̸§ ¾Õ¿¡ ³ª¿À´Â °Íµé»Ó¸¸ ¾Æ´Ï¶ó ¸ðµç Ű¿öµå ÀÎÀÚµéÀ» ÇϳªÀÇ Äڸǵ带 À§ÇØ È¯°æ¿¡ À§Ä¡½Ãų ¼ö ÀÖ´Ù -n Äڸǵ带 ÀоîÁÖÁö¸¸ ½ÇÇàÀº ½ÃŰÁö ¾Ê´Â´Ù µð¹ö±ëÀ» À§ÇØ »ç¿ëÇÑ´Ù -t ÇϳªÀÇ Äڸǵ带 ÀÐ°í ½ÇÇà½ÃŲ ´ÙÀ½¿¡ Á¾·áÇÑ´Ù -u ´ëü¸¦ ¼öÇàÇÒ ¶§ unsetº¯¼ö¸¦ ¿¡·¯·Î ó¸®ÇÑ´Ù -v shellÀÔ·ÂÀ» ÀоîÁø ´ë·Î Ãâ·Â½ÃŲ´Ù. µð¹ö±ëÀ» À§ÇØ »ç¿ëÇÑ´Ù -x Äڸǵ峪 ÀÎÀÚµéÀ» ½ÇÇàµÇ´Â ´ë·Î Ãâ·Á½ÃŲ´Ù µð¹ö±ëÀ» À§ÇØ »ç¿ëÇÑ´Ù -- Ç÷¡±×¸¦ º¯°æ½ÃŰÁö ¾Ê´Â´Ù # ³»Àå Äڸǵå :, . file, break [n], continue [n], cd echo [args], eval command, exit [n], export [var], hash, kill [-signal process] getopts, login [usename], newgrp [arg], pwd, read [var], readonly [var], return [n], set, shift [n], stop pid, suspend, times, trap [arg][n], type [command], umask [octal digits], unset [name], wait [pid#n], ulimit [options size], umask[mask]