½©½ºÅ©¸³Æ® ÀÔ¹®

(Introduction to Shell Scripting--the Basics)
By Ben Okopnik
¹ø¿ª :±è¹Ì°æ/mee@linuxlab.co.kr

 

     

``Here¡¯s a hint. When you think your code to exec a shell function is just not working, never, repeat NEVER send it ¡°/etc/reboot¡± just to see what happens.¡¯¡¯
-- Elliott Evans

 

INTRO

    Shell scriptingÀº ´ç½Å¿¡°Ô ±× ¹Ï¾îÁöÁö ¾Ê´Â À¶Å뼺À¸·ÎÀÇ Á¢±Ù°ú ±×¸®°í ¸Å¿ì °£´ÜÇÑ µµ±¸¸¦ °¡Áö°í LinuxÀÇ ÈûÀ» ÁÖ´Â ¿¹¼ú°ú °úÇÐÀÇ ¸ÅȤÀûÀÎ °áÇÕÀÔ´Ï´Ù. PCÀÇ ¿¾³¯¿¡ µ¹¾Æ¿Í¼­, ³ª´Â DOSÀÇ ¡°ÀÏ°ýó¸® ÆÄÀÏ-¹èÄ¡ÆÄÀÏ¡± À» ¾ÆÁÖ ³ë·ÃÇÏ°Ô »ç¿ëÇß¾ú½À´Ï´Ù. ³»°¡ Áö±Ý ½ÇÇöÇÑ °ÍÀº ¾àÇÏ°í ¾Ë¸ÍÀÌ ¾ø´Â UnixÀÇ ½© ¿øº»ÀÇ ¸ð¹æÀ̾ú½À´Ï´Ù. ±×·¸´Ù°í Çؼ­ MicrosoftÀÇ ¹èÄ¡ÆÄÀÏÀÌ º° º¼ÀÏ ¾ø´Ù´Â °ÍÀº ¾Æ´Õ´Ï´Ù.

    ½© scriptingÀÌ ½© ±×°Í ÀÚ½ÅÀÇ Ç® ¼ö ¾ø´Â ºÎºÐÀ̴ϱî, ¿©±â¿¡ ÀÖ´Â »ó´çÈ÷ ¸¹Àº ÀÚ·á´Â ½© ±Ëº¯, ¹æ¹ý, ±×¸®°í Ư¼ºÀ¸·Î ´Ù·ê °ÍÀÔ´Ï´Ù. ÂüÀ»¼º ÀÖ°Ô ºÁÁֽʽÿÀ; ±×°ÍÀº ÁÁÀº ½ºÅ©¸³Æ®¸¦ ¾²±â¿¡ ÇÊ¿äÇÑ Áö½ÄÀÇ ¸ðµç ºÎºÐÀÔ´Ï´Ù.

 

