Bash Prog Intro Howto
Bash Programming Introduction Howto
Mike G mikkey at dyamo.com.ar
Thu Jul 27 09:36:18 ART 2000
ÀÌ ±ÛÀº ´ç½ÅÀÌ ÃÊÁß±Þ ¼Ð ½ºÅ©¸³Æ® ÇÁ·Î±×·¡¹ÖÀ» ½ÃÀÛÇÏ´Â °ÍÀ» µ½°íÀÚ ÇÑ´Ù. °íµµÀÇ ¹®¼È¸¦ ÇÏ·Á°í ÇÏ´Â °Ô ¾Æ´Ï´Ù(Á¦¸ñÀ» º¸¶ó). ³ª´Â Àü¹®°¡µµ °í±Þ ¼Ð ÇÁ·Î±×·¡¸Óµµ ¾Æ´Ï´Ù. ´Ù´Â ³»°¡ Á» ´õ ¹è¿ü°í ´Ù¸¥ »ç¶÷µé¿¡°Ô ¾µ¸ð°¡ ÀÖÀ» °ÍÀ̱⿡ ÀÌ ±ÛÀ» ¾²±â·Î °áÁ¤Çß´Ù. ¾î¶² Çǵå¹éµµ - ƯÈ÷ ÆÐÄ¡ ÇüÅ - ȯ¿µÇÑ´Ù.
1.2. ¿ä±¸»çÇ× ¶GNU/Linux ¸í·ÉÇà¿¡ Àͼ÷ÇÏ°í, ±âº» ÇÁ·Î±×·¥°³³äÀÌ ÀÖ´Ù¸é µµ¿òÀÌ µÉ °ÍÀÌ´Ù. ÀÌ ±ÛÀº ÇÁ·Î±×·¡¹ÖÀÇ ¼Ò°³°¡ ¾Æ´Ï¹Ç·Î, ¸¹Àº ±âº» °³³äÀ» ¼³¸íÇÑ´Ù(Àû¾îµµ ½ÃµµÇÑ´Ù)
1.3. ÀÌ ¹®¼ÀÇ »ç¿ë ¶ÀÌ ¹®¼´Â ´ÙÀ½ »óȲ¿¡ ¾µ¸ð ÀÖ°Ô ÇÏ·Á ÇÏ¿´´Ù.
2.1. ÀüÅëÀûÀÎ hello world ½ºÆ®¸³Æ® ¶#!/bin/bash echo Hello World ÀÌ ½ºÅ©¸³Æ®´Â µü µÎ ÁÙ·Î µÇ¾î ÀÖ´Ù. ù ÁÙÀº ÇÁ·Î±×·¥ÀÌ ÆÄÀÏÀ» ½ÇÇà½ÃÅ°±â À§ÇØ »ç¿ëÇÒ ½Ã½ºÅÛÀ» °¡¸®Å²´Ù.
µÑ° ÁÙÀº ÀÌ ½ºÅ©¸³Æ®¿¡ ÀÇÇØ ¼öÇàµÇ´Â ÇൿÀε¥, ±×°ÍÀº Å͹̳ο¡ 'Hello World'¸¦ Ãâ·ÂÇÑ´Ù.
¸¸¾à ´ç½ÅÀÌ ./hello.sh: Command not found. ¿Í °°Àº °ÍÀ» º¸°Ô µÈ´Ù¸é ¾Æ¸¶µµ ù ÁÙÀÌ À߸øµÇ¾úÀ» °ÍÀÏÅÙµ¥, bash°¡ ¾îµð ÀÖ´ÂÁö¿¡ ´ëÇØ ¶Ç´Â ¾î¶»°Ô ´ç½ÅÀÌ ÀÌ ÁÙÀ» ½á¾ß ÇÏ´ÂÁö º¸±â À§ÇØ 'bash¸¦ ã´Â °Í'À» ÇÏ°Ô µÉ °ÍÀÌ´Ù.
2.2. ¸Å¿ì °£´ÜÇÑ ¹é¾÷ ½ºÅ©¸³Æ® ¶#!/bin/bash tar -cZf /var/my-backup.tgz /home/me/ ÀÌ ½ºÅ©¸³Æ®¿¡¼´Â Å͹̳ο¡ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÏ´Â ´ë½Å »ç¿ëÀÚ È¨µð·ºÅ丮ÀÇ Å¸¸£º¼À» ¸¸µç´Ù. ÀÌ°ÍÀº »ç¿ëÇÏ·Á°í ÇÏ´Â °Ô ¾Æ´Ï°í, Á»´õ ¾µ¸ð ÀÖ´Â ¹é¾÷ ½ºÅ©¸³Æ®°¡ ÀÌ ¹®¼¿¡¼ ³ªÁß¿¡ ³ª¿Â´Ù.
3.1. À̷аú ºü¸¥ ÂüÁ¶ ¶ÆÄÀÏ Áö½ÃÀÚ´Â stdin, stdout, stderr ¼¼ °³°¡ ÀÖ´Ù.
±âº»ÀûÀ¸·Î ´ç½ÅÀº
1Àº stdoutÀ» 2´Â stderr¸¦ ³ªÅ¸³½´Ù.
ÀÌ°ÍÀ» º¸±â À§ÇÑ ÀÛÀº ÁÖ¼®: less ¸í·É¾î·Î ´ç½ÅÀºstdout (ÀÌ°ÍÀº ¹öÆÛ¿¡ ³²À½) °ú stderr°¡ ȸ鿡 Ãâ·ÂµÇ´Â °ÍÀ» º¼ °ÍÀÌÁö¸¸, ¹öÆÛ¸¦ °Ë»öÇÏ·Á°í ½ÃµµÇϸé Áö¿öÁø´Ù.
3.2. ¿¹: stdout ¿¡¼ file ¶ÀÌ°ÍÀº ÇÁ·Î±×·¥ÀÇ Ãâ·ÂÀ» ÆÄÀÏ¿¡ ¾µ °ÍÀÌ´Ù.
ls -l > ls-l.txt¿©±â¼ ls-l.txt À̶ó´Â ÆÄÀÏÀÌ »ý¼ºµÉ °ÍÀÌ°í, ±× ÆÄÀÏÀº ´ç½ÅÀÌ ls -l¸¦ ½ÇÇàÇßÀ» ¶§ ȸ鿡 º¸°Ô µÇ´Â ³»¿ëÀ» Æ÷ÇÔÇÒ °ÍÀÌ´Ù. 3.3. ¿¹: stderr ¿¡¼ file ¶ÀÌ°ÍÀº ÇÁ·Î±×·¥ÀÇ stderr Ãâ·ÂÀ» ÆÄÀÏ¿¡ ¾µ °ÍÀÌ´Ù.
grep da * 2> grep-errors.txt¿©±â¼ 'grep-errors.txt'À̶ó´Â ÆÄÀÏÀÌ »ý¼ºµÇ°í ´ç½ÅÀº 'grep da *'¸í·ÉÀÇ stderr Ãâ·Â ºÎºÐÀ» º¼ °ÍÀÌ´Ù. 3.4. ¿¹: stdout ¿¡¼ stderr ¶ÀÌ°ÍÀº ÇÁ·Î±×·¥ÀÇ stderrÃâ·ÂÀ» stdout´ë½Å °°Àº ÆÄÀÏÁö½ÃÀÚ¿¡ ¾µ °ÍÀÌ´Ù.
grep da * 1>&2¿©±â¼, ¸í·ÉÀÇ stdout ºÎºÐÀº stderr·Î º¸³»Áö°í, ´ç½ÅÀº ´Ù¸¥ ¹æ¹ýÀ» ¾Ë°Ô µÉ °ÍÀÌ´Ù. 3.5. ¿¹: stderr ¿¡¼ stdout ¶ÀÌ°ÍÀº ÇÁ·Î±×·¥ÀÇ stderrÃâ·Â±Û stdout ´ë½Å °°Àº ÆÄÀÏÁö½ÃÀÚ¿¡ ¾µ °ÍÀÌ´Ù.
grep * 2>&1¿©±â¼ ÀÌ ¸í·ÉÀÇ stderr ºÎºÐÀº stdout ·Î º¸³»Áö°í, ´ç½ÅÀÌ less·Î ÆÄÀÌÇÁÇϸé, ´ç½ÅÀº º¸Åë '»ç¶óÁö´Â'(±×°ÍµéÀÌ stderr¿¡ ½áÁø °Í ó·³) ÁÙÀÌ ÇöÀç´Â À¯ÁöµÇ´Â °ÍÀ» º¼ °ÍÀÌ´Ù.(¿Ö³Ä¸é ±×°ÍÀº stdout¿¡ ÀÖÀ¸¹Ç·Î) 3.6. ¿¹: stderr ¿Í stdout ¿¡¼ file ¶ÀÌ°ÍÀº ÇÁ·Î±×·¥ÀÇ ¸ðµç Ãâ·ÂÀ» ÆÄÀÏ¿¡ ÀúÀåÇÒ °ÍÀÌ´Ù. ÀÌ°ÍÀº ´ç½ÅÀÌ Àý´ë·Î Á¶¿ëÈ÷ ¸í·ÉÀÌ ÁøÇàµÇ±â¸¦ ¿øÇÏ¸é ¶§¶§·Î cron ¿ä¼Ò¿¡ ÀûÇÕÇÏ´Ù.
rm -f $(find / -name core) &> /dev/nullÀÌ°ÍÀº(cron ¿ä¼Ò¿¡¼ »ý°¢Çϸé) ¸ðµç µð·ºÅ丮ÀÇ core ¶ó´Â ¸ð¸¥ ÆÄÀÏÀ» Áö¿ï °ÍÀÌ´Ù. ´ç½ÅÀº ´ç½ÅÀÌ ±× Ãâ·ÂÀ» Áö¿î´Ù¸é ¾î¶² ¸í·ÉÀÌ ½ÇÇàµÇ´ÂÁö ºÐ¸íÈ÷ ¾Ë°í ÀÖ¾î¾ß ÇÑ´Ù.
4. ÆÄÀÌÇÁ ¶ÀÌ ÀýÀº ÆÄÀÌÇÁ¸¦ ¾î¶»°Ô ¾²´ÂÁö ¸Å¿ì °£´ÜÇÏ°í ½Ç¿ëÀûÀÎ ¹æ¹ýÀ» ¼³¸íÇÏ°í, ¿Ö ´ç½ÅÀÌ ±×°ÍÀ» ¿øÇÒ °ÍÀÎÁö ¼³¸íÇÒ °ÍÀÌ´Ù.
4.1. ±×°ÍÀº ¹«¾ùÀΰ¡ ¿Ö ´ç½ÅÀº ±×°ÍÀ» »ç¿ëÇϱ⸦ ¿øÇÒ °ÍÀΰ¡ ¶ÆÄÀÌÇÁ´Â ´ç½ÅÀÌ ÇÁ·Î±×·¥ÀÇ Ãâ·ÂÀ» ´Ù¸¥ ÇÁ·Î±×·¥ÀÇ ÀÔ·ÂÀ¸·Î »ç¿ëÇÏ°Ô ÇÑ´Ù.
4.2. ¿¹: sed¿Í °£´ÜÇÑ ÆÄÀÌÇÁ ¶ÀÌ°ÍÀº ÆÄÀÌÇÁ¸¦ »ç¿ëÇÏ´Â °£´ÜÇÑ ¹æ¹ýÀÌ´Ù.
ls -l | sed -e "s/[aeio]/u/g"¿©±â¼, ¾Æ·¡ÀÇ »óȲÀÌ ¹ß»ýÇÑ´Ù. óÀ½¿¡ ls -l ¸í·ÉÀÌ ½ÇÇàµÇ°í, ±×°ÍÀÇ Ãâ·ÂÀÌ ÀμâµÇ´Â ´ë½Å ÇÁ·Î±×·¥¿¡ º¸³»Áø´Ù(ÆÄÀÌÇÁµÈ´Ù). °á±¹, ±×°ÍÀÌ ÇØ¾ß ÇÏ´Â °ÍÀ» ÀμâµÈ´Ù. 4.3. ¿¹: ´Ù¸¥ ls -l *.txt ¶¾Æ¸¶, ÀÌ°ÍÀº ls -l *.txt À» ½ÇÇàÇÏ´Â Á»´õ ´Ù¸¥ ¹æ¹ýÀÏ °ÍÀÌÁö¸¸, ÆÄÀÌÇÁ¸¦ ¹¦»çÇÏ·Á´Â °ÍÀÌÁö ÀÌ·± ¸®½ºÆà ¹®Á¦¸¦ Ç®·Á´Â °ÍÀÌ ¾Æ´Ï´Ù.
ls -l | grep "\.txt$"¿©±â¼, ls -l ÇÁ·Î±×·¥ÀÇ Ãâ·ÂÀÌ grep ÇÁ·Î±×·¥¿¡ º¸³»Á® °á±¹ Á¤±ÔÇ¥Çö½Ä "\.txt$" ¿¡ ¸Â´Â ÇàÀ» Ãâ·ÂÇÒ °ÍÀÌ´Ù. 5. º¯¼ö ¶´ç½ÅÀº ´Ù¸¥ ÇÁ·Î±×·¥ ¾ð¾îó·³ º¯¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÚ·áÇüÀº ¾ø´Ù. bashÀÇ º¯¼ö´Â ¼ýÀÚ, ¹®ÀÚ, ¹®ÀÚ¿À» Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù.
º¯¼ö¸¦ ¼±¾ðÇÒ ÇÊ¿ä´Â ¾øÀ¸¸ç, °ªÀ» ÂüÁ¶¿¡ ÇÒ´çÇϱ⸸ ÇÏ¸é º¯¼ö¸¦ »ý¼ºÇÑ´Ù.
5.1. ¿¹: º¯¼ö¸¦ »ç¿ëÇÑ Hello World! ¶#!/bin/bash STR="Hello World!" echo $STR µÑ ° ÁÙÀº STRÀ̶ó´Â º¯¼ö¸¦ »ý¼ºÇÏ°í "Hello World!"À» ÇÒ´çÇÑ´Ù. ±×·¯¸é ÀÌ º¯¼öÀÇ °ªÀº ¾Õ¿¡ ±âÈ£¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é, ±× ÇÁ·Î±×·¥ÀÇ Ãâ·ÂÀº ´Ù¸¦ °ÍÀÌ°í, °ÅÀÇ ´ç½ÅÀÌ ¿øÇÏ´Â ¹Ù°¡ ¾Æ´Ò °ÍÀÌ´Ù.
5.2. ¿¹: ¸Å¿ì °£´ÜÇÑ ¹é¾÷ ½ºÅ©¸³Æ®(Á¶±Ý ³ª¾ÆÁø °Í) ¶#!/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)
5.3. Áö¿ª º¯¼ö ¶Áö¿ª º¯¼ö´Â local Å°¿öµå¸¦ »ç¿ëÇÏ¿© »ý¼ºÇÒ ¼ö ÀÖ´Ù.
#!/bin/bash HELLO=Hello function hello { local HELLO=World echo $HELLO } echo $HELLO hello echo $HELLO ÀÌ ¿¹´Â ¾î¶»°Ô Áö¿ª º¯¼ö¸¦ »ç¿ëÇÏ´ÂÁö º¸¿©ÁØ´Ù.
6. Á¶°Ç¹® ¶Á¶°Ç¹®Àº ¾î¶² ÇൿÀ» ¼öÇàÇÒÁö ÇÏÁö ¾ÊÀ»Áö °áÁ¤ÇÏ°Ô ÇÏ°í, ÀÌ °áÁ¤Àº ½Ä¿¡ ÀÇÇØ ÀÌ·ç¾îÁø´Ù.
6.1. ½Ã½ÃÇÑ ÀÌ·Ð ¶Á¶°Ç¹®Àº ¿©·¯ Çü½ÄÀÌ ÀÖ´Ù. °¡Àå ±âº»ÀûÀÎ Çü½ÄÀº 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 6.2. ¿¹: ±âº» Á¶°Ç¹® if ... then ¶#!/bin/bash if [ "foo" = "foo" ]; then echo expression evaluated as true fi ÀÌ ÄÚµå´Â °ýÈ£ ¾ÈÀÇ ½ÄÀÌ ÂüÀ̸é then ´ÙÀ½¿¡¼ fi Àü±îÁöÀÇ Äڵ带 ½ÇÇàÇÑ´Ù.
6.3. ¿¹: ±âº» Á¶°Ç¹® if ... then ... else ¶#!/bin/bash if [ "foo" = "foo" ]; then echo expression evaluated as true else echo expression evaluated as false fi 6.4. º¯¼ö¸¦ °¡Áø Á¶°Ç¹® ¶#!/bin/bash T1="foo" T2="bar" if [ "$T1" = "$T2" ]; then echo expression evaluated as true else echo expression evaluated as false fi 7. for, while, until ¶ÀÌ Àý¿¡¼´Â for, while, until ¿¡ ´ëÇØ Ã£À» ¼ö ÀÖ´Ù.
for´Â ´Ù¸¥ ÇÁ·Î±×·¡¹Ö ¾ð¾î¿Í ´Ù¸£´Ù. ±âº»ÀûÀ¸·Î, ÇÑ ¹®ÀÚ¿ ¾È¿¡ ÀÖ´Â ´Ü¾îÀÇ ¿À» ¹Ýº¹ÇÏ°Ô ÇÑ´Ù.
whileÀº ¸¸¾à Á¦¾î ½ÄÀÌ ÂüÀÏ ¶§ Äڵ带 ½ÇÇàÇÏ°í, °ÅÁþÀÏ ¶§(¶Ç´Â ½ÇÇàµÇ´Â Äڵ忡¼ ¸í½ÃÀûÀÎ break¸¦ ã¾ÒÀ» ¶§)´Â ³¡³´Ù.
untilÀº Á¦¾îÄڵ尡 °ÅÁþÀ¸·Î Æò°¡ µÇ´Â µ¿¾È ½ÇÇàµÂ´Â °Í¸¸ Á¦¿ÜÇÏ°í while°ú °ÅÀÇ °°´Ù.
¸¸¾à ´ç½ÅÀÌ while°ú untilÀÌ ¸Å¿ì ºñ½ÁÇÏ´Ù´Â °É ´«Ä¡Ã«´Ù¸é ´ç½ÅÀº Á¦´ë·Î º» °ÍÀÌ´Ù.
7.1. for ¿¹ ¶#!/bin/bash for i in $( ls ); do echo item: $i done µÑ° ÁÙ¿¡¼ i¸¦ º¯¼ö·Î ¼±¾ðÇÏ°í $(ls)¾È¿¡ Æ÷ÇÔµÈ ´Ù¸¥ °ªÀ» ¾ò´Â´Ù.
¼¼Â° ÁÙÀº ÇÊ¿äÇÏ¸é ´õ ±æ¾îÁú ¼öµµ ÀÖ´Ù. Áï done ÀÌÀü¿¡ ´õ ¸¹Àº ÁÙÀÌ ÀÖÀ» ¼ö ÀÖ´Ù.
done Àº $iÀÇ °ªÀÌ »ç¿ëµÇ´Â °ÍÀÌ ³¡³µ°í $i°¡ »õ·Î¿î °ªÀ» ¾òÀ» ¼ö ÀÖÀ½À» °¡¸®Å²´Ù.
7.2. C ºñ½ÁÇÑ for ¶fiesh°¡ ÀÌ Çü½ÄÀ» ´õÇÏ´Â °ÍÀ» Á¦¾ÈÇß´Ù. C/Perl °ú ºñ½ÁÇÑ for ÀÌ´Ù.
#!/bin/bash for i in `seq 1 10`; do echo $i done 7.3. while ¿¹ ¶#!/bin/bash COUNTER=0 while [ $COUNTER -lt 10 ]; do echo The counter is $COUNTER let COUNTER=COUNTER+1 done ÀÌ ½ºÅ©¸³Æ®´Â Àß ¾Ë·ÁÁø(C, Pascal, perl, µî) for ±¸Á¶¸¦ Èä³»³½´Ù.
7.4. until ¿¹ ¶#!/bin/bash COUNTER=20 until [ $COUNTER -lt 10 ]; do echo COUNTER $COUNTER let COUNTER-=1 done 8. ÇÔ¼ö ¶°ÅÀÇ ¸ðµç ÇÁ·Î±×·¥ ¾ð¾î¿¡¼ ó·³, ´ç½ÅÀº Á»´õ ³í¸®ÀûÀÎ ¹æ¹ýÀ¸·Î ÄÚµåÀÇ Á¶°¢µéÀ» ¹°Å³ª Àç±ÍÀÇ ±â¼úÀ» ½ÇÇàÇϱâ À§ÇØ ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
ÇÔ¼ö¸¦ ¼±¾ðÇÏ´Â °ÍÀº ´ë·« ³»_ÇÔ¼ö {³»_ÄÚµå} À¸·Î ¾²´Â °ÍÀÌ´Ù.
ÇÔ¼ö¸¦ È£ÃâÇÏ´Â °ÍÀº ´Ù¸¥ ÇÁ·Î±×·¥Ã³·³ ´ç½ÅÀÌ ±× À̸§À» ¾²´Â °ÍÀÌ´Ù.
8.1. ÇÔ¼ö ¿¹ ¶#!/bin/bash function quit { exit } function hello { echo Hello! } hello quit echo foo µÑ° - ³×° ÁÙÀº quit ÇÔ¼ö¸¦ Æ÷ÇÔÇÑ´Ù. ´Ù¼¸Â° - ÀÏ°ö°ÁÙÀº hello ÇÔ¼ö¸¦ Æ÷ÇÔÇÑ´Ù. ¸¸¾à ÀÌ ½ºÅ©¸³Æ®°¡ ¹«¾ùÀ» ÇÏ´ÂÁö Àß ¸ð¸£°ÚÀ¸¸é ²À ÇØ º¸½Ã¿À.
ÇÔ¼ö´Â ƯÁ¤ÇÑ ¼ø¼·Î ¼±¾ðµÉ ÇÊ¿ä´Â ¾ø´Ù.
½ºÅ©¸³Æ®¸¦ ½ÇÇà½ÃÅ°¸é ¿ì¼± ´ÙÀ½À» ÁÖ¸ñÇ϶ó. ÇÔ¼ö hello°¡ È£ÃâµÇ¸é quit ÇÔ¼ö°¡ È£ÃâµÇ°í, ÇÁ·Î±×·¥Àº ¿Â° ÁÙ¿¡ µµ´ÞÇÏÁö ¸øÇÑ´Ù.
8.2. ¸Å°³º¯¼ö¸¦ °¡Áø ÇÔ¼ö ¿¹ ¶#!/bin/bash function quit { exit } function e { echo $1 } e Hello e World quit echo foo ÀÌ ½ºÅ©¸³Æ®´Â ù¹ø° °Í°ú °ÅÀÇ °°´Ù. ÁÖµÈ Â÷ÀÌ´Â ÇÔ¼ö eÀÌ´Ù. ÀÌ ÇÔ¼ö´Â ¹ÞÀº ¸Å°³º¯¼ö¸¦ Ãâ·ÂÇÑ´Ù. ÇÔ¼ö¿¡¼´Â ¸Å°³º¯¼ö´Â ½ºÅ©¸³Æ®¿¡ ÁÖ¾îÁø ¸Å°³º¯¼ö¿Í °°Àº ¹æ¹ýÀ¸·Î ´Ù·ç¾îÁø´Ù.
9.1. °£´ÜÇÑ ¸Þ´º¸¦ À§ÇÑ 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±¸Á¶¿Í ºñ½ÁÇÏ´Ù. ÀÌ°ÍÀº »ç¿ëÀÚ ÀÀ´äÀ» ±â´Ù¸°´Ù.
9.2. ¸í·ÉÇà »ç¿ëÇϱ⠶#!/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)À» ¹Þ¾Ò´ÂÁö üũÇÏ°í ¹ÞÁö ¾Ê¾ÒÀ¸¸é ³¡³»°í, »ç¿ëÀÚ¿¡°Ô °£´ÜÇÑ »ç¿ë¹ý ¸Þ½ÃÁö¸¦ º¸¿©ÁØ´Ù. ³ª¸ÓÁö ºÎºÐÀº ¸íÈ®ÇÏ´Ù.
10.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 !" 10.2. »ê¼ú Æò°¡ ¶¸í·ÉÇà(¶Ç´Â ¼Ð)¿¡¼ ÀÌ°ÍÀ» ½ÃµµÇØ º¸¶ó.
echo 1 + 1 ´ç½ÅÀÌ 2¸¦ ±â´ëÇß´Ù¸é ±â´ë°¡ ¾î±ß³¯ °ÍÀÌ´Ù. ´ç½ÅÀº BASH°¡ ¾î¶² ¼ö¸¦ °è»êÇϱ⸦ ¿øÇÑ´Ù¸é ¾î¶»°Ô ÇØ¾ß ÇÒ±î? ´äÀÌ ÀÌ°ÍÀÌ´Ù.
echo $((1+1)) ÀÌ°ÍÀº Á» ´õ ³í¸®ÀûÀÎ Ãâ·ÂÀ» ¸¸µé °ÍÀÌ´Ù. ÀÌ°ÍÀº »ê¼ú½ÄÀ» °è»êÇÑ °ÍÀÌ´Ù. ´ç½ÅÀº ÀÌ°ÍÀ» ÀÌ·¸°Ô ÇÒ ¼ö ÀÖ´Ù.
echo $[1+1] ´ç½ÅÀÌ ºÐ¼ö¸¦ »ç¿ëÇϱ⠿øÇÑ´Ù¸é, ¶Ç´Â ¼öÇÐ ¶Ç´Â ´ç½ÅÀÌ ±×°ÍÀ» ¿øÇϱ⸸ ÇÑ´Ù¸é, ´ç½ÅÀº »ê¼ú½ÄÀ» °è»êÇϱâ À§ÇØ bc¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
¸¸¾à
echo $[3/4] À» ½ÇÇàÇÑ´Ù¸é, 0À» ¹ÝȯÇÒ °ÍÀÌ´Ù. ¿Ö³ÄÇϸé, bash´Â ´äÇÒ¶§ Á¤¼ö¸¸À» »ç¿ëÇϱ⠶§¹®ÀÌ´Ù. echo 3/4|bc -l À» ½ÇÇàÇϸé 0.75¸¦ ¹ÝȯÇÒ °ÍÀÌ´Ù.
10.3. 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'¸¦ ½ÃµµÇØ º¼ ¼öµµ ÀÖ´Ù.
10.4. ÇÁ·Î±×·¥ÀÇ ¹Ýȯ°ª ¾ò±â ¶bash¿¡¼, ÇÁ·Î±×·¥ÀÇ ¹Ýȯ°ªÀº ƯÁ¤ÇÑ º¯¼ö $? ¿¡ ÀúÀåµÈ´Ù.
ÀÌ°ÍÀº ¾î¶»°Ô ÇÁ·Î±×·¥ÀÇ ¹Ýȯ°ªÀ» ¾î¶»°Ô Àâ´ÂÁö ¹¦»çÇÑ´Ù. ³ª´Â µð·ºÅ丮 µ¥ÀÌÅÍ°¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù°í °¡Á¤Çß´Ù.(ÀÌ ¶ÇÇÑ mike°¡ Á¦¾ÈÇß´Ù)
#!/bin/bash cd /dada &> /dev/null echo rv: $? cd $(pwd) &> /dev/null echo rv: $? 10.5. ¸í·É Ãâ·Â Àâ±â ¶ÀÌ ÀÛÀº ½ºÅ©¸³Æ®´Â ¸ðµç µ¥ÀÌÅͺ£À̽ºÀÇ Å×À̺íÀº º¸¿©ÁØ´Ù.(MySQLÀÌ ¼³Ä¡µÇ¾ú´Ù°í °¡Á¤ÇÑ´Ù). ¶ÇÇÑ, ¿Ã¹Ù¸¥ »ç¿ëÀÚ¿Í Æнº¿öµå¸¦ »ç¿ëÇÏ¿©'mysql'À» »ç¿ëÇÑ´Ù°í °¡Á¤ÇÑ´Ù.
#!/bin/bash DBS=`mysql -uroot -e"show databases"` for b in $DBS ; do mysql -uroot -e"show tables from $b" done 11.1. ¹®ÀÚ¿ ºñ±³ ¿¬»êÀÚ ¶(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
11.2. ¹®ÀÚ¿ ºñ±³ ¿¹ ¶µÎ ¹®ÀÚ¿ ºñ±³
#!/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 ÀÌ°ÍÀº $S1 ¶Ç´Â $S2 °¡ ºñ¾úÀ» ¶§´Â ±×´ÙÁö ÁÁÀº »ý°¢Àº ¾Æ´Ñµ¥ ±×·² °æ¿ì parse ¿¡·¯°¡ ³¯ °ÍÀÌ´Ù. x$1=x$2 ¶Ç´Â "$1"="$2" °¡ ³´´Ù.
11.4. »ê¼ú °ü°è ¿¬»êÀÚ ¶-lt (<)
-gt (>)
-le (<=)
-ge (>=)
-eq (==)
-ne (!=)
C ÇÁ·Î±×·¡¸Ó´Â ÀÌ ¿¬»êÀÚ¸¦ ÇØ´çÇÏ´Â °ýÈ£¿¡ ÀÖ´Â °Í¿¡ ´ëÀÀ½Ãų ¼ö ÀÖ°Ú´Ù.
11.5. ¾µ¸¸ÇÑ ¸í·É¾î ¶ÀÌ ÀýÀº Kees°¡ ´Ù½Ã ½è´Ù. ÀÌ ¸í·É¾îµéÀº ´ë°³ ¿ÏÀüÇÑ ÇÁ·Î±×·¥ ¾ð¾î¸¦ Æ÷ÇÔÇÑ´Ù. ÀÌ ¸í·É¾îµéÀº ´ÜÁö ±âº»¸¸ ¼³¸íÇÑ´Ù. Á» ´õ ÀÚ¼¼ÇÑ ¼³¸íÀ» À§Çؼ´Â °¢ ¸í·É¾îÀÇ man ÆäÀÌÁö¸¦ º¸¶ó.
sed (stream editor)
sed ´Â ºñ´ëÈÇü ÆíÁý±â´Ù. ȸ鿡¼ Ä¿¼¸¦ ¿Å°Ü ÆÄÀÏÀ» º¯°æÇÏ´Â ´ë½Å ¸í·É ÆíÁý ½ºÅ©¸³Æ®·Î sed¸¦ »ç¿ëÇÏ¿© ÆíÁýÇÒ ÆÄÀÏÀÇ À̸§À» Ãß°¡ÇÒ ¼ö ÀÖ´Ù. sed¸¦ ÇÊÅÍ·Î ¼³¸íÇÒ ¼öµµ ÀÖ´Ù. ¸î °³ÀÇ ¿¹¸¦ º¸ÀÚ
$sed 's/to_be_replaced/replaced/g' /tmp/dummysed´Â /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¿¡¼ °¡Á®¿Ô´Ù.
|
Your domestic life may be harmonious. |