Bash Programming Introduction Howto Mike G mikkey at dyamo.com.ar Thu Jul 27 09:36:18 ART 2000 ---- ÀÌ ±ÛÀº ´ç½ÅÀÌ ÃÊÁß±Þ ¼Ð ½ºÅ©¸³Æ® ÇÁ·Î±×·¡¹ÖÀ» ½ÃÀÛÇÏ´Â °ÍÀ» µ½°íÀÚ ÇÑ´Ù. °íµµÀÇ ¹®¼­È­¸¦ ÇÏ·Á°í ÇÏ´Â °Ô ¾Æ´Ï´Ù(Á¦¸ñÀ» º¸¶ó). ³ª´Â Àü¹®°¡µµ °í±Þ ¼Ð ÇÁ·Î±×·¡¸Óµµ ¾Æ´Ï´Ù. ´Ù´Â ³»°¡ Á» ´õ ¹è¿ü°í ´Ù¸¥ »ç¶÷µé¿¡°Ô ¾µ¸ð°¡ ÀÖÀ» °ÍÀ̱⿡ ÀÌ ±ÛÀ» ¾²±â·Î °áÁ¤Çß´Ù. ¾î¶² Çǵå¹éµµ - ƯÈ÷ ÆÐÄ¡ ÇüÅ - ȯ¿µÇÑ´Ù. ---- [[TableOfContents]] == ¼Ò°³ == === ÃÖ½ÅÆÇ ±¸Çϱâ === http://en.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html === ¿ä±¸»çÇ× === GNU/Linux ¸í·ÉÇà¿¡ Àͼ÷ÇÏ°í, ±âº» ÇÁ·Î±×·¥°³³äÀÌ ÀÖ´Ù¸é µµ¿òÀÌ µÉ °ÍÀÌ´Ù. ÀÌ ±ÛÀº ÇÁ·Î±×·¡¹ÖÀÇ ¼Ò°³°¡ ¾Æ´Ï¹Ç·Î, ¸¹Àº ±âº» °³³äÀ» ¼³¸íÇÑ´Ù(Àû¾îµµ ½ÃµµÇÑ´Ù) === ÀÌ ¹®¼­ÀÇ »ç¿ë === ÀÌ ¹®¼­´Â ´ÙÀ½ »óȲ¿¡ ¾µ¸ð ÀÖ°Ô ÇÏ·Á ÇÏ¿´´Ù. * ´ç½ÅÀÌ ÇÁ·Î±×·¥¿¡ °üÇØ °³³äÀÌ ÀÖ°í ´ç½ÅÀÌ ¾î¶² ¼Ð ½ºÅ©¸³Æ®¸¦ ½ÃÀÛÇϱ⸦ ¿øÇÑ´Ù. * ´ç½ÅÀº ¼Ð ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇØ ¸ðÈ£ÇÑ °³³äÀ» °¡Áö°í ÀÖ°í ¾î¶² Âü°íÀڷḦ ¿øÇÑ´Ù. * ´ç½ÅÀº ¼Ð ½ºÅ©¸³Æ®¿Í ´ç½Å ÀÚ½ÅÀÇ ¼Ð ½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇϱ⠽ÃÀÛÇÏ´Â °Í¿¡ ´ëÇÑ ÀÇ°ßÀ» º¸±â¸¦ ¿øÇÑ´Ù. * ´ç½ÅÀº DOS / Windows ·Î ºÎÅÍ ÀÌÁÖÇÏ·Á°í Çϰųª ÀÌÁÖÇß°í, ÀÏ°ý󸮸¦ ¸¸µé±â¸¦ ¿øÇÑ´Ù. * ´ç½ÅÀº ¿ÏÀüÇÑ ÄĸÍÀÌ°í °¡´ÉÇÑÇÑ ¸ðµç ÇÏ¿ìÅõ¸¦ ÀÐÀ¸·Á°í ÇÑ´Ù. == ¸Å¿ì °£´ÜÇÑ ½ºÅ©¸³Æ® == === ÀüÅëÀûÀÎ hello world ½ºÆ®¸³Æ® === {{{ #!/bin/bash echo Hello World }}} ÀÌ ½ºÅ©¸³Æ®´Â µü µÎ ÁÙ·Î µÇ¾î ÀÖ´Ù. ù ÁÙÀº ÇÁ·Î±×·¥ÀÌ ÆÄÀÏÀ» ½ÇÇà½ÃÅ°±â À§ÇØ »ç¿ëÇÒ ½Ã½ºÅÛÀ» °¡¸®Å²´Ù. µÑ° ÁÙÀº ÀÌ ½ºÅ©¸³Æ®¿¡ ÀÇÇØ ¼öÇàµÇ´Â ÇൿÀε¥, ±×°ÍÀº Å͹̳ο¡ 'Hello World'¸¦ Ãâ·ÂÇÑ´Ù. ¸¸¾à ´ç½ÅÀÌ ./hello.sh: Command not found. ¿Í °°Àº °ÍÀ» º¸°Ô µÈ´Ù¸é ¾Æ¸¶µµ ù ÁÙÀÌ À߸øµÇ¾úÀ» °ÍÀÏÅÙµ¥, bash°¡ ¾îµð ÀÖ´ÂÁö¿¡ ´ëÇØ ¶Ç´Â ¾î¶»°Ô ´ç½ÅÀÌ ÀÌ ÁÙÀ» ½á¾ß ÇÏ´ÂÁö º¸±â À§ÇØ 'bash¸¦ ã´Â °Í'À» ÇÏ°Ô µÉ °ÍÀÌ´Ù. === ¸Å¿ì °£´ÜÇÑ ¹é¾÷ ½ºÅ©¸³Æ® === {{{ #!/bin/bash tar -cZf /var/my-backup.tgz /home/me/ }}} ÀÌ ½ºÅ©¸³Æ®¿¡¼­´Â Å͹̳ο¡ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÏ´Â ´ë½Å »ç¿ëÀÚ È¨µð·ºÅ丮ÀÇ Å¸¸£º¼À» ¸¸µç´Ù. ÀÌ°ÍÀº »ç¿ëÇÏ·Á°í ÇÏ´Â °Ô ¾Æ´Ï°í, Á»´õ ¾µ¸ð ÀÖ´Â ¹é¾÷ ½ºÅ©¸³Æ®°¡ ÀÌ ¹®¼­¿¡¼­ ³ªÁß¿¡ ³ª¿Â´Ù. == ¸®µð·º¼ÇÀÇ ¸ðµç °Í == === À̷аú ºü¸¥ ÂüÁ¶ === ÆÄÀÏ Áö½ÃÀÚ´Â stdin, stdout, stderr ¼¼ °³°¡ ÀÖ´Ù. ±âº»ÀûÀ¸·Î ´ç½ÅÀº 1. stdout¿¡¼­ ÆÄÀÏ·Î 1. stderr¿¡¼­ ÆÄÀÏ·Î 1. stdout¿¡¼­ stderr·Î 1. stderr¿¡¼­ stdout·Î 1. stderr¿Í stdout ¿¡¼­ ÆÄÀÏ·Î 1. stderr¿Í stdout ¿¡¼­ stdout·Î 1. stderr¿Í stdout ¿¡¼­ stderr·Î ¸®µð·ºÆ®ÇÒ ¼ö ÀÖ´Ù. 1Àº stdoutÀ» 2´Â stderr¸¦ ³ªÅ¸³½´Ù. ÀÌ°ÍÀ» º¸±â À§ÇÑ ÀÛÀº ÁÖ¼®: less ¸í·É¾î·Î ´ç½ÅÀºstdout (ÀÌ°ÍÀº ¹öÆÛ¿¡ ³²À½) °ú stderr°¡ È­¸é¿¡ Ãâ·ÂµÇ´Â °ÍÀ» º¼ °ÍÀÌÁö¸¸, ¹öÆÛ¸¦ °Ë»öÇÏ·Á°í ½ÃµµÇϸé Áö¿öÁø´Ù. === ¿¹: stdout ¿¡¼­ file === ÀÌ°ÍÀº ÇÁ·Î±×·¥ÀÇ Ãâ·ÂÀ» ÆÄÀÏ¿¡ ¾µ °ÍÀÌ´Ù. {{{ ls -l > ls-l.txt }}} ¿©±â¼­ ls-l.txt À̶ó´Â ÆÄÀÏÀÌ »ý¼ºµÉ °ÍÀÌ°í, ±× ÆÄÀÏÀº ´ç½ÅÀÌ ls -l¸¦ ½ÇÇàÇßÀ» ¶§ È­¸é¿¡ º¸°Ô µÇ´Â ³»¿ëÀ» Æ÷ÇÔÇÒ °ÍÀÌ´Ù. === ¿¹: stderr ¿¡¼­ file === ÀÌ°ÍÀº ÇÁ·Î±×·¥ÀÇ stderr Ãâ·ÂÀ» ÆÄÀÏ¿¡ ¾µ °ÍÀÌ´Ù. {{{ grep da * 2> grep-errors.txt }}} ¿©±â¼­ 'grep-errors.txt'À̶ó´Â ÆÄÀÏÀÌ »ý¼ºµÇ°í ´ç½ÅÀº 'grep da *'¸í·ÉÀÇ stderr Ãâ·Â ºÎºÐÀ» º¼ °ÍÀÌ´Ù. === ¿¹: stdout ¿¡¼­ stderr === ÀÌ°ÍÀº ÇÁ·Î±×·¥ÀÇ stderrÃâ·ÂÀ» stdout´ë½Å °°Àº ÆÄÀÏÁö½ÃÀÚ¿¡ ¾µ °ÍÀÌ´Ù. {{{ grep da * 1>&2 }}} ¿©±â¼­, ¸í·ÉÀÇ stdout ºÎºÐÀº stderr·Î º¸³»Áö°í, ´ç½ÅÀº ´Ù¸¥ ¹æ¹ýÀ» ¾Ë°Ô µÉ °ÍÀÌ´Ù. === ¿¹: stderr ¿¡¼­ stdout === ÀÌ°ÍÀº ÇÁ·Î±×·¥ÀÇ stderrÃâ·Â±Û stdout ´ë½Å °°Àº ÆÄÀÏÁö½ÃÀÚ¿¡ ¾µ °ÍÀÌ´Ù. {{{ grep * 2>&1 }}} ¿©±â¼­ ÀÌ ¸í·ÉÀÇ stderr ºÎºÐÀº stdout ·Î º¸³»Áö°í, ´ç½ÅÀÌ less·Î ÆÄÀÌÇÁÇϸé, ´ç½ÅÀº º¸Åë '»ç¶óÁö´Â'(±×°ÍµéÀÌ stderr¿¡ ½áÁø °Í ó·³) ÁÙÀÌ ÇöÀç´Â À¯ÁöµÇ´Â °ÍÀ» º¼ °ÍÀÌ´Ù.(¿Ö³Ä¸é ±×°ÍÀº stdout¿¡ ÀÖÀ¸¹Ç·Î) === ¿¹: stderr ¿Í stdout ¿¡¼­ file === ÀÌ°ÍÀº ÇÁ·Î±×·¥ÀÇ ¸ðµç Ãâ·ÂÀ» ÆÄÀÏ¿¡ ÀúÀåÇÒ °ÍÀÌ´Ù. ÀÌ°ÍÀº ´ç½ÅÀÌ Àý´ë·Î Á¶¿ëÈ÷ ¸í·ÉÀÌ ÁøÇàµÇ±â¸¦ ¿øÇÏ¸é ¶§¶§·Î cron ¿ä¼Ò¿¡ ÀûÇÕÇÏ´Ù. {{{ rm -f $(find / -name core) &> /dev/null }}} ÀÌ°ÍÀº(cron ¿ä¼Ò¿¡¼­ »ý°¢Çϸé) ¸ðµç µð·ºÅ丮ÀÇ core ¶ó´Â ¸ð¸¥ ÆÄÀÏÀ» Áö¿ï °ÍÀÌ´Ù. ´ç½ÅÀº ´ç½ÅÀÌ ±× Ãâ·ÂÀ» Áö¿î´Ù¸é ¾î¶² ¸í·ÉÀÌ ½ÇÇàµÇ´ÂÁö ºÐ¸íÈ÷ ¾Ë°í ÀÖ¾î¾ß ÇÑ´Ù. == ÆÄÀÌÇÁ == ÀÌ ÀýÀº ÆÄÀÌÇÁ¸¦ ¾î¶»°Ô ¾²´ÂÁö ¸Å¿ì °£´ÜÇÏ°í ½Ç¿ëÀûÀÎ ¹æ¹ýÀ» ¼³¸íÇÏ°í, ¿Ö ´ç½ÅÀÌ ±×°ÍÀ» ¿øÇÒ °ÍÀÎÁö ¼³¸íÇÒ °ÍÀÌ´Ù. === ±×°ÍÀº ¹«¾ùÀΰ¡ ¿Ö ´ç½ÅÀº ±×°ÍÀ» »ç¿ëÇϱ⸦ ¿øÇÒ °ÍÀΰ¡ === ÆÄÀÌÇÁ´Â ´ç½ÅÀÌ ÇÁ·Î±×·¥ÀÇ Ãâ·ÂÀ» ´Ù¸¥ ÇÁ·Î±×·¥ÀÇ ÀÔ·ÂÀ¸·Î »ç¿ëÇÏ°Ô ÇÑ´Ù. === ¿¹: sed¿Í °£´ÜÇÑ ÆÄÀÌÇÁ === ÀÌ°ÍÀº ÆÄÀÌÇÁ¸¦ »ç¿ëÇÏ´Â °£´ÜÇÑ ¹æ¹ýÀÌ´Ù. {{{ ls -l | sed -e "s/[aeio]/u/g" }}} ¿©±â¼­, ¾Æ·¡ÀÇ »óȲÀÌ ¹ß»ýÇÑ´Ù. óÀ½¿¡ ls -l ¸í·ÉÀÌ ½ÇÇàµÇ°í, ±×°ÍÀÇ Ãâ·ÂÀÌ ÀμâµÇ´Â ´ë½Å ÇÁ·Î±×·¥¿¡ º¸³»Áø´Ù(ÆÄÀÌÇÁµÈ´Ù). °á±¹, ±×°ÍÀÌ ÇØ¾ß ÇÏ´Â °ÍÀ» ÀμâµÈ´Ù. === ¿¹: ´Ù¸¥ ls -l *.txt === ¾Æ¸¶, ÀÌ°ÍÀº ls -l *.txt À» ½ÇÇàÇÏ´Â Á»´õ ´Ù¸¥ ¹æ¹ýÀÏ °ÍÀÌÁö¸¸, ÆÄÀÌÇÁ¸¦ ¹¦»çÇÏ·Á´Â °ÍÀÌÁö ÀÌ·± ¸®½ºÆà ¹®Á¦¸¦ Ç®·Á´Â °ÍÀÌ ¾Æ´Ï´Ù. {{{ ls -l | grep "\.txt$" }}} ¿©±â¼­, ls -l ÇÁ·Î±×·¥ÀÇ Ãâ·ÂÀÌ grep ÇÁ·Î±×·¥¿¡ º¸³»Á® °á±¹ Á¤±ÔÇ¥Çö½Ä "\.txt$" ¿¡ ¸Â´Â ÇàÀ» Ãâ·ÂÇÒ °ÍÀÌ´Ù. == º¯¼ö == ´ç½ÅÀº ´Ù¸¥ ÇÁ·Î±×·¥ ¾ð¾îó·³ º¯¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÚ·áÇüÀº ¾ø´Ù. bashÀÇ º¯¼ö´Â ¼ýÀÚ, ¹®ÀÚ, ¹®ÀÚ¿­À» Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù. º¯¼ö¸¦ ¼±¾ðÇÒ ÇÊ¿ä´Â ¾øÀ¸¸ç, °ªÀ» ÂüÁ¶¿¡ ÇÒ´çÇϱ⸸ ÇÏ¸é º¯¼ö¸¦ »ý¼ºÇÑ´Ù. === ¿¹: º¯¼ö¸¦ »ç¿ëÇÑ Hello World! === {{{ #!/bin/bash STR="Hello World!" echo $STR }}} µÑ ° ÁÙÀº STRÀ̶ó´Â º¯¼ö¸¦ »ý¼ºÇÏ°í "Hello World!"À» ÇÒ´çÇÑ´Ù. ±×·¯¸é ÀÌ º¯¼öÀÇ °ªÀº ¾Õ¿¡ $¸¦ ºÙ¿©¼­ µÇãÀ» ¼ö ÀÖ´Ù. ¸¸¾à $ ±âÈ£¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é, ±× ÇÁ·Î±×·¥ÀÇ Ãâ·ÂÀº ´Ù¸¦ °ÍÀÌ°í, °ÅÀÇ ´ç½ÅÀÌ ¿øÇÏ´Â ¹Ù°¡ ¾Æ´Ò °ÍÀÌ´Ù. === ¿¹: ¸Å¿ì °£´ÜÇÑ ¹é¾÷ ½ºÅ©¸³Æ®(Á¶±Ý ³ª¾ÆÁø °Í) === {{{ #!/bin/bash OF=/var/my-backup-$(date +%Y%m%d).tgz tar -cZf $OF /home/me/ }}} ÀÌ ½ºÅ©¸³Æ®´Â ´Ù¸¥ °ÍÀ» µµÀÔÇÑ´Ù. ¿ì¼±, µÑ° ÁÙÀÇ º¯¼ö »ý¼º°ú ÇÒ´ç¿¡ Àͼ÷ÇØÁ®¾ß ÇÑ´Ù. ½Ä '$(date +%Y%m%d)'À» ÁÖ¸ñÇ϶ó. ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÏ¸é °ýÈ£ ¾È¿¡ ÀÖ´Â ¸í·ÉÀ» ½ÇÇàÇÏ°í Ãâ·ÂÀ» ÀâÀ» °ÍÀÌ´Ù. ÀÌ ½ºÅ©¸³Æ® ¾È¿¡¼­, Ãâ·Â ÆÄÀÏ À̸§Àº ¸ÅÀÏ ´Þ¶óÁú °ÍÀÌ°í, date ¸í·ÉÀÇ Çü½Ä º¯È¯(+%Y%m%d) ¶§¹®ÀÌ´Ù. ¿¹°¡ ´õ ÀÖ´Ù. echo ls echo $(ls) === Áö¿ª º¯¼ö === Áö¿ª º¯¼ö´Â local Å°¿öµå¸¦ »ç¿ëÇÏ¿© »ý¼ºÇÒ ¼ö ÀÖ´Ù. {{{ #!/bin/bash HELLO=Hello function hello { local HELLO=World echo $HELLO } echo $HELLO hello echo $HELLO }}} ÀÌ ¿¹´Â ¾î¶»°Ô Áö¿ª º¯¼ö¸¦ »ç¿ëÇÏ´ÂÁö º¸¿©ÁØ´Ù. == Á¶°Ç¹® == Á¶°Ç¹®Àº ¾î¶² ÇൿÀ» ¼öÇàÇÒÁö ÇÏÁö ¾ÊÀ»Áö °áÁ¤ÇÏ°Ô ÇÏ°í, ÀÌ °áÁ¤Àº ½Ä¿¡ ÀÇÇØ ÀÌ·ç¾îÁø´Ù. === ½Ã½ÃÇÑ ÀÌ·Ð === Á¶°Ç¹®Àº ¿©·¯ Çü½ÄÀÌ ÀÖ´Ù. °¡Àå ±âº»ÀûÀÎ Çü½ÄÀº if ½Ä then ¹®ÀåÀε¥ ¿©±â¼­ ¹®ÀåÀº ½ÄÀÌ ÂüÀÏ ¶§¸¸ ½ÇÇàµÈ´Ù. '2<1'Àº °ÅÁþÀ¸·Î Æò°¡ µÇ°í '2>1'Àº ÂüÀ¸·Î Æò°¡µÈ´Ù. Á¶°Ç¹®Àº ´ÙÀ½°ú °°ÀÌ ´Ù¸¥ Çü½ÄÀÌ µÉ ¼öµµ ÀÖ´Ù. if ½Ä then ¹®Àå1 else ¹®Àå2. ¿©±â¼­ ½ÄÀÌ ÂüÀÌ¸é ¹®Àå1ÀÌ ½ÇÇàµÇ°í, ±×·¸Áö ¾ÊÀ¸¸é ¹®Àå2°¡ ½ÇÇàµÈ´Ù. ¶Ç ´Ù¸¥ Çü½ÄÀÇ Á¶°Ç¹®Àº if ½Ä1 then ¹®Àå1 else if ½Ä2 then ¹®Àå2 else ¹®Àå3 ÀÌ´Ù. ÀÌ Çü½Ä¿¡¼­´Â else if ½Ä2 then ¹®Àå2 °¡ Ãß°¡µÈ °Í »ÓÀε¥, ±×°ÍÀº ½Ä2°¡ ÂüÀÏ ¶§ ¹®Àå2¸¦ ½ÇÇàÇÏ°Ô ÇÑ´Ù. ³ª¸ÓÁö´Â ´ç½ÅÀÌ »ý°¢ÇÏ´Â °Í°ú °°´Ù. ±¸¹®¿¡ ´ëÇÑ ¸»: bash¿¡¼­ if ±¸¹®ÀÇ ±âº»Àº ¾Æ·¡¿Í °°´Ù. {{{ if [ ½Ä ]; then ½ÄÀÌ ÂüÀÏ ¶§ÀÇ ÄÚµå fi }}} === ¿¹: ±âº» Á¶°Ç¹® if ... then === {{{ #!/bin/bash if [ "foo" = "foo" ]; then echo expression evaluated as true fi }}} ÀÌ ÄÚµå´Â °ýÈ£ ¾ÈÀÇ ½ÄÀÌ ÂüÀ̸é then ´ÙÀ½¿¡¼­ fi Àü±îÁöÀÇ Äڵ带 ½ÇÇàÇÑ´Ù. === ¿¹: ±âº» Á¶°Ç¹® if ... then ... else === {{{ #!/bin/bash if [ "foo" = "foo" ]; then echo expression evaluated as true else echo expression evaluated as false fi }}} === º¯¼ö¸¦ °¡Áø Á¶°Ç¹® === {{{ #!/bin/bash T1="foo" T2="bar" if [ "$T1" = "$T2" ]; then echo expression evaluated as true else echo expression evaluated as false fi }}} == for, while, until == ÀÌ Àý¿¡¼­´Â for, while, until ¿¡ ´ëÇØ Ã£À» ¼ö ÀÖ´Ù. for´Â ´Ù¸¥ ÇÁ·Î±×·¡¹Ö ¾ð¾î¿Í ´Ù¸£´Ù. ±âº»ÀûÀ¸·Î, ÇÑ ¹®ÀÚ¿­ ¾È¿¡ ÀÖ´Â ´Ü¾îÀÇ ¿­À» ¹Ýº¹ÇÏ°Ô ÇÑ´Ù. whileÀº ¸¸¾à Á¦¾î ½ÄÀÌ ÂüÀÏ ¶§ Äڵ带 ½ÇÇàÇÏ°í, °ÅÁþÀÏ ¶§(¶Ç´Â ½ÇÇàµÇ´Â Äڵ忡¼­ ¸í½ÃÀûÀÎ break¸¦ ã¾ÒÀ» ¶§)´Â ³¡³­´Ù. untilÀº Á¦¾îÄڵ尡 °ÅÁþÀ¸·Î Æò°¡ µÇ´Â µ¿¾È ½ÇÇàµÂ´Â °Í¸¸ Á¦¿ÜÇÏ°í while°ú °ÅÀÇ °°´Ù. ¸¸¾à ´ç½ÅÀÌ while°ú untilÀÌ ¸Å¿ì ºñ½ÁÇÏ´Ù´Â °É ´«Ä¡Ã«´Ù¸é ´ç½ÅÀº Á¦´ë·Î º» °ÍÀÌ´Ù. === for ¿¹ === {{{ #!/bin/bash for i in $( ls ); do echo item: $i done }}} µÑ° ÁÙ¿¡¼­ i¸¦ º¯¼ö·Î ¼±¾ðÇÏ°í $(ls)¾È¿¡ Æ÷ÇÔµÈ ´Ù¸¥ °ªÀ» ¾ò´Â´Ù. ¼¼Â° ÁÙÀº ÇÊ¿äÇÏ¸é ´õ ±æ¾îÁú ¼öµµ ÀÖ´Ù. Áï done ÀÌÀü¿¡ ´õ ¸¹Àº ÁÙÀÌ ÀÖÀ» ¼ö ÀÖ´Ù. done Àº $iÀÇ °ªÀÌ »ç¿ëµÇ´Â °ÍÀÌ ³¡³µ°í $i°¡ »õ·Î¿î °ªÀ» ¾òÀ» ¼ö ÀÖÀ½À» °¡¸®Å²´Ù. === C ºñ½ÁÇÑ for === fiesh°¡ ÀÌ Çü½ÄÀ» ´õÇÏ´Â °ÍÀ» Á¦¾ÈÇß´Ù. C/Perl °ú ºñ½ÁÇÑ for ÀÌ´Ù. {{{ #!/bin/bash for i in `seq 1 10`; do echo $i done }}} === while ¿¹ === {{{ #!/bin/bash COUNTER=0 while [ $COUNTER -lt 10 ]; do echo The counter is $COUNTER let COUNTER=COUNTER+1 done }}} ÀÌ ½ºÅ©¸³Æ®´Â Àß ¾Ë·ÁÁø(C, Pascal, perl, µî) for ±¸Á¶¸¦ Èä³»³½´Ù. === until ¿¹ === {{{ #!/bin/bash COUNTER=20 until [ $COUNTER -lt 10 ]; do echo COUNTER $COUNTER let COUNTER-=1 done }}} == ÇÔ¼ö == °ÅÀÇ ¸ðµç ÇÁ·Î±×·¥ ¾ð¾î¿¡¼­ ó·³, ´ç½ÅÀº Á»´õ ³í¸®ÀûÀÎ ¹æ¹ýÀ¸·Î ÄÚµåÀÇ Á¶°¢µéÀ» ¹­°Å³ª Àç±ÍÀÇ ±â¼úÀ» ½ÇÇàÇϱâ À§ÇØ ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÇÔ¼ö¸¦ ¼±¾ðÇÏ´Â °ÍÀº ´ë·« ³»_ÇÔ¼ö {³»_ÄÚµå} À¸·Î ¾²´Â °ÍÀÌ´Ù. ÇÔ¼ö¸¦ È£ÃâÇÏ´Â °ÍÀº ´Ù¸¥ ÇÁ·Î±×·¥Ã³·³ ´ç½ÅÀÌ ±× À̸§À» ¾²´Â °ÍÀÌ´Ù. === ÇÔ¼ö ¿¹ === {{{ #!/bin/bash function quit { exit } function hello { echo Hello! } hello quit echo foo }}} µÑ° - ³×° ÁÙÀº quit ÇÔ¼ö¸¦ Æ÷ÇÔÇÑ´Ù. ´Ù¼¸Â° - ÀÏ°ö°ÁÙÀº hello ÇÔ¼ö¸¦ Æ÷ÇÔÇÑ´Ù. ¸¸¾à ÀÌ ½ºÅ©¸³Æ®°¡ ¹«¾ùÀ» ÇÏ´ÂÁö Àß ¸ð¸£°ÚÀ¸¸é ²À ÇØ º¸½Ã¿À. ÇÔ¼ö´Â ƯÁ¤ÇÑ ¼ø¼­·Î ¼±¾ðµÉ ÇÊ¿ä´Â ¾ø´Ù. ½ºÅ©¸³Æ®¸¦ ½ÇÇà½ÃÅ°¸é ¿ì¼± ´ÙÀ½À» ÁÖ¸ñÇ϶ó. ÇÔ¼ö hello°¡ È£ÃâµÇ¸é quit ÇÔ¼ö°¡ È£ÃâµÇ°í, ÇÁ·Î±×·¥Àº ¿­Â° ÁÙ¿¡ µµ´ÞÇÏÁö ¸øÇÑ´Ù. === ¸Å°³º¯¼ö¸¦ °¡Áø ÇÔ¼ö ¿¹ === {{{ #!/bin/bash function quit { exit } function e { echo $1 } e Hello e World quit echo foo }}} ÀÌ ½ºÅ©¸³Æ®´Â ù¹ø° °Í°ú °ÅÀÇ °°´Ù. ÁÖµÈ Â÷ÀÌ´Â ÇÔ¼ö eÀÌ´Ù. ÀÌ ÇÔ¼ö´Â ¹ÞÀº ¸Å°³º¯¼ö¸¦ Ãâ·ÂÇÑ´Ù. ÇÔ¼ö¿¡¼­´Â ¸Å°³º¯¼ö´Â ½ºÅ©¸³Æ®¿¡ ÁÖ¾îÁø ¸Å°³º¯¼ö¿Í °°Àº ¹æ¹ýÀ¸·Î ´Ù·ç¾îÁø´Ù. == »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º == === °£´ÜÇÑ ¸Þ´º¸¦ À§ÇÑ select »ç¿ë === {{{ #!/bin/bash OPTIONS="Hello Quit" select opt in $OPTIONS; do if [ "$opt" = "Quit" ]; then echo done exit elif [ "$opt" = "Hello" ]; then echo Hello World else clear echo bad option fi done }}} ´ç½ÅÀÌ ÀÌ ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇϸé ÀÌ°ÍÀÌ Å×½ºÆ®±â¹Ý¸Þ´º¿¡ ´ëÇÑ ÇÁ·Î±×·¡¸çÀÇ ²ÞÀ̶ó´Â °ÍÀ» º¼ °ÍÀÌ´Ù. ´ç½ÅÀº ÀÌ°ÍÀÌ ´Ü¼øÈ÷ $OPTIONS ¾ÈÀÇ °¢°¢ÀÇ ´Ü¾î¸¦ µµ´Â °Í¸¸ÀÌ ¾Æ´Ï¶ó´Â °Í ¸»°í´Â for±¸Á¶¿Í ºñ½ÁÇÏ´Ù. ÀÌ°ÍÀº »ç¿ëÀÚ ÀÀ´äÀ» ±â´Ù¸°´Ù. === ¸í·ÉÇà »ç¿ëÇϱâ === {{{ #!/bin/bash if [ -z "$1" ]; then echo usage: $0 directory exit fi SRCD=$1 TGTD="/var/backups/" OF=home-$(date +%Y%m%d).tgz tar -cZf $TGTD$OF $SRCD }}} ÀÌ ½ºÅ©¸³Æ®°¡ ÇÏ´Â °ÍÀº ´ç½Å¿¡°Ô ¸íÈ®ÇÒ °ÍÀÌ´Ù. ù¹ø° Á¶°Ç¹®ÀÇ ½ÄÀº ÇÁ·Î±×·¥ÀÌ ¸Å°³º¯¼ö($1)À» ¹Þ¾Ò´ÂÁö üũÇÏ°í ¹ÞÁö ¾Ê¾ÒÀ¸¸é ³¡³»°í, »ç¿ëÀÚ¿¡°Ô °£´ÜÇÑ »ç¿ë¹ý ¸Þ½ÃÁö¸¦ º¸¿©ÁØ´Ù. ³ª¸ÓÁö ºÎºÐÀº ¸íÈ®ÇÏ´Ù. == ±âŸ == === read·Î »ç¿ëÀÚ ÀÔ·Â Àбâ === ¿©·¯ °æ¿ì¿¡ ´ç½ÅÀº »ç¿ëÀÚ°¡ ¾î¶² ÀԷ¿¡ ÀÀ´äÇϱ⸦ ¿øÇÒ°ÍÀÌ°í, ÀÌ°ÍÀ» ¼öÇàÇÏ´Â ¹æ¹ýÀº ¿©·¯°¡Áö°¡ ÀÖ´Ù. ±× Áß ÇÑ ¹æ¹ýÀÌ ÀÌ°ÍÀÌ´Ù. {{{ #!/bin/bash echo Please, enter your name read NAME echo "Hi $NAME!" }}} º¯È­¸¦ ÁÖ¾î ¿©·¯°³ÀÇ °ªÀº ¾òÀ» ¼ö ÀÖ°í ÀÌ ¿¹Á¦°¡ ±×°ÍÀ» ¸íÈ®È÷ ÇÒ °ÍÀÌ´Ù. {{{ #!/bin/bash echo Please, enter your firstname and lastname read FN LN echo "Hi! $LN, $FN !" }}} === »ê¼ú Æò°¡ === ¸í·ÉÇà(¶Ç´Â ¼Ð)¿¡¼­ ÀÌ°ÍÀ» ½ÃµµÇØ º¸¶ó. {{{ echo 1 + 1 }}} ´ç½ÅÀÌ 2¸¦ ±â´ëÇß´Ù¸é ±â´ë°¡ ¾î±ß³¯ °ÍÀÌ´Ù. ´ç½ÅÀº BASH°¡ ¾î¶² ¼ö¸¦ °è»êÇϱ⸦ ¿øÇÑ´Ù¸é ¾î¶»°Ô ÇØ¾ß ÇÒ±î? ´äÀÌ ÀÌ°ÍÀÌ´Ù. {{{ echo $((1+1)) }}} ÀÌ°ÍÀº Á» ´õ ³í¸®ÀûÀÎ Ãâ·ÂÀ» ¸¸µé °ÍÀÌ´Ù. ÀÌ°ÍÀº »ê¼ú½ÄÀ» °è»êÇÑ °ÍÀÌ´Ù. ´ç½ÅÀº ÀÌ°ÍÀ» ÀÌ·¸°Ô ÇÒ ¼ö ÀÖ´Ù. {{{ echo $[1+1] }}} ´ç½ÅÀÌ ºÐ¼ö¸¦ »ç¿ëÇϱ⠿øÇÑ´Ù¸é, ¶Ç´Â ¼öÇÐ ¶Ç´Â ´ç½ÅÀÌ ±×°ÍÀ» ¿øÇϱ⸸ ÇÑ´Ù¸é, ´ç½ÅÀº »ê¼ú½ÄÀ» °è»êÇϱâ À§ÇØ bc¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸¸¾à {{{echo $[3/4]}}}À» ½ÇÇàÇÑ´Ù¸é, 0À» ¹ÝȯÇÒ °ÍÀÌ´Ù. ¿Ö³ÄÇϸé, bash´Â ´äÇÒ¶§ Á¤¼ö¸¸À» »ç¿ëÇϱ⠶§¹®ÀÌ´Ù. {{{echo 3/4|bc -l}}}À» ½ÇÇàÇϸé 0.75¸¦ ¹ÝȯÇÒ °ÍÀÌ´Ù. === bash ã±â === mike·ÎºÎÅÍÀÇ ¸Þ½ÃÁö¿¡¼­ (Thanks to ¸¦ º¸¶ó) ´ç½ÅÀº Ç×»ó #!/bin/bash .. ¸¦ »ç¿ëÇß´Ù.¾îµð¿¡ bash°¡ ÀÖ´ÂÁö ã´Â ¹æ¹ýÀ» º¸¿©ÁÖ¾úÀ¸¸é ÇÑ´Ù. 'locate bash'¸¦ ±ÇÀåÇÏÁö¸¸, ¸ðµç ±â°è°¡ locate¸¦ °¡Áö°í ÀÖ´Â °Ç ¾Æ´Ï´Ù. / µð·ºÅ丮¿¡¼­ 'find ./ -name bash' ¸¦ ÇÏ¸é ´ë°³ÀÇ °æ¿ì µÉ °ÍÀÌ´Ù. Á¡°ËÇغ¼ À§Ä¡ Ãßõ ls -l /bin/bash ls -l /sbin/bash ls -l /usr/local/bin/bash ls -l /usr/bin/bash ls -l /usr/sbin/bash ls -l /usr/local/sbin/bash 'which bash'¸¦ ½ÃµµÇØ º¼ ¼öµµ ÀÖ´Ù. === ÇÁ·Î±×·¥ÀÇ ¹Ýȯ°ª ¾ò±â === bash¿¡¼­, ÇÁ·Î±×·¥ÀÇ ¹Ýȯ°ªÀº ƯÁ¤ÇÑ º¯¼ö $? ¿¡ ÀúÀåµÈ´Ù. ÀÌ°ÍÀº ¾î¶»°Ô ÇÁ·Î±×·¥ÀÇ ¹Ýȯ°ªÀ» ¾î¶»°Ô Àâ´ÂÁö ¹¦»çÇÑ´Ù. ³ª´Â µð·ºÅ丮 µ¥ÀÌÅÍ°¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù°í °¡Á¤Çß´Ù.(ÀÌ ¶ÇÇÑ mike°¡ Á¦¾ÈÇß´Ù) {{{ #!/bin/bash cd /dada &> /dev/null echo rv: $? cd $(pwd) &> /dev/null echo rv: $? }}} === ¸í·É Ãâ·Â Àâ±â === ÀÌ ÀÛÀº ½ºÅ©¸³Æ®´Â ¸ðµç µ¥ÀÌÅͺ£À̽ºÀÇ Å×À̺íÀº º¸¿©ÁØ´Ù.(MySQLÀÌ ¼³Ä¡µÇ¾ú´Ù°í °¡Á¤ÇÑ´Ù). ¶ÇÇÑ, ¿Ã¹Ù¸¥ »ç¿ëÀÚ¿Í Æнº¿öµå¸¦ »ç¿ëÇÏ¿©'mysql'À» »ç¿ëÇÑ´Ù°í °¡Á¤ÇÑ´Ù. {{{ #!/bin/bash DBS=`mysql -uroot -e"show databases"` for b in $DBS ; do mysql -uroot -e"show tables from $b" done }}} === ¿©·¯ ¼Ò½ºÆÄÀÏ === ´ç½ÅÀº ¿©·¯°³ÀÇ ¸í·É¼Ò½º·Î ¿©·¯°³ÀÇ ÆÄÀÏÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. == Tables == === ¹®ÀÚ¿­ ºñ±³ ¿¬»êÀÚ === (1) s1 = s2 (2) s1 != s2 (3) s1 < s2 (4) s1 > s2 (5) -n s1 (6) -z s1 (1) s1 matches s2 (2) s1 does not match s2 (3) __TO-DO__ (4) __TO-DO__ (5) s1 (Çϳª ÀÌ»óÀÇ ¹®ÀÚ Æ÷ÇÔ) (6) s1 is null === ¹®ÀÚ¿­ ºñ±³ ¿¹ === µÎ ¹®ÀÚ¿­ ºñ±³ {{{ #!/bin/bash S1='string' S2='String' if [ $S1=$S2 ]; then echo "S1('$S1') is not equal to S2('$S2')" fi if [ $S1=$S1 ]; then echo "S1('$S1') is equal to S1('$S1')" fi }}} ³ª´Â if [ $1 = $2 ]¸¦ »ç¿ëÇÏ´Â °ÍÀ» ÂüÁ¶Çϱâ À§ÇØ Andreas BeckÀÌ º¸³½ ¸ÞÀÏÀ» ¿©±â¼­ ÀοëÇß´Ù. ÀÌ°ÍÀº $S1 ¶Ç´Â $S2 °¡ ºñ¾úÀ» ¶§´Â ±×´ÙÁö ÁÁÀº »ý°¢Àº ¾Æ´Ñµ¥ ±×·² °æ¿ì parse ¿¡·¯°¡ ³¯ °ÍÀÌ´Ù. x$1=x$2 ¶Ç´Â "$1"="$2" °¡ ³´´Ù. === »ê¼ú ¿¬»êÀÚ === + - * / % (³ª¸ÓÁö) === »ê¼ú °ü°è ¿¬»êÀÚ === -lt (<) -gt (>) -le (<=) -ge (>=) -eq (==) -ne (!=) C ÇÁ·Î±×·¡¸Ó´Â ÀÌ ¿¬»êÀÚ¸¦ ÇØ´çÇÏ´Â °ýÈ£¿¡ ÀÖ´Â °Í¿¡ ´ëÀÀ½Ãų ¼ö ÀÖ°Ú´Ù. === ¾µ¸¸ÇÑ ¸í·É¾î === ÀÌ ÀýÀº Kees°¡ ´Ù½Ã ½è´Ù. ÀÌ ¸í·É¾îµéÀº ´ë°³ ¿ÏÀüÇÑ ÇÁ·Î±×·¥ ¾ð¾î¸¦ Æ÷ÇÔÇÑ´Ù. ÀÌ ¸í·É¾îµéÀº ´ÜÁö ±âº»¸¸ ¼³¸íÇÑ´Ù. Á» ´õ ÀÚ¼¼ÇÑ ¼³¸íÀ» À§Çؼ­´Â °¢ ¸í·É¾îÀÇ man ÆäÀÌÁö¸¦ º¸¶ó. sed (stream editor) sed ´Â ºñ´ëÈ­Çü ÆíÁý±â´Ù. È­¸é¿¡¼­ Ä¿¼­¸¦ ¿Å°Ü ÆÄÀÏÀ» º¯°æÇÏ´Â ´ë½Å ¸í·É ÆíÁý ½ºÅ©¸³Æ®·Î sed¸¦ »ç¿ëÇÏ¿© ÆíÁýÇÒ ÆÄÀÏÀÇ À̸§À» Ãß°¡ÇÒ ¼ö ÀÖ´Ù. sed¸¦ ÇÊÅÍ·Î ¼³¸íÇÒ ¼öµµ ÀÖ´Ù. ¸î °³ÀÇ ¿¹¸¦ º¸ÀÚ {{{ $sed 's/to_be_replaced/replaced/g' /tmp/dummy }}} sed´Â /tmp/dummy ÆÄÀÏÀ» Àо 'to_be_replaced'¸¦ 'replaced'·Î ¹Ù²Û´Ù. °á°ú´Â stdout(´ë°³ ÄܼÖ)·Î º¸³»ÁöÁö¸¸ À§ÀÇ ÁÙ ³¡¿¡ '> capture'¸¦ µ¡ºÙ¿©¼­ sed°¡ Ãâ·ÂÀ» ÆÄÀÏ capture·Î º¸³»°Ô ÇÒ ¼öµµ ÀÖ´Ù. {{{ $sed 12, 18d /tmp/dummy }}} sed´Â 12°¿¡¼­ 18°±îÁö¸¦ Á¦¿ÜÇÑ ÇàÀ» º¸¿©ÁØ´Ù. ¿øº» ÆÄÀÏÀÌ ÀÌ ¸í·É¾î¿¡ ÀÇÇØ ¹Ù²îÁö´Â ¾Ê´Â´Ù. awk (µ¥ÀÌÅÍÆÄÀÏ ´Ù·ç±â, ÅؽºÆ® ÃßÃâ ¹× Ã³¸®) AWKÀÇ ¿©·¯°¡Áö ±¸ÇöÀÌ Á¸ÀçÇÑ´Ù(°¡Àå ¸¹ÀÌ ¾Ë·ÁÁø ÀÎÅÍÇÁ¸®ÅÍ´Â GNUÀÇ gawk ¿Í 'new awk' mawk.) ¿øÄ¢Àº °£´ÜÇÏ´Ù. awk´Â ÆÐÅÏÀ» ÈÈ°í ÇØ´çµÇ´Â ¸ðµç ÆÐÅÏ¿¡ ¾î¶² ÇൿÀÌ ¼öÇàµÈ´Ù. ´Ù½Ã, ¾Æ·¡ ÇàÀ» Æ÷ÇÔÇÏ´Â ÆÄÀÏÀ» ¸¸µé¾ú´Ù. {{{ test123 test tteesstt }}} {{{ $ awk '/test/ {print}' /tmp/dummy }}} awk°¡ ã´Â ÆÐÅÏÀº 'test'ÀÌ°í /tmp/dummy ¾È¿¡¼­ ¹®ÀÚ¿­ 'test'¸¦ °¡Áö°í ÀÖ´Â ÇàÀ» ã¾ÒÀ» ¶§ ¼öÇàÇÏ´Â °ÍÀº ±× ÇàÀ» Ãâ·ÂÇÏ´Â °ÍÀÌ´Ù. {{{ test123 test }}} {{{ $ awk '/test/ {i=i+1} END {print i}' /tmp/dummy }}} 3 ´ç½ÅÀÌ ¿©·¯ ÆÐÅÏÀ» ãÀ» ¶§´Â, ´ç½ÅÀº '-f file.awk'¸¦ °¡Áö°í µû¿ÈÇ¥»çÀÌÀÇ ÅؽºÆ®¸¦ ġȯÇØ¾ß ÇÏ¸ç ±×·¯¸é ¸ðµç ÆÐÅÏ°ú 'file.awk'ÀÇ ÇൿÀ» ³ÖÀ» ¼ö ÀÖ´Ù. grep (°Ë»ö ÆÐÅÏ¿¡ ÇØ´çÇÏ´Â ÇàÀ» Ãâ·Â) ¿ì¸®´Â ÀÌÀüÀÇ Àå¿¡¼­ ÀÌ¹Ì ²Ï ¸¹Àº ±×·ì ¸í·ÉÀ» ºÃ°í, ±×°ÍÀº ÆÐÅÏ¿¡ ÇØ´çÇÏ´Â ÇàÀ» º¸¿©ÁØ´Ù. ±×·¯³ª grep Àº ´õ ¸¹Àº °ÍÀ» ÇÒ ¼ö ÀÖ´Ù. {{{ $ grep "look for this" /var/log/messages -c }}} 12 ¹®ÀÚ¿­ "look for this"´Â ÆÄÀÏ /var/log/messages¿¡¼­ 12¹ø ¹ß°ßµÇ¾ú´Ù. [±×·¸´Ù ÀÌ ¿¹´Â ¼ÓÀÓ¼ö´Ù /var/log/messages´Â ²¿Áý¾îÁ³´Ù :) ] wc (Çà, ´Ü¾î, ¹ÙÀÌÆ® ¼¼±â) ´ÙÀ½ÀÇ ¿¹¿¡¼­ ¿ì¸®´Â Ãâ·ÂÀÌ ¿ì¸®°¡ ±â´ëÇÏ´Â °ÍÀÌ ¾Æ´ÔÀ» º¸°Ô µÈ´Ù. ´õ¹Ì ÆÄÀÏ, ÀÌ ¿¹¿¡¼­ »ç¿ëµÈ °Íó·³ ´ÙÀ½ÀÇ ÅؽºÆ®¸¦ Æ÷ÇÔÇÑ´Ù. "bash introduction howto test file" {{{ $ wc --words --lines --bytes /tmp/dummy }}} 2 5 34 /tmp/dummy Wc doesn't care about the parameter order. Wc always prints them in a standard order, which is, as you can see: . ¿ì¸®´Â ÆĶó¸ÞÅÍÀÇ ¼ø¼­¿¡ ´ëÇØ´Â ½Å°æ¾²Áö ¾Ê´Â´Ù. ¿ì¸®´Â ¾ðÁ¦³ª ±×°ÍÀ» Ç¥ÁØ ¼ø¼­·Î Ãâ·ÂÇÑ´Ù. ±×°Ç, ´ç½ÅÀÌ º¸´Â ¹Ù¿Í °°´Ù. sort (ÅؽºÆ® ÆÄÀÏÀÇ Á¤·Ä) À̹ø¿£ ´õ¹Ì ÆÄÀÏÀÌ ´ÙÀ½ÀÇ ¹®ÀÚ¿­À» Æ÷ÇÔÇÏ°í ÀÖ´Ù. {{{ b c a }}} {{{ $ sort /tmp/dummy }}} Ãâ·ÂÀº ÀÌ·¸°Ô ³ª¿Â´Ù. {{{ a b c }}} ¸í·ÉÀº ±×·¸°Ô ½±Áö¸¸Àº ¾Ê´Ù :) bc (°è»ê±â ÇÁ·Î±×·¥ ¾ð¾î) bc´Â ¸í·ÉÇà¿¡¼­ÀÇ (ÆÄÀϷκÎÅÍ ÀԷ¹ÞÀº, ¸®µð·ºÅͳª ÆÄÀÌÇÁ°¡ ¾Æ´Ï¶ó) »Ó ¾Æ´Ï¶ó »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º¿¡¼­µµ °è»êÀ» ¼öÇàÇÑ´Ù. ¾Æ·¡ÀÇ ¿¹´Â ÀÌ·± ¸í·É ¸î °³¸¦ º¸¿©ÁØ´Ù. I start bc using the -q parameter to avoid a welcome message. ³ª´Â ȯ¿µ ¸Þ½ÃÁö¸¦ ÇÇÇϱâ À§ÇØ -q ÆĶó¸ÞÅ͸¦ ½è´Ù. {{{ $ bc -q }}} 1 == 5 0 0.05 == 0.05 1 5 != 5 0 2 ^ 8 256 sqrt(9) 3 while (i != 9) { i = i + 1; print i } 123456789 quit tput (Å͹̳Π¶Ç´Â terminfo µ¥ÀÌÅͺ£À̽ºÁúÀÇ ÃʱâÈ­) A little demonstration of tput's capabilities: tputÀÇ ´É·ÂÀÇ ¿¹ {{{ $ tput cup 10 4 }}} The prompt appears at (y10,x4). ÇÁ·ÒÇÁÆ®°¡ (y10,x4)¿¡ ³ªÅ¸³­´Ù. {{{ $ tput reset }}} È­¸éÀ» ±ú²ýÀÌ ÇÏ°í ÇÁ·ÒÇÁÆ®°¡ (y1,x1)¿¡ ³ªÅ¸³­´Ù. (y0,x0)ÀÌ ¿ÞÂÊ À§ ±¸¼®ÀÓÀ» ÁÖ¸ñÇ϶ó. {{{ $ tput cols }}} 80 x¹æÇâ¿¡ °¡´ÉÇÑ ¹®ÀÚ¼ö¸¦ º¸¿©ÁØ´Ù. (Àû¾îµµ) À̵é ÇÁ·Î±×·¥¿¡ Àͼ÷ÇØÁö±æ ±ÇÇÑ´Ù. ¸í·ÉÇà¿¡¼­ ´ç½ÅÀÌ ÁøÂ¥ ¸¶¼úÀ» ÇÏ°Ô ÇÒ ÀÛÀº ÇÁ·Î±×·¥µéÀÌ ¾î¸Ó¾î¸¶ÇÏ°Ô ¸¹´Ù. ¸î ¿¹Á¦´Â man ÆäÀÌÁö³ª fag¿¡¼­ °¡Á®¿Ô´Ù.