SCRIPTINGÀÇ Ã¶ÇÐ

    Linux -- Unix in general --´Â µû¶æÇÏ°í º¸Ç® °°°í ´©±¸³ª°¡ »ç¿ë °¡´ÉÇÏ°Ô ÀǵµµÈ ½Ã½ºÅÛÀÌ ¾Æ´Õ´Ï´Ù. ´ç½ÅÀÌ ¼öÇàÇØ¾ß ÇÏ´Â Á¤È®ÇÑ ½ÇÇà°ú ¿¬»êÀ» ¸í½ÃÇÏ´Â , ±×°ÍÀº ´ç½Å¿¡°Ô °áÇÕÀÇ ¹®ÀÚ ±×´ë·Î ÇÊ¿äÇÑ ¾î¶² °á°ú¸¦ ´Þ¼ºÇϱâ À§ÇØ, ¹«ÇÑÇÑ ¼ö¿¡ ¿¬°áµÉ ¼ö ÀÖµµ·Ï ÇØÁÖ´Â ÀÛÀº µµ±¸ÀÔ´Ï´Ù. (³ª´Â PerlÀÇ ¸ðÅäÀÎ ¡°TMTOWTDI¡± - There¡¯s More Than One Way To Do It - °¡ À¯´Ð½º¿¡µµ Àû¿ëµÈ´Ù°í »ý°¢ÇÑ´Ù.) -- »ç¿ëÀÚ¿¡¼­ ´õ ³ôÀº ´É·ÂÀ» ¿øÇÏ´Â º¹ÀâÇÔ°ú ¿ä±¸»çÇ×À» Áõ°¡½ÃÄ×½À´Ï´Ù. ÁÖÀå, super-sonic Á¦Æ® ÀüÅõ±â¿Í ÀÚÀü°Å´Â ±Ø½ÉÇÑ Â÷ÀÌ°¡ ÀÖÁö¸¸ Ç¥ÁØÈ­µÈ GUIÀÇ ¸í·ÉÀ» µû¸¥ °Í°ú ´ç½ÅÀÇ ÀÚ½ÅÀÇ ÇÁ·Î±×·¥À̳ª ½© ½ºÅ©¸³Æ®¸¦À» »õ·Î ¸¸µé¸é¼­ °Å±â¿¡ ÇÊ¿ä·Î ÇÏ´Â ¹æ¹ýÀ¸·Î ÇÊ¿äÇÑ ±â´ÉÀ» Á¤È®È÷ ¼öÇàÇÏ´Â °Í »çÀÌ¿¡´Â ±Ø½ÉÇÑ Â÷ÀÌ°¡ ÀÖ½À´Ï´Ù.

    ½© scriptingÀº ÇÁ·Î±×·¡¹ÖÀÔ´Ï´Ù.-- ±×·¯³ª ±×°ÍÀº ÀÛ°í Çü½ÄÀûÀÎ ±¸Á¶¸¦ °¡Áø ½±°Ô ¸¸µé¾îÁø ÇÁ·Î±×·¡¹ÖÀÔ´Ï´Ù. ±×°ÍÀº ÀÚ½ÅÀÇ ¹è¿­À» °¡Áø Çؼ®µÈ ¾ð¾îÀÔ´Ï´Ù -- ±×·¯³ª ´ç½ÅÀÇ ¸í·ÉÇà¿¡¼­ ÇÁ·Î±×·¥À» È£ÃâÇÒ ¶§ ´ç½ÅÀÌ ÀÌ¿ëÇÑ´Ù´Â °ÍÀº ´ÜÁö ±× ¹è¿­ÀÔ´Ï´Ù; ³»°¡ ¡°recyclable Áö½Ä¡±À» ÂüÁ¶ÇÏÀÚ¸é ½© ¿øº»À» ¸Å¿ì À¯¿ëÇÏ°Ô ¸¸µå´Â µµ±¸ÀÔ´Ï´Ù: ±×°ÍÀ» »ç¿ëÇÏ´Â ÇÁ·Î¼¼½º¿¡¼­, ´ç½ÅÀº ´ç½ÅÀÇ ½©ÀÇ Æ¯¼º°ú ´ç½ÅÀÇ ½Ã½ºÅÛÀÇ ¿¬»ê¿¡ ´ëÇØ ±× ÀÌ»ó±îÁö¸¦ ²÷ÀÓ¾øÀÌ ¹è¿ó´Ï´Ù.

 

