BASH ÇÁ·Î±×·¡¹Ö ÀÔ¹® ÇÏ¿ìÅõ by Mike G mikkey@dynamo.com.ar v0.07, 22 June 2000 ÀÌ ¹®¼­´Â ´ç½ÅÀÌ ±âÃÊÀûÀÎ ¼Ð ½ºÅ©¸³Æ® ÇÁ·Î±×·¡¹ÖÀ» ½ÃÀÛÇÏ´Â °ÍÀ» µµ¿Í ÁÖ±â À§ÇØ ¾²·Á°í ÇÑ´Ù. ÀÌ°ÍÀº Á¦¸ñÀ» º¸¸é ¾Ë°ÚÁö¸¸ ¾î´À Á¤µµ ´É¼÷ÇÑ »ç¶÷À» À§ÇÑ °ÍÀº ¾Æ´Ï´Ù. ³ª´Â ¶Ù¾î³ª°Å³ª ȤÀº Àü¹®ÀûÀÎ ½© ÇÁ·Î±×·¡¸Ó°¡ ¾Æ´Ï°í, ³»°¡ ´õ ¸¹ÀÌ ¹è¿ì°Ô µÉ °ÍÀÎ µ¿½Ã¿¡ ´Ù¸¥ »ç¶÷µé¿¡°Ô À¯¿ëÇÒ °ÍÀ̹ǷΠ¾²°í ÀÖ´Â °Í »ÓÀÌ´Ù. ¾î¶² Áú¹® ȤÀº ÷°¡ÇÒ ³»¿ëÀÌ¶óµµ Á¦¾ðÇØ ÁØ´Ù¸é ±×µé Áß¿¡ ÀϺδ ÀÌ ¹®¼­ Ãß°¡ ¹öÀü¿¡ Æ÷Ç﵃ °ÍÀÌ´Ù. ______________________________________________________________________ ¸ñÂ÷ 1. ½ÃÀÛÇϸ鼭 1.1 ÀÌ ¹®¼­ÀÇ ÃֽŠ¹öÀüÀ» ÀÔ¼öÇÏ·Á¸é 1.2 ÇÊ¿äÇÑ ¿ä°Ç 1.3 ÀÌ ¹®¼­ÀÇ È°¿ë 2. ±âÃÊÀûÀÎ ½ºÅ©¸³Æ® 2.1 °íÀüÀûÀÎ hello world ½ºÅ©¸³Æ® 2.2 ¾ÆÁÖ °£´ÜÇÑ ¹é¾÷ ½ºÅ©¸³Æ® 3. ¸®µð·º¼ÇÀÇ ¸ðµç °Í 3.1 Á¤ÀÇ¿Í °£´ÜÇÑ ¸ñÂ÷ 3.2 ¿¹Á¦ : Ç¥ÁØ Ãâ·ÂÀ» ÆÄÀÏ·Î 3.3 ¿¹Á¦ : Ç¥ÁØ ¿¡·¯¸¦ ÆÄÀÏ·Î 3.4 ¿¹Á¦ : Ç¥ÁØ Ãâ·ÂÀ» Ç¥ÁØ ¿¡·¯·Î 3.5 ¿¹Á¦ : Ç¥ÁØ ¿¡·¯¸¦ Ç¥ÁØ Ãâ·ÂÀ¸·Î 3.6 ¿¹Á¦ : Ç¥ÁØ ¿¡·¯¿Í Ç¥ÁØ Ãâ·ÂÀ» ÆÄÀÏ·Î 4. ÆÄÀÌÇÁ 4.1 ÆÄÀÌÇÁÀÇ ¿ªÇÒ°ú ±×°ÍÀ» »ç¿ëÇÏ´Â ÀÌÀ¯ 4.2 ¿¹Á¦ : sed¸¦ »ç¿ëÇÑ °£´ÜÇÑ ÆÄÀÌÇÁ 4.3 ¿¹Á¦ : ls -l *.txt ¿¡ ´ëÇÑ ¾çÀÚÅÃÀÏ 5. º¯¼ö 5.1 ¿¹Á¦: º¯¼ö¸¦ »ç¿ëÇÑ Hello World! 5.2 ¿¹Á¦: Á¶±Ý ´õ °³·®µÈ ¾ÆÁÖ °£´ÜÇÑ ¹é¾÷ ½ºÅ©¸³Æ® 5.3 Áö¿ª º¯¼ö 6. Á¶°Ç¹® 6.1 °£´ÜÈ÷ ¸»Çؼ­.... 6.2 ¿¹Á¦ : if .. then À» »ç¿ëÇÏ´Â ±âº»ÀûÀΠǥÇö 6.3 ¿¹Á¦ : if .. then ... else ¸¦ »ç¿ëÇÏ´Â ±âº»ÀûÀΠǥÇö 6.4 ¿¹Á¦ : º¯¼ö¸¦ »ç¿ëÇÏ´Â Á¶°Ç¹® 7. for, while ±×¸®°í until À» »ç¿ëÇÏ´Â ·çÇÁ 7.1 For ¸¦ »ç¿ëÇÏ´Â ¿¹ 7.2 C¿Í »ç¿ë¹ýÀÌ ºñ½ÁÇÑ for 7.3 While À» »ç¿ëÇÏ´Â ¿¹ 7.4 Until À» »ç¿ëÇÏ´Â ¿¹ 8. ÇÔ¼ö 8.1 ÇÔ¼ö ¿¹Á¦ 8.2 ¸Å°³º¯¼ö°¡ µé¾î°¡´Â ÇÔ¼ö ¿¹Á¦ 9. »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º 9.1 ´Ü¼øÇÑ ¸Þ´º¸¦ ¸¸µé±â À§ÇÑ select ¹® ÀÌ¿ëÇϱâ 9.2 ¸í·ÉÇàÀ» ÀÌ¿ëÇϱâ 10. ´õ ¸¹ÀÌ ¾Ë±â 10.1 read ¹®À¸·Î »ç¿ëÀÚ ÀÔ·Â ¹Þ±â 10.2 »ê¼úÀûÀÎ °è»ê 10.3 bash¸¦ ã±â 10.4 ÇÁ·Î±×·¥ÀÌ µÇµ¹¸®´Â °ª ¹Þ±â 10.5 ¸í·ÉÀÇ °á°ú ĸóÇϱâ 10.6 ´ÙÁß ¼Ò½º ÆÄÀÏ 11. Ç¥ 11.1 ¹®ÀÚ¿­ ºñ±³ ¿¬»êÀÚ 11.2 ¹®ÀÚ¿­ ºñ±³ÀÇ ¿¹Á¦ 11.3 »ê¼ú ¿¬»êÀÚ 11.4 »ê¼ú °ü°è ¿¬»êÀÚ 11.5 À¯¿ëÇÑ ¸í·Éµé 12. ´Ù¸¥ ½ºÅ©¸³Æ®µé 12.1 µð·ºÅ丮 ¾ÈÀÇ ¸ðµç ÆÄÀÏ¿¡ Àû¿ëÇϱâ 12.2 ¾ÆÁÖ °£´ÜÇÑ ¹é¾÷ ½ºÅ©¸³Æ®(Á¶±Ý ´õ ³ª¾ÆÁø °Í) 12.3 ÆÄÀÏ À̸§À» ¹Ù²ã ÁÖ´Â ½ºÅ©¸³Æ® 12.4 ÆÄÀÏ À̸§À» ¹Ù²ã ÁÖ´Â ½ºÅ©¸³Æ®(°£´ÜÇÑ °Í) 13. ¹®Á¦°¡ »ý°åÀ» ¶§ 13.1 BASH¸¦ È£ÃâÇÏ´Â ¹æ¹ýµé 14. ÀÌ ¹®¼­¿¡ °üÇÏ¿© 14.1 ³»¿ëÀÇ º¸Áõ 14.2 Thanks to 14.3 °»½Å 14.4 ´õ ¸¹Àº Á¤º¸ ______________________________________________________________________ 1. ½ÃÀÛÇϸ鼭 1.1. ÀÌ ¹®¼­ÀÇ ÃֽŠ¹öÀüÀ» ÀÔ¼öÇÏ·Á¸é ´ÙÀ½À» ÂüÁ¶Ç϶ó.(¿µ¾îÀÓ) http://www.linuxdoc.org/HOWTO/Bash-Prog-Intro-HOWTO.html 1.2. ÇÊ¿äÇÑ ¿ä°Ç GNU/Linux ¸í·É ü°è¿¡ Àͼ÷ÇÏ°í ±âÃÊÀûÀÎ ÇÁ·Î±×·¡¹Ö °³³äµéÀ» ¾Ë°í ÀÖÀ¸¸é µµ¿òÀÌ µÈ´Ù. ÀÌ°ÍÀº ±âÃÊÀûÀÎ ÇÁ·Î±×·¡¹Ö °­Á°¡ ¾Æ´Ï±â ¶§¹®¿¡ ÃÖ¼ÒÇÑÀÇ ±âº» °³³äÀº ÀÖ¾î¾ß ÇÏ´Â °ÍÀÌ´Ù. 1.3. ÀÌ ¹®¼­ÀÇ È°¿ë ÀÌ ¹®¼­´Â ´ÙÀ½°ú °°Àº »óȲ¿¡¼­ À¯¿ëÇÏ°Ô »ç¿ëµÇ¾îÁú ¼ö ÀÖ´Ù. ? ´ç½ÅÀÌ ÇÁ·Î±×·¡¹Ö¿¡ °üÇÑ ¾ÆÀ̵ð¾î°¡ ¶°¿Ã¶ó ±×°ÍÀ» ¼Ð ½ºÅ©¸³Æ®·Î ÀÛ¼ºÇÏ ±â¸¦ ¿øÇÒ ¶§ ? ´ç½ÅÀÌ ¼Ð ÇÁ·Î±×·¡¹Ö¿¡ °üÇÑ ¸·¿¬ÇÑ Áö½Ä¸¸À» °¡Áö°í ÀÖ°í, ±×¿¡ ´ëÇÑ Á¤¸®°¡ ÇÊ¿äÇÏ´Ù°í ´À³¥ ¶§. ? ´ç½ÅÀÌ ´ç½ÅÀÇ ÇÁ·Î±×·¥À» ½ÃÀÛÇϱ⿡ ¾Õ¼­ Âü°íÇÒ ¸»µé°ú ¿¹Á¦ ½ºÅ©¸³Æ®µéÀ» º¸±â¸¦ ¿øÇÒ ¶§. ? ´ç½ÅÀÌ µµ½º³ª À©µµ¿¡¼­ÀÇ ¹èÄ¡ ÆÄÀÏÀ» ¸¸µé±â¸¦ ¿øÇϰųª ȤÀº ÀÌ¹Ì ¸¸µé¾î º¸¾ÒÀ» °æ¿ì. ? ´ç½ÅÀÌ ¿Ïº®ÇÑ ¹Ùº¸¶ó¼­, ¸ðµç ÇÏ¿ìÅõ¸¦ ´Ù ÀÐ¾î ºÁ¾ß Á÷¼ºÀÌ Ç®¸®´Â °æ¿ì.-_- 2. ±âÃÊÀûÀÎ ½ºÅ©¸³Æ® ÀÌ HOW-TO ´Â ´ç½ÅÀÇ shell ÇÁ·Î±×·¡¹Ö¿¡ ÀÖ¾î ÈùÆ®¸¦ ÁÖ±â À§ÇØ ¿¹Á¦¿¡ ±âÃÊÇÏ°í ÀÖ´Ù. ÀÌ ¼½¼Ç¿¡¼­ ´ç½ÅÀº ´ç½ÅÀÌ ¸î¸î Å×Å©´ÐÀ» ÀÌÇØÇÏ´Â µ¥ ÀÖ¾î µµ¿òÀÌ µÉ °£´ÜÇÑ ½ºÅ©¸³Æ®µéÀ» º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. 2.1. °íÀüÀûÀÎ hello world ½ºÅ©¸³Æ® #!/bin/bash echo Hello World ÀÌ ½ºÅ©¸³Æ®ºz µü µÎ ÁÙ·Î ÀÌ·ç¾îÁ® ÀÖ´Ù. ù ¹ø° ÁÙ¿¡¼­´Â ÀÌ ÆÄÀÏÀ» ½ÇÇàÇÏ´Â µ¥ ÇÊ¿äÇÑ ÇÁ·Î±×·¥ÀÌ ½Ã½ºÅÛ ¾îµð¿¡ ÀÖ´ÂÁöÀÇ °æ·Î¸¦ Àû¾îÁØ´Ù. µÎ ¹ø° ÁÙÀº ¿ÀÁ÷ ½ÇÇàÀ» À§ÇÑ ºÎºÐÀ¸·Î "Hello World"¸¦ ÅÍ¹Ì³Î»ó¿¡ Ãâ·ÂÇÏ´Â °ÍÀÌ´Ù. 2.2. ¾ÆÁÖ °£´ÜÇÑ ¹é¾÷ ½ºÅ©¸³Æ® #!/bin/bash tar -cZf /var/my-backup.tgz /home/me/ ÀÌ ½ºÅ©¸³Æ®¿¡¼­ Å͹̳ο¡ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÏ´Â °ÍÀº Á¦¿ÜÇÏ°í, ¿ì¸®´Â ¿ì¸®ÀÇ È¨ µð·ºÅ丮¸¦ tar·Î ¹­Àº ÆÄÀÏÀ» »ý¼ºÇÏ´Â °ÍÀÌ´Ù. ÀÌ°ÍÀº »ç¿ëÇÒ¸¸ÇÑ °ÍÀº ¸ø µÈ´Ù. »ç¿ëÇÒ¸¸ÇÑ ¹é¾÷ ½ºÅ©¸³Æ®´Â ÀÌ ¹®¼­ÀÇ ´õ µÞ ºÎºÐ¿¡ ³ª¿À°Ô µÉ °ÍÀÌ´Ù. 3. ¸®µð·º¼ÇÀÇ ¸ðµç °Í 3.1. Á¤ÀÇ¿Í °£´ÜÇÑ ¸ñÂ÷ 3°¡ÁöÀÇ ÆÄÀÏ ¼­¼úÀÚ°¡ ÀÖ´Ù. Ç¥ÁØ ÀÔ·Â, Ç¥ÁØ Ãâ·Â, Ç¥ÁØ ¿¡·¯°¡ ±×°ÍÀÌ´Ù. ±âº»ÀûÀ¸·Î ´ç½ÅÀÌ ÇÒ ¼ö ÀÖ´Â °ÍÀº ´ÙÀ½°ú °°´Ù.: 1. Ç¥ÁØ Ãâ·ÂÀ» ÆÄÀÏ·Î º¸³»±â 2. Ç¥ÁØ ¿¡·¯¸¦ ÆÄÀÏ·Î º¸³»±â 3. Ç¥ÁØ Ãâ·ÂÀ» Ç¥ÁØ ¿¡·¯·Î º¸³»±â 4. Ç¥ÁØ ¿¡·¯¸¦ Ç¥ÁØ Ãâ·ÂÀ¸·Î º¸³»±â 5. Ç¥ÁØ ¿¡·¯¿Í Ç¥ÁØ Ãâ·ÂÀ» ÆÄÀÏ·Î º¸³»±â 6. Ç¥ÁØ ¿¡·¯¿Í Ç¥ÁØ Ãâ·ÂÀ» Ç¥ÁØ Ãâ·ÂÀ¸·Î º¸³»±â 7. Ç¥ÁØ ¿¡·¯¿Í Ç¥ÁØ Ãâ·ÂÀ» Ç¥ÁØ ¿¡·¯·Î º¸³»±â 1 'represents' stdout and 2 stderr. À̰͵éÀ» º¸´Â µ¥ ´ëÇØ °£´ÜÈ÷ ±º¼Ò¸®¸¦ ºÙÀÌÀÚ¸é : ´õ ÀûÀº ¸í·É¾î¸¦ »ç¿ëÇÏ¿© ´ç½ÅÀº Ç¥ÁØ Ãâ·Â(¹öÆÛ¿¡´Â ³²¾Æ ÀÖ´Â)°ú Ç¥ÁØ ¿¡·¯¸¦ È­¸é»ó¿¡¼­ º¼ ¼ö ÀÖÁö¸¸, ´ç½ÅÀÌ ``Àü¹ÝÀûÀ¸·Î º¸·Á'' ÇÏ´Â °ÍÀº ¹öÆÛ¿¡¼­ Áö¿öÁú °ÍÀÌ´Ù. 3.2. ¿¹Á¦ : Ç¥ÁØÃâ·ÂÀ» ÆÄÀÏ·Î ÀÌ°ÍÀº ¾î¶² ÇÁ·Î±×·¥ÀÇ ½ÇÇà °á°ú¸¦ ÆÄÀÏ·Î Ãâ·ÂÇÏ´Â ¹æ¹ýÀÌ´Ù. ls -l > ls-l.txt ÀÚ, ÀÌ 'ls-l.txt'¶ó ºÒ¸®´Â ÆÄÀÏÀÌ ´ç½ÅÀÌ 'ls -l'ÀÇ ¸í·ÉÀ» ½ÇÇàÇÏ¿´À» ¶§ È­¸é¿¡¼­ º¼ ¼ö ÀÖ´Â ³»¿ëÀ» Æ÷ÇÔÇÏ´Â »óÅ·Π»ý¼ºµÉ °ÍÀÌ´Ù. 3.3. ¿¹Á¦ : Ç¥ÁØ¿¡·¯¸¦ ÆÄÀÏ·Î ÀÌ°ÍÀº ¾î¶² ÇÁ·Î±×·¥ÀÇ Ç¥ÁØ ¿¡·¯ÀÇ Ãâ·ÂÀ» ÆÄÀÏ¿¡ ¾²´Â ¹æ¹ýÀÌ´Ù. grep da * 2> grep-errors.txt ÀÚ, ÀÌÁ¦ 'grep-errors.txt' ¶ó´Â ÆÄÀÏÀÌ ¸¸µé¾î Áú °ÍÀÌ°í ÀÌ°ÍÀº ´ç½ÅÀÌ ¿ø·¡´Â 'gerp da *' ÀÇ ¸í·ÉÀ» ³»·Á¼­ È­¸é¿¡ Ãâ·ÂµÇ¾úÀ» Ç¥ÁØ ¿¡·¯¹®À» Æ÷ÇÔÇÏ°í ÀÖÀ» °ÍÀÌ´Ù. 3.4. ¿¹Á¦ : Ç¥ÁØ Ãâ·ÂÀ» Ç¥ÁØ ¿¡·¯·Î ÀÌ°ÍÀº ¾î´À ÇÁ·Î±×·¥ÀÇ Ç¥ÁØ ¿¡·¯ Ãâ·ÂÀ», ÁöÁ¤µÈ ÆÄÀÏ¿¡ ±â·ÏÇÏ´Â ´ë½Å Ç¥ÁØ Ãâ·ÂÀ¸·Î º¸ÀÌ´Â °ÍÀÌ´Ù. grep da * 1>&2 ÀÚ, ¸í·ÉÀÇ Ç¥ÁØ Ãâ·Â ÇüÅ°¡ Ç¥ÁØ ¿¡·¯¿¡°Ô º¸³»Á³´Ù. ´ç½ÅÀº ÀÌ°ÍÀ» ´Ù¸¥ ¹æ¹ýÀ¸·Îµµ ÀÀ¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. 3.5. ¿¹Á¦ : Ç¥ÁØ ¿¡·¯¸¦ Ç¥ÁØ Ãâ·ÂÀ¸·Î. ÀÌ°ÍÀº ÇÁ·Î±×·¥¿¡¼­ÀÇ Ç¥ÁØ ¿¡·¯ÀÇ Ãâ·ÂÀ» ÁöÁ¤µÈ ÆÄÀÏ¿¡ ±â·ÏÇÏ´Â ´ë½Å Ç¥ÁØ Ãâ·ÂÀ¸·Î º¸ÀÌ´Â °ÍÀÌ´Ù. grep * 2>&1 ÀÚ, ¸í·ÉÀÇ Ç¥ÁØ ¿¡·¯ »óÅ°¡ Ç¥ÁØ Ãâ·Â¿¡°Ô º¸³»Á³´Ù. ¸¸¾à ´ç½ÅÀÌ Á» ´õ ÁÙÀ̱â À§ÇØ ÆÄÀÌÇÁ¸¦ »ç¿ëÇÑ´Ù¸é ´ç½ÅÀº Á¤»óÀûÀ¸·Î´Â ¼Ò¸êµÈ ÁÙ(Ç¥ÁØ ¿¡·¯ ·Î¼­ ¾²¿©Áö´Â °Íµé)ÀÌ Ç¥ÁØ Ãâ·ÂÀ¸·Î¼­ ´« ¾Õ¿¡ º¸ÀÌ´Â °ÍÀ» º¸°Ô µÉ °ÍÀÌ´Ù. 3.6. ¿¹Á¦ : Ç¥ÁØ Ãâ·Â°ú Ç¥ÁØ ¿¡·¯¸¦ ÆÄÀÏ·Î. ÀÌ°ÍÀº ÇÁ·Î±×·¥ÀÇ ¸ðµç Ãâ·ÂÀ» ÆÄÀÏ·Î º¸³¾ °ÍÀÌ´Ù. ÀÌ°ÍÀº ¾î¶² ¸í·ÉÀÌ Á¶¿ëÈ÷ ½ÇÇàµÇ°í ³Ñ¾î°¡±â¸¦ ¿øÇÒ 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À» ½ÇÇàÇÏ¿© ±× °á°ú¸¦ È­¸é¿¡ Ãâ·ÂÇÏ´Â ´ë½Å, ÆÄÀÌÇÁ¸¦ ÅëÇØ sed ÇÁ·Î±×·¥À¸·Î º¸³»¾î sed±îÁö ½ÇÇàµÈ °á°ú¸¦ Ãâ·ÂÇÏ°Ô µÈ´Ù. 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 µÎ¹ø° ÁÙÀº "Hello World!"¶ó´Â ¹®ÀÚ¿­À» ´ëüÇÏ´Â º¯¼ö STRÀ» »ý¼ºÇÑ´Ù. ±×¸®°í ÀÌ º¯¼öÀÇ °ªÀº $À̶ó´Â ¹®ÀÚ°¡ º¯¼öÀÇ ¾Õ¿¡ ³õÀÏ ¶§ »ç¿ëµÈ´Ù. ÁÖÀÇÇÒ °ÍÀº ¸¸¾à ´ç½ÅÀÌ $ Ç¥½Ã¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é Ãâ·ÂµÇ´Â ÇÁ·Î±×·¥ÀÇ °á°ú´Â ´ç½ÅÀÌ ¿øÇÏ´ø °Í°ú´Â »ç¹µ ´Ù¸¦ °ÍÀ̶ó´Â Á¡ÀÌ´Ù. 5.2. ¿¹Á¦ : Á¶±Ý ´õ °³·®µÈ ¾ÆÁÖ °£´ÜÇÑ ¹é¾÷ ½ºÅ©¸³Æ® #!/bin/bash OF=/var/my-backup-$(date +%Y%m%d).tgz tar -cZf $OF /home/me/ ÀÌ ½ºÅ©¸³Æ®´Â ´Ù¸¥ °ÍÀ» ¼Ò°³ÇÏ°í ÀÖ´Ù. ¸ÕÀú, ´ç½ÅÀº µÎ¹ø° ÁÙ¿¡¼­ º¯¼ö¸¦ ¼±¾ð¶ó´Â Àͼ÷ÇÑ ¸ð½ÀÀ» º¸°Ô µÈ´Ù. ÀÌ Ç¥Çö¿¡¼­ÀÇ ÁÖÀÇÇÒ Á¡Àº ´ç½ÅÀÌ ÀÌ ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇϸé ÀÌ ¾È¿¡ ÀÖ´Â ¸í·ÉÀ» ½ÇÇàÇÏ¿© ±× °ªÀ» Ãâ·ÂÇÏ´Â °úÁ¤ÀÌ ¼öÇàµÈ´Ù´Â °ÍÀÌ´Ù. ÀÌ ½ºÅ©¸³Æ®¿¡¼­´Â Ãâ·ÂµÇ´Â ÆÄÀÏ À̸§ÀÌ ¸ÅÀϸÅÀÏ ´Þ¶óÁø´Ù. ÀÌ°ÍÀº data ¸í·É¿¡ ÀÇÇØ Çü½Ä¿¡ ¸ÂÃç Ãâ·Â À̸§ÀÌ ¹Ù²î¾î Áö±â ¶§¹®ÀÌ´Ù. ´ç½ÅÀº ÀÌ°ÍÀ» ´ç½ÅÀÌ ¿øÇÏ´Â ´Ù¸¥ Çü½ÄÀ¸·Î ¹Ù²Ü ¼öµµ ÀÖ´Ù. ¿¹¸¦ ¾à°£¸¸ ´õ µé¾î º¸ÀÚ: echo ls echo $(ls) 5.3. Áö¿ª º¯¼ö Áö¿ª º¯¼ö´Â Áö¿ª¿¡¼­ÀÇ »ç¿ëÀ» À§ÇØ ¸¸µé¾îÁø´Ù. #!/bin/bash HELLO=Hello function hello { local HELLO=World echo $HELLO } echo $HELLO hello echo $HELLO ÀÌ ¿¹´Â Áö¿ª º¯¼ö¸¦ ¼³¸íÇÏ´Â µ¥ ÀÖ¾î ÃæºÐÇÏ´Ù°í »ý°¢µÈ´Ù. 6. Á¶°Ç¹® Á¶°Ç¹®Àº ´ç½ÅÀÌ ¾î¶² ÀÏÀ» ¼öÇàÇϴ°¡ ȤÀº ÇÏÁö ¾Ê´Â°¡ÀÇ ¹®Á¦¸¦ Ç¥ÇöÇÏ´Â ¹æ¹ýÀÌ´Ù. 6.1. °£´ÜÈ÷ ¸»Çؼ­.... Á¶°Ç¹®Àº ¸¹Àº Çü½ÄÀ¸·Î Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. °¡Àå ±âº»ÀûÀÎ °ÍÀº if (Á¶°Ç) then (½ÇÇàÇÒ ³»¿ë) À¸·Î ±¸¼ºµÇ´Â °ÍÀ¸·Î ½ÇÇàÇÒ ³»¿ëÀº ¿ÀÁ÷ Á¶°ÇÀÌ ¸ÂÀ» ¶§¿¡¸¸ ½ÇÇàµÈ´Ù. Á¶°Ç¹®À» »ç¿ëÇÒ ¼ö ÀÖ´Â ÀÌ·± Çü½Äµµ ÀÖ´Ù. if (Á¶°Ç) then (½ÇÇàÇÒ ³»¿ë 1) else (½ÇÇàÇÒ ³»¿ë 2) ¿Í °°Àº Çü½Ä¿¡¼­´Â Á¶°ÇÀÌ ÂüÀÌ¸é ½ÇÇàÇÒ ³»¿ë 1ÀÌ ½ÇÇàµÇ°í, ±×·¸Áö ¾ÊÀ¸¸é ½ÇÇàÇÒ ³»¿ë 2°¡ ½ÇÇàµÇ´Â °ÍÀÌ´Ù. Á¶°Ç¹®ÀÇ ¶Ç ´Ù¸¥ Çü½ÄÀ¸·Î, if (Á¶°Ç 1) then (½ÇÇàÇÒ ³»¿ë 1) else if (Á¶°Ç 2) then (½ÇÇàÇÒ ³»¿ë 2) else (½ÇÇàÇÒ ³»¿ë 3)ÀÌ ÀÖ´Ù. ÀÌ¿Í °°Àº Çü½Ä¿¡¼­´Â else if (Á¶°Ç 2) them (½ÇÇàÇÒ ³»¿ë 2) °¡ Ãß°¡µÇ¾î Àִ´Ù, ÀÌ°ÍÀº ¸¸¾à Á¶°Ç 1Àº ¸¸Á·ÇÏÁö ¾Ê°í Á¶°Ç 2¸¦ ¸¸Á·ÇÏ¸é ½ÇÇàÇÒ ³»¿ë 2 °¡ ½ÇÇàµÇ°í ±×·¸Áö ¾ÊÀ¸¸é ½ÇÇàÇÒ ³»¿ë 3ÀÌ ½ÇÇàµÈ´Ù´Â °ÍÀÌ´Ù. ´Ù¸¥ Ç¥Çö ¹æ½Äµé¿¡ °üÇؼ­´Â Áö±Ý±îÁö º» °ÍµéÀ» Åä´ë·Î ÇÏ¿© °¢ÀÚ »ý°¢ÇØ º¸±â·Î ÇÏÀÚ. ¹®¹ý¿¡ °üÇÏ¿©: if¸¦ bash¿¡¼­ »ç¿ëÇÏ´Â °ÍÀº ´ÙÀ½°ú °°Àº ¸ð½ÀÀÌ´Ù. if [expression]; then code if 'expression' is true. fi 6.2. ¿¹Á¦ : if .. then À» »ç¿ëÇÏ´Â ±âº»ÀûÀΠǥÇö #!/bin/bash if [ "foo" = "foo" ]; then echo expression evaluated as true fi ÀÌ ÄÚµå´Â if ÀÇ Á¶°ÇÀÌ ´ç¿¬È÷ ¼º¸³ÇϹǷΠ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¸¦ »ç¿ëÇÏ´Â ·çÇÁ´Â ´Ù¸¥ ÇÁ·Î±×·¡¹Ö ¾ð¾î¿Í´Â ¾à°£ ´Ù¸£´Ù. ±âº»ÀûÀ¸·Î ÀÌ°ÍÀº ´ç½ÅÀ» ÀÏ·ÃÀÇ °úÁ¤»ó¿¡¼­ µÇÇ®ÀÌÇÏ°Ô ÇÑ´Ù. ·çÇÁ¸¦ Á¶ÀýÇϴ ǥÇöÀÚ°¡ true¸¦ ³ªÅ¸³¾ ¶§´Â ¼øȯÀ» °è¼ÓÇÏ°í, ±×·¸Áö ¾ÊÀ» ½Ã(Ç¥ÇöÀÚ°¡ falseÀÏ ¶§)¿¡´Â ¸ØÃß°Ô µÇ´Â °ÍÀ̶ó¸é ·çÇÁÀÇ Ç¥ÇöÀ¸·Î¼­ whileÀ» ÄÚµåÀÇ ÇÑ ºÎºÐ¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù. break¸¦ ½ÇÇàµÇ´Â ÄÚµå ¾È¿¡ ³Ö´Â °Íµµ ÁÁ´Ù. ¹«ÇÑ ·çÇÁ´Â ´ëºÎºÐ whileÀ» ¾µ ¶§ Äڵ忡 Ç¥ÇöÀÚ¸¦ false·Î ¸¸µé¾î ÁÖ´Â ºÎºÐÀÌ °á¿©µÇ¾î ÀÖÀ» ½Ã¿¡ ÀϾ´Ù. ´ç½ÅÀÌ "while°ú untilÀº ºñ½ÁÇÑ °Å ¾Æ³Ä?" ÇÏ°í »ý°¢ÇÑ´Ù¸é Á¦´ë·Î »ý°¢ÇÑ °ÍÀÌ´Ù. 7.1. For ¸¦ »ç¿ëÇÏ´Â ¿¹ #!/bin/bash for i in $( ls ); do echo item: $i done µÎ ¹ø° ÁÙ¿¡¼­ ¿ì¸®´Â i¸¦ $( ls )¿¡ ÀÇÇØ °è¼Ó º¯ÇÏ´Â º¯¼ö·Î¼­ ¼±¾ðÇß´Ù. ¼¼ ¹ø° ÁÙÀº ÇÊ¿äÇÏ´Ù¸é ´õ ±æ¾îÁö°Å³ª ȤÀº ´õ ¸¹Àº ÁÙÀ» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ÇÑ ¹øÀÇ ¼øȯÀÌ ³¡³ª°í $i´Â »õ·Î¿î °ªÀ» ¾ò¾ú´Ù. ÀÌ ½ºÅ©¸³Æ®´Â ¾ÆÁÖ ´Ü¼øÇÑ °ÍÀÌÁö¸¸ ·çÇÁ¸¦ »ç¿ëÇÏ¿© ÇÒ ¼ö ÀÖ´Â ´õ À¯¿ëÇÑ ¹æ¹ýÀÌ ¸¹ÀÌ ÀÖ´Ù. 7.2. C¿Í »ç¿ë¹ýÀÌ ºñ½ÁÇÑ for ·çÇÁ½ÃÅ°´Â ¶Ç ´Ù¸¥ ¹æ¹ýÀÌ ÀÖ´Ù. ÀÌ°ÍÀº for¸¦ »ç¿ëÇÏ¿© ·çÇÁÇÏÁö¸¸ 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, python, ±âŸ µîµîÀ¸·Î ÀÎÇÏ¿©) Àß ¾Ë·ÁÁø for ¸¦ Èä³»³»°í ÀÖ´Ù. 7.4. Until À» »ç¿ëÇÏ´Â ¿¹ #!/bin/bash COUNTER=20 until [ $COUNTER -lt 10 ]; do echo COUNTER $COUNTER let COUNTER-=1 done 8. ÇÔ¼ö °ÅÀÇ ¸ðµç ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼­, ´ç½ÅÀº ÄÚµåÀÇ ¹­À½ÀÎ ÇÔ¼ö¸¦ ³í¸®ÀûÀÎ ÀÌÁ¡ ȤÀº Àç±ÍÀûÀÎ ¹ÌÇп¡ ÀÇÇØ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÇÔ¼ö¸¦ ¿ÀÁ÷ function ÇÔ¼öÀ̸§ { Èû¼öÄÚµå }ÀÇ Çü½ÄÀ¸·Î ½á º¸¾Æ¶ó. ÇÔ¼ö¶ó ºÒ¸®´Â °ÍÀº ´ç½ÅÀÌ À̸§À» ºÙÀÌ´Â ¶Ç ´Ù¸¥ ÇÁ·Î±×·¥°ú °°´Ù. 8.1. ÇÔ¼ö ¿¹Á¦ #!/bin/bash function quit { exit } function hello { echo Hello! } hello quit echo foo 2¹ø° ÁÙ¿¡¼­ 4¹ø° ÁÙÀº quit ¶ó´Â ÇÔ¼ö¸¦, 5¹ø° ÁÙ¿¡¼­ 7¹ø° ÁÙÀº hello¶ó´Â ÇÔ¼ö¸¦ Æ÷ÇÔÇÑ´Ù. ´ç½ÅÀÌ ÀÌ¿Í °°Àº ½ºÅ©¸³Æ®°¡ ¾î¶»°Ô ½ÇÇàµÇ´ÂÁö¸¦ ÀÌÇØÇÒ ¼ö ¾ø´Ù¸é ´õ ³ë·ÂÇØ ÁÖ¾úÀ¸¸é ÇÑ´Ù. ÇÔ¼ö´Â ¾î¶² Ưº°ÇÑ ¸í·ÉÀ» ÅëÇØ ¼±¾ðµÉ ÇÊ¿ä°¡ ¾ø´Ù´Â °Í¿¡ ÁÖÀÇÇÏÀÚ. ÀÌ ½ºÅ©¸³Æ®´Â ¸ÕÀú hello¸¦ È£ÃâÇÏ°í, ±× ´ÙÀ½À¸·Î quit ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ±×¸®°í quit ÇÔ¼ö¿¡¼­ ½ºÅ©¸³Æ®°¡ ³¡³ª±â ¶§¹®¿¡ ÀÌ ÇÁ·Î±×·¥Àº 10¹ø° ÁÙÀº ½ÇÇàÇÏÁö ¸øÇÑ´Ù. 8.2. ¸Å°³º¯¼ö¸¦ »ç¿ëÇÏ´Â ÇÔ¼ö ¿¹Á¦ #!/bin/bash function quit { exit } function e { echo $1 } e Hello e World quit echo foo ÀÌ ½ºÅ©¸³Æ®´Â ¸ÕÀú º» °Í°ú °ÅÀÇ °°Àº °ÍÀÌ´Ù. °¡Àå ´Þ¶óÁø °ÍÀº e¶ó´Â ÇÔ¼öÀÌ´Ù. ÀÌ ÇÔ¼ö´Â ù¹ø° Àμö¸¦ µ¹·Á¹Þ¾Æ Ãâ·ÂÇÑ´Ù. ÇÔ¼ö¿¡¼­ÀÇ Àμö´Â ½ºÅ©¸³Æ®¿¡¼­ ¹ÞÀº Àμö¿¡ ´ëÇÑ °°Àº ¹æ½ÄÀ¸·Î Ãë±ÞµÈ´Ù. 9. »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º 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 ´ç½ÅÀÌ ÀÌ ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÏ¸é ´ç½ÅÀº ÇÁ·Î±×·¡¸ÓµéÀÌ ¹Ù¶ó´Â ´Ü¼øÇÑ ÅؽºÆ® ±â¹ÝÀÇ ¸Þ´º¸¦ º¸°Ô µÉ °ÍÀÌ´Ù. ´ç½ÅÀº ÀÌ°ÍÀÌ °¢°¢ÀÇ ´Ü¾î°¡ $OPTION°ú ÀÏÄ¡ÇÒ ¶§ ½ÇÇàµÈ´Ù´Â Á¡¿¡¼­ '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. ´õ ¸¹ÀÌ ¾Ë±â 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¸¦ ã±â (¸¶ÀÌÅ©°¡ º¸³»ÁØ ³»¿ëÀÌ´Ù. Âü °¨»çÇÏ°í ÀÖ°í.....) ¿ì¸®°¡ Áö±Ý±îÁö ´Ù·é ¿¹¿¡¼­ ¿ì¸®´Â #!/bin/bash ÀÇ ²Ã·Î »ç¿ëÇß´Ù. 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 ÃÖ¼ÒÇÑ ³»°¡ ãÀº °ÍÀº ÀÌ Á¤µµÀÌ´Ù. ´Ù¸¥ ½Ã½ºÅÛ¿¡¼­´Â ´Ù¸¥ ¹æ½ÄÀÌ Àû¿ëµÉ °ÍÀÌ´Ù. ȤÀº ´ç½ÅÀº 'wich bash'¸¦ ÀÌ¿ëÇÒ ¼öµµ ÀÖ´Ù. 10.4. ÇÁ·Î±×·¥ÀÌ µÇµ¹¸®´Â °ª ¹Þ±â bash¿¡¼­, ÇÁ·Î±×·¥ÀÌ µÇµ¹¸®´Â °ªÀº Ưº°ÇÑ º¯¼öÀÎ $? ¸¦ »ç¿ëÇÏ°Ô µÈ´Ù. ´ÙÀ½ÀÇ °ÍÀº ÇÁ·Î±×·¥ÀÌ µÇµ¹¸®´Â °ªÀ» ĸóÇϱâ À§ÇÑ °ÍÀÌ´Ù. ³ª´Â dada ¶ó´Â µð·ºÅ丮°¡ Á¸ÀçÇÏÁö ¾ÊÀ½À» °¡Á¤ÇÏ°í ÀÖ´Ù. (ÀÌ°Í ¿ª½Ã ¸¶ÀÌÅ©ÀÇ ÀÛÇ°ÀÌ´Ù.) #!/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 10.6. ´ÙÁß ¼Ò½º ÆÄÀÏ ´ç½ÅÀº ¸í·É ¼Ò½º°¡ ´ã±ä ¿©·¯ ÆÄÀϵéÀ» µ¿½Ã¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù. __Á÷Á¢ ÇØ º¸ÀÚ__ 11. Ç¥ 11.1. ¹®ÀÚ¿­ ºñ±³ ¿¬»êÀÚ (1) s1 = s2 (2) s1 != s2 (3) s1 < s2 (4) s1 > s2 (5) -n s1 (6) -z s1 (1) s1 Àº s2 ¿Í °°´Ù. (2) s1 Àº s2 ¿Í °°Áö ¾Ê´Ù. (3) __Á÷Á¢ ÇØ º¸ÀÚ__ (4) __Á÷Á¢ ÇØ º¸ÀÚ__ (5) s1 Àº ºó ¹®ÀÚ¿­ÀÌ ¾Æ´Ï´Ù.(Áï ÇÑ °³ ÀÌ»óÀÇ ¹®ÀÚ¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù.) (6) s1 Àº ºó ¹®ÀÚ¿­ÀÌ´Ù. 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 11.3. »ê¼ú ¿¬»êÀÚ + - * / % (³ª¸ÓÁö) 11.4. »ê¼ú °ü°è ¿¬»êÀÚ -lt (<) -gt (>) -le (<=) -ge (>=) -eq (==) -ne (!=) C ÇÁ·Î±×·¡¸ÓµéÀº À̰͵éÀ» ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. 11.5. À¯¿ëÇÑ ¸í·Éµé sed (À¯¿ëÇÑ ¿¡µðÅÍ) gawk grep (ÀÏÄ¡ÇÏ´Â °ÍÀÌ ÀÖ´Â Áö °Ë»ö) wc (´Ü¾î ȤÀº ÁÙ ¼ö¸¦ È®ÀÎ) sort bc (°è»ê±â) cut (ÇàÀ» ¼öÁ¤ÇÑ´Ù.) tput (ÀϹÝÀûÀÎ Å͹̳ο¡¼­ Á¤º¸¸¦ ¾ò¾î ¿Â´Ù) À̰͵éÀº ÇÁ·Î±×·¥À» ¸¸µé¸é¼­ À¯¿ëÇÏ°í ¶ÇÇÑ ÀÚÁÖ »ç¿ëÇÏ°Ô µÉ °ÍµéÀÌ´Ù. (±×·± °Íµé Áß¿¡¼­µµ ÃÖ¼ÒÇÑÀÌ´Ù!) ÀÛÀº ÇÁ·Î±×·¥Àº ´ç½Å¿¡°Ô ¸í·ÉÇà¿¡¼­ ÁøÁ¤ÇÑ ¸¶¹ýÀ» ÆîÄ¡µµ·Ï ÇØ ÁÙ °ÍÀÌ´Ù. 12. ´Ù¸¥ ½ºÅ©¸³Æ®µé 12.1. µð·ºÅ丮 ¾ÈÀÇ ¸ðµç ÆÄÀÏ¿¡ Àû¿ëÇϱâ 12.2. ¾ÆÁÖ °£´ÜÇÑ ¹é¾÷ ½ºÅ©¸³Æ®(Á¶±Ý ´õ ³ª¾ÆÁø °Í) #!/bin/bash SRCD="/home/" TGTD="/var/backups/" OF=home-$(date +%Y%m%d).tgz tar -cZf $TGTD$OF $SRCD 12.3. ÆÄÀÏ À̸§À» ¹Ù²ã ÁÖ´Â ½ºÅ©¸³Æ® #!/bin/sh # renna: rename multiple files according to several rules # written by felix hudson Jan - 2000 #first check for the various 'modes' that this program has #if the first ($1) condition matches then we execute that portion of the #program and then exit # check for the prefix condition if [ $1 = p ]; then #we now get rid of the mode ($1) variable and prefix ($2) prefix=$2 ; shift ; shift # a quick check to see if any files were given # if none then its better not to do anything than rename some non-existent # files!! if [$1 = ]; then echo "no files given" exit 0 fi # this for loop iterates through all of the files that we gave the program # it does one rename per file given for file in $* do mv ${file} $prefix$file done #we now exit the program exit 0 fi # check for a suffix rename # the rest of this part is virtually identical to the previous section # please see those notes if [ $1 = s ]; then suffix=$2 ; shift ; shift if [$1 = ]; then echo "no files given" exit 0 fi for file in $* do mv ${file} $file$suffix done exit 0 fi # check for the replacement rename if [ $1 = r ]; then shift # i included this bit as to not damage any files if the user does not specify # anything to be done # just a safety measure if [ $# -lt 3 ] ; then echo "usage: renna r [expression] [replacement] files... " exit 0 fi # remove other information OLD=$1 ; NEW=$2 ; shift ; shift # this for loop iterates through all of the files that we give the program # it does one rename per file given using the program 'sed' # this is a sinple command line program that parses standard input and # replaces a set expression with a give string # here we pass it the file name ( as standard input) and replace the nessesary # text for file in $* do new=`echo ${file} | sed s/${OLD}/${NEW}/g` mv ${file} $new done exit 0 fi # if we have reached here then nothing proper was passed to the program # so we tell the user how to use it echo "usage;" echo " renna p [prefix] files.." echo " renna s [suffix] files.." echo " renna r [expression] [replacement] files.." exit 0 # done! 12.4. ÆÄÀÏ À̸§À» ¹Ù²ã ÁÖ´Â ½ºÅ©¸³Æ®(°£´ÜÇÑ °Í) #!/bin/bash # renames.sh # basic file renamer criteria=$1 re_match=$2 replace=$3 for i in $( ls *$criteria* ); do src=$i tgt=$(echo $i | sed -e "s/$re_match/$replace/") mv $src $tgt done 13. ¹®Á¦°¡ »ý°åÀ» ¶§ 13.1. BASH¸¦ È£ÃâÇÏ´Â ¹æ¹ýµé ¸Ç ù¹ø° ÁÙ¿¡ ´ÙÀ½ ÇàÀ» Ãß°¡ÇÏ´Â °ÍÀÌ ÁÁÀº ¹æ¹ýÀÌ´Ù. #!/bin/bash -x ÀÌ°ÍÀº Èï¹Ì·Î¿î Ãâ·Â Çü½ÄÀ» ¸¸µé¾î ³½´Ù. 14. ÀÌ ¹®¼­¿¡ °üÇÏ¿© ¹®¼­ÀÇ Á¤Á¤, ȤÀº ´ç½ÅÀÌ ÀÌ ¹®¼­¿¡¼­ Èï¹Ì¸¦ ´À³¢´Â ºÎºÐ¿¡ ´ëÇÑ Á¦¾ÈÀÌ ÀÚÀ¯·Ó´Ù. ³ª´Â ±×·± Á¡µéÀ» Â÷ÈÄÀÇ ¾÷µ¥ÀÌÆ®¿¡ ¹Ý¿µÇÒ °ÍÀÌ´Ù. (¾Æ·¡ ³»¿ëÀº ¹ø¿ªÇÏÁö ¾Ê½À´Ï´Ù. : ¿Å±â´Â Àΰ£ ÁÖ) 14.1. ³»¿ëÀÇ º¸Áõ This documents comes with no warranty of any kind. and all that 14.2. Thanks to ? Nathan Hurst for sending a lot of corrections. ? Jon Abbott for sending comments about evaluating arithmetic expressions. ? Laurent Martelli for translating this document to French (soon here the URL) H ? Felix Hudson for writing the renna script ? Kees van den Broek (for sending many corrections) ? Mike (pink) made some suggestions about locating bash and testing files ? fiesh make a nice suggestion for the loops section. 14.3. °»½Å Samples added on string comparison. v0.8 More little additions. v0.7 More corrections and some old TO-DO sections written. v0.6 Minor corrections. v0.5 Added the redirection section. v0.4 disapperd from its location due to my ex-boss and thid doc found it's new place at the proper url: www.linuxdoc.org. prior: I don't rememeber and I didn't use rcs nor cvs :( 14.4. ´õ ¸¹Àº Á¤º¸ Introduction to bash (under BE) http://org.laol.net/lamug/beforever/bashtut.htm Bourne Shell Programming http://207.213.123.70/book/