REQUIREMENTS

    ³ª´Â bash¿¡ ´ëÇÏ¿© È£°¨À» °¡Áö°í ÀÖ½À´Ï´Ù. ±×¸®°í, ±×°ÍÀº ¿ì¿¬È÷ ¸Å¿ì ÀϹÝÀûÀ¸·Î »ç¿ëµÇ´Â ½©ÀÔ´Ï´Ù. ´ç½ÅÀÌ ±× ¿Ü ´Ù¸¥ °ÍÀ» »ç¿ëÇÒÁö¶óµµ, ±×°ÍÀº ¿©ÀüÈ÷ ÁÁ½À´Ï´Ù: ´ç½ÅÀÌ `bash¡¯¸¦ »ç¿ëÇÑ´Ù¸é ÀÌ ¿øº»Àº ¿Ã¹Ù¸£°Ô ¼öÇàµÉ °ÍÀÔ´Ï´Ù. ´ç½ÅÀÌ ¾Æ´Â °Íó·³ ½©Àº ±×µéÀÌ ÇÊ¿ä·Î ÇÏ´Â ½ºÅ©¸³Æ®¸¦ È£ÃâÇÕ´Ï´Ù; ±×°ÍÀº ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇϱâ À§ÇÑ ºÎºÐÀÔ´Ï´Ù.

    ´ç½ÅÀÌ ±×°ÍµéÀ» ³ªÁß¿¡ ¹ß°ßÇÒ ¼ö ¾ø´Â Àå¼Ò¿¡¼­ ÀÌ ÆÄÀϵéÀ» ³¶ºñÇÏ´Â °ÍÀ» ¿øÇÏÁö ¾ÊÀ¸¹Ç·Î ´ç½ÅÀÇ È¨ µð·ºÅ丮¿¡ ÀÖ´Ù°í ³ª´Â °¡Á¤ÇÒ °ÍÀÔ´Ï´Ù. ´ç½ÅÀÇ ½© ½ºÅ©¸³Æ®¸¦ Çѹø ¼±ÅÃÇϸé ŸÀÌÇÁ Ä£ °¢ ¶óÀο¡¼­ ¡°Enter¡± ÇØÁÖ¸é ÃæºÐÇÏ´Ù°í ÃßÃøÇÕ´Ï´Ù. ´ç½ÅÀÇ path ¿¡¼­ °°Àº À̸§À» ½ÇÇà½ÃÅ°¸é ¾ÈµÈ´Ù´Â °ÍÀ» ¾Ë °ÍÀÔ´Ï´Ù. ÀÌ·¯ÇÑ ÀÌÀ¯ ¶§¹®¿¡ ´ç½ÅÀÇ ½ºÅ©¸³Æ®¿¡ ¡°test¡± ÇÏ¸é ¾ÈµÈ´Ù. ÀÌ°ÍÀº À¯´Ð½º¿¡¼­ °¡Àå ÈçÇÑ Áú¹® Áß¿¡ ÇϳªÀÌ´Ù. ¡°¿Ö ½© ½ºÅ©¸³Æ®³ª ÇÁ·Î±×·¥ÀÌ ÀÛµ¿ÇÏÁö ¾Ê´Â°¡?¡± ¾Æ¸¶µµ ¡°test¡±·Î È£ÃâµÈ /bin¿¡ ¿øÇÏ´Â ÆÄÀÏÀÌ ¾øÀ» °ÍÀÔ´Ï´Ù.

    ´ç½ÅÀÌ È­ÀÏ ¿¬»êÀÇ ±âº»À» ¾Ë¾Æ¾ß ÇÑ´Ù´Â °ÍÀº ¸»ÇÒ ÇÊ¿äµµ ¾ø½À´Ï´Ù - ½ÇÇà, º¹»ç,µî,µî., ¡°. ¡° ´Â ÇöÀçÀÇ µð·ºÅ丮ÀÌ°í ¡°..¡±´Â »óÀ§ µð·ºÅ丮ÀÔ´Ï´Ù. ¡° ~¡±´Â ´ç½ÅÀÇ È¨ µð·ºÅ丮ÀÔ´Ï´Ù. ´ç½ÅÀº ±×°ÍÀ» ¾ËÁö ¸øÇß½À´Ï±î? ´ç½ÅÀº Áö±Ý ÇÒ ¼ö ÀÖ½À´Ï´Ù.. ´ç½ÅÀÌ ¾î¶² ¿¡µðÅ͸¦ ÀÌ¿ëÇϵçÁö, mcedit ±× ¿Ü ¾î¶² ´Ù¸¥ ÆíÁý ÇÁ·Î±×·¥ÀÌ¶óµµ ÁÁ½À´Ï´Ù. ±×·±µ¥, ±×°ÍÀº µÑ ÁßÀÇÇϳª, `vi¡¯, `emacs¡¯ÀÏ °ÍÀÔ´Ï´Ù; ¹Ù·Î, ¸î¸îÀÇ word-processing Æ÷¸ËÀ¸·Î ÀÌ ÀÛ¾÷À» ÀúÀåÇÏÁö ¸¶¼¼¿ä. ÀÚ·áÀÇ ÀÏÁ¤ÇÑ ¹Ýº¹À» ȸÇÇÇϱâ À§Çؼ­, ¿ì¸®°¡ ÀÛ¾÷ÇÏ´Â ¿øº» È­ÀÏ¿¡ ³ª´Â ±× ¶óÀÎÀÇ ¹øÈ£¸¦ ºÙÀÏ ¿¹Á¤ÀÔ´Ï´Ù. ¾î·µç, ³ª´Â ¸¶Áö¸·¿¡ ´Ù°°ÀÌ ½ÇÇàµÇµµ·Ï ÇÒ °ÍÀÔ´Ï´Ù.

 

BUILDING A SCRIPT

    ½ºÅ©¸³Æ®¸¦ ¸¸µå´Â ±âº»À¸·Î °©½Ã´Ù. ´ëºÎºÐÀÇ »ç¶÷µéÀÌ ÀÌ ¸í¹éÇÏ°í ´Ü¼øÇÑ ½ºÅ©¸³Æ®¸¦ ´ÙÀ½ÀÇ ÁøÇà¿¡ µû¶ó ÇÏ´Ùº¸¸é Á¡Á¡ ´õ º¹ÀâÇØÁø´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù.

    ½© ½ºÅ©¸³Æ®¸¦ °£´ÜÇÑ ÇüÅ·Π¸»ÇÏÀÚ¸é ´ç½ÅÀÌ Å¸ÀÌÇÁÇÏ´Â ¸í·É¾îµéÀ» ½© ¿øº»Àº Çϳª¾¿, Çϳª¾¿ ³ª¿­ÇÏ¿© ½ºÅ©¸³Æ®¸¦ ÇÊ¿ä·Î ÇÏ´Â ¾à°£ÀÇ ¡°¸¶¹ý¡±¿¡ ÇÑ Á¾·ùÀÔ´Ï´Ù. ±× ¡°¸¶¹ý¡±Àº µÎ °¡Áö·Î ³ª´©¾îÁ® ÀÖ½À´Ï´Ù. Ç¥±â¹ýÀº ±×°Í, ±×¸®°í ±×°ÍÀ» ½ÇÇà °¡´ÉÇÏ°Ô ¸¸µé±â À§Çؼ­ ±× ¿øº»À» Æ÷ÇÔÇÏ´Â ÆÄÀÏÀÇ Çã°¡¸¦ º¯°æÀ» Çϴµ¥ À־ ½ºÅ©¸³Æ®°¡ ±×¸¸Å­ ÀÌ¿ëµË´Ï´Ù. ½ÇÁ¦ÀûÀÎ º¸±â·Î¼­, ¡®back up¡¯À̶ó´Â Ưº°ÇÑ ÆÄÀÏÀÇ ½ºÅ©¸³Æ®¸¦ ¸¸µé¾î º¾½Ã´Ù. ¿ì¸®´Â ÇÑ ´Ü°è¾¿ ½ÇÇà½ÃÅ°¹Ç·Î½á Åë°úÇÒ °ÍÀÔ´Ï´Ù.

    ù¹ø°´Â Çã°¡¸ðµå°¡ ÀÖ´Â ÆÄÀÏÀ» ¸¸µç´Ù.
     

    >bkup
    chmod +x bkup

     

    (¿ªÀÚ ÁÖ: À§¿¡¼­ ¡°>¡±Àº ÇÁ·ÒÇÁÆ®°¡ ¾Æ´Ô. ÀÔ·ÂÇØ¾ß ÇÔ.)

    óÀ½ ¶óÀο¡¼­´Â ´ç½ÅÀº ÇöÀçÀÇ µð·ºÅ丮¿¡¼­ ¡°bkup¡± ÆÄÀÏÀ» ¸¸µé¾ú½À´Ï´Ù. µÎ¹ø° ¶óÀÎÀº ±×°Í¿¡ ¡°+x¡±¶ó´Â Çã°¡¸ðµå¸¦ ÁÖ¾î ½ÇÇà °¡´ÉÇÏ°Ô ¸¸µì´Ï´Ù ¸¸¾à Á¦ÇÑÀ» µÎ°í ½Í´Ù¸é Çã°¡ ¸ðµå¿¡ ¡°u+x¡± ȤÀº ¡°ug+x¡± ·Î ÇØÁØ´Ù. ´ëºÎºÐÀÇ °æ¿ì¿¡ ¡°x¡±¸¦ ±ÇÀåÇÕ´Ï´Ù.

    ´ÙÀ½À¸·Î ¿ì¸®´Â ½ÇÁ¦·Î ½ºÅ©¸³Æ®¸¦ ¸¸µé±â·Î ÇÕ´Ï´Ù. ÆíÁý±â¸¦ ½ÃÀÛÇÏ°í ¸¸µé¾î ³õÀº ÆÄÀÏÀ» ¿¬´Ù.

    mcedit bkup

    ¿ì¸®°¡ ¸¸µå´Â ¸ðµç ½ºÅ©¸³Æ®ÀÇ Ã¹ ÁÙÀº ¾Æ·¡¿Í °°¾Æ¾ß ÇÕ´Ï´Ù.(¸Ç ¾ÕÀÇ ¼ýÀÚ¿Í ÄÝ·ÐÀº ¹«½ÃÇϽÿÀ.)

    1: #!/bin/bash

    ÀÌ°ÍÀº ¡®hash-bang hack¡¯ ¿Í °ü°è ÀÖ´Ù°í ÇÑ´Ù. ÀÌ°Í¿¡ ´ëÇÏ¿© Èï¹Ì ÀÖ´Â °ÍÀº ½ÇÁ¦·Î ÆÄ¿îµå ¹®ÀÚ(#)°¡ ÁÖ¼®À̶ó´Â °ÍÀÔ´Ï´Ù. # ÀÌ Æ÷ÇÔµÈ ¶óÀÎÀº ½©¿¡¼­´Â ¹«½ÃµÇ´Â ¶óÀÎÀÌÁö¸¸ ¡°#!¡±ÀÇ ´ÙÀ½¿¡´Â ½ÇÇàÀ» Çϴµ¥ À־ ÇÊ¿äÇÑ ¹ø¿ª±â¸¦ ÁöÁ¤ÇÑ´Ù´Â ¸é¿¡¼­ µ¶Æ¯ÇÏ´Ù.

    ¿ì¸®´Â ½ÇÁ¦·Î ±× ¿øº»À» »õ·Î ¸¸µé ÇÊ¿ä°¡ ÀÖÀ» °ÍÀÔ´Ï´Ù. ´ç½ÅÀÇ ¿¡µðÅ͸¦ ½ÃÀÛÇÏ°í ´ç½ÅÀÌ ¸· ¸¸µç È­ÀÏÀ» ¿©¼¼¿ä. ½ºÅ©¸³Æ®°¡ ½ÇÇàµÉ ¶§ ½ÇÁ¦´Â ÇöÀçÀÇ bash ÇÁ·Î¼¼½º°¡ ½ÇÇàµÇ´Â À§¿¡ ¶Ç´Ù¸¥ ½©ÀÌ ½ÃÀ۵Ǵ °ÍÀÔ´Ï´Ù. ±×°Í¿¡¼­ ³ª°¥ ¶§ ¿ø·¡ÀÇ ½©·Î µ¹¾Æ°¡´Â °ÍÀÔ´Ï´Ù..¿¹¸¦ µé¾î¼­ ½©ÀÌ ½ÇÇàÇϸ鼭 µð·ºÅ丮¸¦ ¹Ù²Ù¾ú´Ù¸é ±× ½©¿¡¼­ ³ª°¡µµ ±× »õ·Î¿î µð·ºÅ丮¿¡¼­ ÀÖ½À´Ï´Ù. ¿ø·¡ÀÇ ½©Àº º¯°æµÈ µð·ºÅ丮¸¦ ¾Ë·ÁÁÖÁö ¾Ê½À´Ï´Ù. ½©À» ½ÃÀÛÇÑ ÈÄ¿¡ ¾î¶² º¯°æÀ» Ç߾ ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÏ´Â µ¿¾È ±× »óŸ¦ À¯ÁöÇÕ´Ï´Ù.
    ½ºÅ©¸³Æ®¸¦ °è¼ÓÇÕ´Ï´Ù.

    2: # ¡°bkup¡± - copies specified files to the user¡¯s ~/Backup
    3: # directory after checking for name conflicts.

    ³»°¡ ¾ð±ÞÇÑ´ë·Î ¡®#¡¯ÀÇ ¹®ÀÚ´Â ÁÖ¼®ÀÔ´Ï´Ù. ÀÌ°ÍÀº ÁÁÀº »ý°¢ÀÌ°í ½© ½ºÅ©¸³Æ®ÀÇ ¼ýÀÚµµ ¿©±â¿¡ ³ÖÀ» ¼ö ÀÖ´Ù. ¾î¶² Æ÷ÀÎÆ®³ª ´ç½ÅÀÌ ¾´ °ÍÀ» ±â¾ïÇØ¾ß ÇÏ´Â °Í µîÀ» °¡¸®Å°°í ½ÍÀ» ¶§´Â ¿©±â¿¡ ³Ö¾î ÁÙ ¼ö ÀÖ´Ù.

    4: cp -i $1 ~/Backup

    ¡®cp¡¯¸í·É¾î¿¡¼­ ¡°-I¡±¿É¼ÇÀº ¿ì¸®°¡ ~/Backup µð·ºÅ丮¿¡ Á¸ÀçÇÏ´Â ¡°bkup file.txt¡± ÆÄÀÏÀ» ½ÇÇà½ÃÅ°°í ¡°file.txt¡±ÆÄÀÏÀ» ºÒ·¯¿É´Ï´Ù. cp´Â ¶Ç ±âÁ¸¿¡ ÀÖ´ø ÆÄÀÏ¿¡ µ¤¾î ¾µ °ÇÁö Ãë¼ÒÇÒ °ÇÁö¸¦ ¹°¾îº¸¾Æ¼­ ¡°y¡± Å°¸¦ ´©¸£¶ó°í ¿ä±¸ÇÕ´Ï´Ù.

    ±× ¡°$1¡±Àº ¡°À§Ä¡ º¯¼ö¡±ÀÔ´Ï´Ù -- ±×°ÍÀº ´ç½ÅÀÌ ±× ½ºÅ©¸³Æ®¿¡ À̸§À» ÁØ ÈÄ¿¡ ŸÀÌÇÁÇϴ ù¹ø° ÀÏÀ» Ç¥½ÃÇÕ´Ï´Ù. °Å±â¿¡ ÀÌ º¯¼öÀÇ ÀüüÀÇ ¸®½ºÆ®°¡ ÀÖ½À´Ï´Ù.

    $0 - ½ÇÇàµÇ´Â ½ºÅ©¸³Æ®ÀÇ À̸§ÀÔ´Ï´Ù. ¿©±â¼­´Â ¡°bkup¡±.
    $1 - ù¹ø ÆĶó¸ÞÅÍÀÔ´Ï´Ù. ¿©±â¼­´Â ¡°file.txt¡±
    #@ - ÆĶó¸ÞÅÍ Àüü - ¡°$1 $2 $3...¡±
    $# - ÆĶó¸ÞÅÍ °³¼ö

    À§Ä¡ÀÇ º¯¼ö¸¦ Á¶ÀýÇÏ´Â ¹æ¹ý¿¡´Â ´Ù¸¥ ¿©·¯°¡ÁöÀÇ ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù -- ±×·¯³ª ¿ì¸®´Â ÀÌ°ÍÀ» ´çºÐ°£ »ç¿ëÇÒ °ÍÀÔ´Ï´Ù.

 

MAKING IT SMARTER

    Áö±Ý±îÁö, ½ºÅ©¸³Æ®´Â ±×¸® ¸¹Àº ¿ªÇÒÀ» ÇÏÁö ¾Ê¾Ò½À´Ï´Ù. ±×·¡µµ °¡Ä¡°¡ ÀÖ½À´Ï´Ù. ±×°ÍÀ» ´õ À¯¿ëÇÏ°Ô ¸¸µì½Ã´Ù. ´ç½ÅÀÌ ¹é¾÷ µð·ºÅ丮¿Í »õ·Î¿î µð·ºÅ丮°¡ ÀúÀåµÇ±â¸¦ ¹Ù¶õ´Ù¸é ±× ¾Æ¸¶µµ ¹öÀüÀ» º¸¿©ÁÖ±â À§ÇØ ´ÙÀ½°ú °°ÀÌ µ¡ ºÙ¿©¾ß ÇÕ´Ï´Ù. ±×¸®°í ±× ÃÖÈÄÀÇ ¶óÀÎÀ» ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÕ´Ï´Ù.

    4: a=$(date +%T-%d_%m_%Y)
    5: cp -i $1 ~/Backup/$1.$a

    ¿©±â¿¡¼­, ¿ì¸®´Â ½© ½ºÅ©¸³Æ®ÀÇ ÈûÀ» º¼ ¼ö ÀÖ½À´Ï´Ù. ±× ÈûÀº¡±´ëü ¸í·É¡±¶ó°í ºÒ¸®´Â ´Ù¸¥ Linux µµ±¸ÀÇ °á°ú¸¦ »ç¿ëÇÏ´Â ´É·ÂÀÔ´Ï´Ù. $(command)´Â °ýÈ£ ¾ÈÀÇ ¸í·ÉÀ» ¼öÇàÇÏ°í ¡°$(command)¡±ÀÇ °á°ú¸¦ º¯¼ö¿¡ ºÎ¿©ÇÕ´Ï´Ù. ÀÌ °æ¿ì¿¡¼­, date´Â ÇöÀçÀÇ ½Ã°£°ú ³¯Â¥¸¦ ³ªÅ¸³À´Ï´Ù. ±×¸®°í ¡®a¡¯¶ó°í ºÒ¸®´Â º¯¼ö¿¡ ±× °á°ú¸¦ ÇÒ´çÇÏ°í¼­ ~/Backup µð·ºÅ丮¿¡ ÀúÀåÇÏ´Â ÆÄÀÏÀÇ È®ÀåÀÚ¿¡ À̸¦ »ç¿ëÇÕ´Ï´Ù. ±×·¯³ª ¿ì¸®´Â º¯¼ö °ªÀ» »ç¿ëÇÏ´Â °ÍÀ» ¿øÇÒ ¶§, ¡®$¸¦ ºÙ¿©¾ß ÇÕ´Ï´Ù. º¯¼öÀÇ À̸§Àº ¾Æ·¡ÀÇ ¿¹¿Ü¸¦ Á¦ÇÏ°í °ÅÀÇ ¾î¶² °Íµµ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.

    * ¿¹¾à¾î´Â »ç¿ëÇÒ ¼ö ¾ø´Ù.
      Áï case do done elif else esac fi for function if in select then until while time µéÀÌ´Ù.

    * ¾Æ·¡ ¹®ÀÚ´Â »ç¿ëÇÒ ¼ö ¾ø´Ù.
      o ! { } | & * ; ( ) < > space tab

    * Ç¥ÁØ ½© º¯¼ö¸íÀº Æ÷ÇÔÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù.
       o PATH PS1 PWD RANDOM SECONDS....( ¡°man bash¡± ¸¦ Âü°í Ç϶ó.)

    ³» °æÇè¿¡ ÀÇÇÏ¸é ¸¸¾à º¯¼öÀÇ À̸§À» ¼Ò¹®ÀÚ, dashes(-), and underscores(_)¿¡ ÇÑÁ¤ÇÑ´Ù¸é º°´Ù¸¥ ¹®Á¦´Â ¾øÀ» °ÍÀÔ´Ï´Ù.

    ½ºÅ©¸³Æ®ÀÇ ÃÖÁ¾ µÎ ¶óÀÎÀÇ È¿°ú´Â ~/Backup µð·ºÅ丮¿¡ ´Ù¸¥ ¾î¶² °Í°úµµ Ãæµ¹ÇÏÁö ¾Ê´Â À¯ÀÏÇÑ ÆÄÀϸí -- ¿¹¸¦ µé¾î file.txt.01:00:00-01_01_2000 --À» »õ·Î ¸¸µì´Ï´Ù. ÀÌ»óÇÑ ¾î¶² ÀÌÀ¯·Î µÎ ÆÄÀϸíÀÌ Ãæµ¹ÇÏ¸é ´ç½ÅÀÇ ¡°¸í·É ó¸® ÇÁ·Î±×·¥¡±Àº À̸¦ ȸÇÇÇÒ ±âȸ¸¦ ÁÙ °ÍÀÔ´Ï´Ù.

    ±×·±µ¥ ¸ÕÀú ³ª¿Â ¹öÀüÀº $(command) º¯¼ö¸¦ »ç¿ëÇϱⰡ ¾î·Æ½À´Ï´Ù. ¿¹¸¦ µé¾î -$(cat$($2$(base name file1 txt))),ÀÌ º¯¼ö¿¡¼­ ù¹ø° º¯¼ö °ªÀ» ½ÇÇàÇÏ°í µÎ¹ø° º¯¼ö°¡ ½ÇÇàµÉ ¶§´Â ¿¹±âÄ¡ ¾ÊÀº ¿¡·¯°¡ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª »õ·Î¿î ¹öÀüÀ¸·Î »ç¿ëÇÑ´Ù¸é ¿¡·¯¸¦ ÇÇÇÒ ¼ö ÀÖ½À´Ï´Ù.

    ±×¸®°í ¿ì¸®´Â Àб⠽±°Ô Çϱâ À§ÇÏ¿© ¿©¹éÀ» ´õ ¸¸µé¾îÁÖ°í ¶óÀο¡ ¼ýÀÚ¸¦ ¾ø¾Ý½À´Ï´Ù.
     

    #!/bin/bash
    # ¡°bkup¡± - copies specified files to the user¡¯s ~/Backup
    # directory after checking for name conflicts.
    a=$(date +%T-%d_%m_%Y)
    cp -i $1 ~/Backup/$1.$a

     

    ÀÌ°ÍÀº ¿ÀÁ÷ µÎ ÁÙÀÇ ½ºÅ©¸³Æ® ÀÖ´Ù. ±×·¯³ª ±×°ÍÀº ½ÃÀÛÇϴµ¥ À¯¿ëÇÏ°Ô ¾²ÀÔ´Ï´Ù.

    ¿ì¸®´Â °è¼ÓÇؼ­ ÀÌ ÁÖÁ¦¸¦ °¡Áö°í ³íÀÇÇÕ´Ï´Ù. ¶Ç ¡°Unix FAQ¡± °¡ ÀÖ½À´Ï´Ù. ´ç½ÅÀº ´ç½ÅÀÇ »õ·Î¿î ¾Æ·¡Ã³·³ ½ºÅ©¸³Æ®¸¦ ½ÃÀÛÇÕ´Ï´Ù.

    Bkup

    ±×·¯³ª ¾Æ·¡¿Í °°Àº ´äÀÌ ³ª¿Ã °ÍÀÔ´Ï´Ù.
     

    bash: bkup: command not found

     

    * ¡°¾Æ´Ï ³ª´Â ÇÒ¸¸Å­ Çߴµ¥ ÀÌ°Ô ¹«½¼ ²ÃÀ̾ß.

    dos ¿¡¼­¿Í ´Þ¸® ÇöÀçÀÇ µð·ºÅ丮¿¡¼­ ½ºÅ©¸³Æ®ÀÇ ½ÇÇàÀº °¡´ÉÇÏÁö ¾Ê½À´Ï´Ù. ´©±º°¡°¡ ¡°ls¡±¶ó´Â ½ºÅ©¸³Æ®¸¦ ¸¸µç´Ù°í »ó»óÇغ¸½Ê½Ã¿À. ÇöÀçÀÇ µð·ºÅ丮¿¡¼­ ¡°ls¡±¶ó´Â ´Ü¾î¸¦ ŸÀÌÇÁ Ä£´Ù¸é PATH º¯¼ö°¡ ¼³Á¤µÇ¾î ÀÖÁö ¾Ê´Ù¸é À¯°¨½º·´°Ôµµ ÇöÀçÀÇ µð·ºÅ丮¿¡¼­ ½ÇÇàÀº ºÒ°¡ÇÕ´Ï´Ù.

    ÀÌ·± ÀÌÀ¯·Î ÀÎÇؼ­ ½ºÅ©¸³Æ®¸¦ ½ÇÇà½ÃÅ°±æ ¿øÇÑ´Ù¸é Ưº°È÷ PATH¸¦ ÁöÁ¤ÇØ¾ß ÇÕ´Ï´Ù. ´ç½ÅÀº ¶ÇÇÑ ´ç½ÅÀÇ path¿¡¼­ ÁöÁ¤µÈ µð·ºÅ丮¸¦ ½ºÅ©¸³Æ®·Î Á¦°ÅÇÒ ¼ö ÀÖ½À´Ï´Ù. ¡°/usr/local/bin¡± Àº ÁÁÀº ¿¹·Î º¼ ¼ö ÀÖ½À´Ï´Ù.

    ±×°ÍÀ» ½ÇÇà½ÃÅ°´Â °£´ÜÇÑ ¸í·É¾î·Î´Â ´ÙÀ½ÀÌ ÀÖ½À´Ï´Ù.
     

    ./bkup file.txt

     

    ¿©±â¿¡¼­ ¡°./¡±´Â ÇöÀçÀÇ µð·ºÅ丮¿¡¼­ ½ÇÇà½ÃŲ´Ù´Â ¶æÀÔ´Ï´Ù. ´Ù¸¥ µð·ºÅ丮¶ó¸é ¡°~/¡±À» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. ¿©±â¿¡¼­ ¾Ë ¼ö ÀÖ´Â °ÍÀº ´ç½ÅÀÌ PATH º¯¼ö¿¡¼­ µð·ºÅ丮 ÁöÁ¤À» Á¤È®ÇÏ°Ô ÁöÁ¤ÇØ¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù.

    ÀÌ´Â ¡°file.txt¡±¶ó°í ºÒ¸®´Â ÆÄÀÏÀÌ ´ç½ÅÀÇ È¨ µð·ºÅ丮¿¡ ÀÖ°í Backup¶ó´Â ¼­ºê µð·ºÅ丮°¡ ¸¸µé¾îÁ® ÀÖ¾î¾ß ÇÕ´Ï´Ù. ±×·¸°Ô ÇÏÁö ¾ÊÀ¸¸é error °¡ ³³´Ï´Ù.

 

REVIEW

    À§¿¡¼­ ½©½ºÅ©¸³Æ®¸¦ ¸¸µå´Âµ¥ ÇÊ¿äÇÑ ±âº» Áö½Ä°ú ¸î¸î Á¶°ÇÀ» Á¦½ÃÇÕ´Ï´Ù.

    ¡¤ File creation (ÆÄÀÏ ¸¸µé±â)
    ¡¤ Permissions (ÆÄÀÏ Çã°¡)
    ¡¤ Spawned subshells (´Ù¸¥ ½© ¿­±â)
    ¡¤ Execution in a non-PATHed directory (Æнº¼³Á¤ÀÌ ¾ÈµÈ °÷¿¡¼­ ½ÇÇà)
    ¡¤ The `hash-bang hack¡¯
    ¡¤ Comments (ÁÖ¼®)
    ¡¤ Positional parameters (À§Ä¡ ÆĶó¸ÞÅÍ)
    ¡¤ Command substitution (¸í·É ´ëÄ¡)
    ¡¤ Variables (º¯¼ö)

 

WRAP-UP

    ¿©±â¿¡¼­ ¿ì¸®´Â ½ÃÀÛÇϴµ¥ ÁÁÀº Á¤º¸¸¦ ¾ò¾ú½À´Ï´Ù. ½© ½ºÅ©¸³Æ®´Â ¸®´ª½º¿¡¼­ ¸Å¿ì ÆÄ¿öÇ®ÇÏ°í Àç¹ÌÀÖ´Â ºÎºÐÀÔ´Ï´Ù. ´ÙÀ½´Þ¿¡´Â ½© ½ºÅ©¸³Æ®¸¦ »ç¿ëÇϴµ¥ ³ª¿Ã ¼ö ÀÖ´Â syntax error ¿¡¼­ ½ºÅ©¸³Æ®°¡ ÇØ¾ß ÇÏ´Â ¿¡·¯ üũ¿Í Á¶°ÇºÎ ½ÇÇà, ±×¸®°í ½© ½ºÅ©¸³Æ®¿¡¼­ Á¾Á¾ »ç¿ëµÇ´Â ¡°power tools¡±¿¡ ´ëÇÏ¿© ³íÀÇÇÏ·Á°í ÇÕ´Ï´Ù.

    ¼öÁ¤ »çÇ×À̳ª °³¼±ÇÒ »çÇ×ÀÌ ÀÖÀ¸¸é ³ª¿¡°Ô º¸³»ÁֽʽÿÀ. ´ç½ÅÀÌ ¾Ë°í ÀÖ´Â ½© ½ºÅ©¸³Æ® ÆÁÀ̳ª ´ç½ÅÀÌ ¹ß°ßÇÑ Æ®¸¯ÀÌ ÀÖÀ¸¸é ³ª¿¡°Ô ¾Ë·Á ÁֽʽÿÀ.

    ³ª´Â Ç×»ó »õ·Î¿î °ÍÀ» ¹Þ¾ÆµéÀÌ´Â Çлý°ú ºñ½ÁÇÏ´Ù°í »ý°¢ÇÕ´Ï´Ù.

 

    Happy Linuxing!

    Copyright (c) 2000, Ben Okopnik
    Published in Issue 52 of Linux Gazette,
    April 2000




¡ã top

homeÀ¸·Î...