½© ½ºÅ©¸³Æ® (Shell Script) - (¥°)

ÀÓÁ¾±Õ / ¼­¿ï´ëÇб³ ÄÄÇ»ÅÍ°øÇаú ¸®´ª½º ÇÁ·Î±×·¡¸Ó
(hermes44@secsm.org)

 

 

µé¾î°¡¸ç

    ½© ½ºÅ©¸³Æ®¶õ ½©¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â ¸í·É¾îµéÀÇ Á¶ÇÕÀ» ¸ð¾Æ¼­ ¸¸µç ¹èÄ¡(batch) ÆÄÀÏÀÌ´Ù. ¸®´ª½º¿¡¼­´Â ¿©·¯ ¸í·É¾îµéÀ» ÆÄÀÌÇÁ(pipe), ¸®´ÙÀÌ·º¼Ç(redirection), ÇÊÅÍ(filter) µîÀ¸·Î ¿¬°áÇÏ¿© ¿øÇÏ´Â °á°ú¸¦ ¾ò¾î ³¾ ¼ö ÀÖ´Ù. ÀÌ·± ¹æ½ÄÀ¸·Î ¹­¿©Áø ¸í·É¾î Á¶ÇÕÀÌ ¹Ýº¹ÀûÀ¸·Î »ç¿ëµÈ´Ù¸é À̸¦ ½© ½ºÅ©¸³Æ®·Î, Áï ´ÜÀÏ ¸í·ÉÀ¸·Î ¸¸µé¾î ½±°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù.

    ½ºÅ©¸³Æ®¶ó°í ÇÏ´Â °ÍÀº ÀÎÅÍÇÁ¸®ÅÍ(interpreter)¿¡ ÀÇÇØ Çؼ®/½ÇÇàµÇ´Â ÇÁ·Î±×·¥À» ¸»ÇÑ´Ù. ¾î¶² Á¾·ùÀÇ ÀÎÅÍÇÁ¸®Å͸¦ »ç¿ëÇÏ´Â °¡¿¡ µû¶ó¼­ ¾î¶² ½ºÅ©¸³Æ®Àΰ¡¿¡ ´ëÇÑ À̸§ÀÌ Á¤ÇØÁø´Ù. ½© ½ºÅ©¸³Æ®, ÆÞ(Perl) ½ºÅ©¸³Æ®, Tcl/Tk ½ºÅ©¸³Æ® µîÀÇ À̸§¿¡¼­ »ç¿ëÇÏ´Â ÀÎÅÍÇÁ¸®Å͸¦ ¾Ë ¼ö ÀÖ´Ù. ½© ½ºÅ©¸³Æ®´Â ÀÎÅÍÇÁ¸®ÅÍ·Î ½©À» »ç¿ëÇÏ´Â ½ºÅ©¸³Æ®¸¦ °¡¸£Å²´Ù. ¶ÇÇÑ ¾î¶°ÇÑ ½©À» »ç¿ëÇÏ´Â °¡¿¡ µû¶ó¼­ º»(bourne) ½© ½ºÅ©¸³Æ®, C ½© ½ºÅ©¸³Æ®, ÄÜ(Korn) ½© ½ºÅ©¸³Æ®, TC ½© ½ºÅ©¸³Æ® µîÀ¸·Î ³ª´¶´Ù.

    ÀÌ ¿¬Àç¿¡¼­´Â ½© ½ºÅ©¸³Æ® ÁßÀÇ ±âº»ÀÌ µÇ´Â º» ½© ½ºÅ©¸³Æ®¿¡ ´ëÇؼ­ »ìÆ캼 °ÍÀÌ´Ù. º» ½© ½ºÅ©¸³Æ®¿¡¼­ »ç¿ëÇÏ´Â ±â´É°ú ¹®¹ýÀº ´Ù¸¥ ½©¿¡¼­µµ Áö¿øÀÌ µÈ´Ù. µû¶ó¼­ ½ÇÁ¦ »ç¿ëÇÒ ¶§´Â ´Ù¸¥ ½©À» »ç¿ëÇÒ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. ÇÊÀÚ´Â bash 1.14.7À» »ç¿ëÇÏ¿© ¼³¸íÀ» ÇÒ °ÍÀÌ´Ù.

     

¾î¶² °ÍÀÌ ½© ½ºÅ©¸³Æ®?

    ¿ì¸®´Â ¾Ë°Ô ¸ð¸£°Ô ¸¹Àº ½© ½ºÅ©¸³Æ®À» »ç¿ëÇÑ´Ù. ±×·¸´Ù¸é ¾î¶² °ÍÀÌ ½©½ºÅ©¸³Æ®Àΰ¡? È®ÀÎÀ» Çغ¸´Â ¹æ¹ýÀº file¿Í grep¸í·ÉÀ» »ç¿ëÇؼ­ ã¾Æº¸´Â °ÍÀÌ´Ù. ÇÊÀÚÀÇ ½Ã½ºÅÛ¿¡¼­ÀÇ °á°ú´Â ´ÙÀ½°ú °°´Ù.

     

      $ (cd /bin ; file * |grep ¡°shell script¡±)
      false :                   Bourne shell script text
      igawk :                  Bourne shell script text
      remadmin :            Bourne shell script text
      true :                    Bourne shell script text
      $ (cd /usr/bin ; file * |grep ¡°shell script¡±)
      anytopnm :           Bourne shell script text
      apropos :             Bourne shell script text
      audiocompose :    C shell script text
      audiosend :          C shell script text
      autoconf :            Bourne shell script text
      autoheader :         Bourne shell script text
      autoreconf :         Bourne shell script text
      autoupdate :         Bourne shell script text
      bash2bug :           Bourne shell script text
      bashbug :             Bourne shell script text
      batch :                Bourne shell script text
      bdftops :             Bourne shell script text
      bzless :                Bourne shell script text
      ......
      whatis :               Bourne shell script text
      wv-incconfig :      Bourne shell script text
      wv-libconfig :      Bourne shell script text
      xbm2ikon :           Bourne shell script text
      xbmcut48 :          Bourne shell script text
      xbmsize48 :         Bourne shell script text
      zcmp :                Bourne shell script text
      zdiff :                  Bourne shell script text
      zforce :               Bourne shell script text
      zgrep :                Bourne shell script text
      zipgrep :             Bourne shell script text
      zless :                 Bourne shell script text
      zmore :               Bourne shell script text
      znew :                Bourne shell script text

     

    À§ÀÇ ¸í·ÉÀ¸·Î È®ÀÎÀ» Çغ¸¸é false, true, apropos, netscape, nohup, pdf2ps, ps2pdf, whatis, zgrep, zless µî ¸¹Àº ½© ½ºÅ©¸³Æ®°¡ ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù.

     

½© ½ºÅ©¸³Æ® ÀÛ¼ºÇϱâ

    ½ºÅ©¸³Æ®ÀÇ Æ¯Â¡ ÁßÀÇ Çϳª´Â ±× ³»¿ëÀÌ ÅؽºÆ® Çü½ÄÀ̱⠶§¹®¿¡ ÀÏ¹Ý ÆíÁý±â·Î º¼ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. À§¿¡¼­ ã´Â ½ºÅ©¸³Æ® Áß ¾Æ¹« °ÍÀ̳ª cat, vi, emacs µîÀ¸·Î º¸¾Æ¶ó. ¿©·¯ ¸í·Éµé°ú ½ºÅ©¸³Æ® ¹®¹ýÀÇ Á¶ÇÕÀ¸·Î µÇ¾î ÀÖ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

    ½ºÅ©¸³Æ®ÀÇ °¡Àå ùÁÙÀº Ç×»ó #!·Î ½ÃÀÛÇÑ´Ù. #! ´ÙÀ½¿¡´Â ÀÌ ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÒ ÀÎÅÍÇÁ¸®ÅÍ¿Í ±× ½ÇÇà ¿É¼ÇÀ» ÁöÁ¤ÇÑ´Ù. ½© ½ºÅ©¸³Æ®¿¡¼­´Â #!/bin/sh, #!/bin/csh, #!/bin/bash, #!/bin/ksh, #!/bin/tcsh¿Í °°ÀÌ ½©ÀÇ Àý´ë °æ·Î¸¦ ½áÁØ´Ù. ÀüÅëÀûÀÎ °ü½À¿¡ ÀÇÇÏ¿© #!¸¸ ½áÁÙ °æ¿ì¿¡´Â #!/bin/sh·Î ÀνÄÀ» ÇÑ´Ù.
    µû¶ó¼­ º» ½© ½ºÅ©¸³Æ® ÀÛ¼º½Ã¿¡´Â ù ÁÙÀº #!/bin/sh³ª #!·Î ÇÏ¸é µÈ´Ù.

    ÀÌÁ¦ ¾ÕÀÇ ¿¹Á¦¸¦ ¹ÙÅÁÀ¸·Î °£´ÜÇÑ ¡®findscript¡¯ ½© ½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇÏ¿© º¸ÀÚ. ÀÌ ½ºÅ©¸³Æ®´Â /bin, /usr/bin¿¡¼­ ½© ½ºÅ©¸³Æ®¸¦ ã¾Æ º¸¿©ÁØ´Ù.

     

      $ cat findscript
      #!/bin/sh#
      # findscript: /bin, /usr/bin¿¡ ÀÖ´Â ½© ½ºÅ©¸³Æ®¸¦
      ã´Â´Ù.
      #

      (cd /bin; file * | grep ¡°shell script¡±)
      (cd /usr/bin; file * | grep ¡°shell script¡±)
      $ chmod +x findscript.sh
      $ ./findscript.sh

 

    cat ¶Ç´Â ´Ù¸¥ ÆíÁý±â¸¦ ÀÌ¿ëÇÏ¿© À§¿¡¼­ ó·³ ÀÛ¼ºÀ» ÇÏ°í, ½ÇÇà °¡´ÉÇϵµ·Ï Æ۹̼ÇÀ» ÁØ´Ù. ±×¸®°í¼­ ´Ù¸¥ ÇÁ·Î±×·¥ ó·³ ½ÇÇàÀ» ÇÏ¸é µÈ´Ù. À§¿¡¼­ º» °Í°ú °°ÀÌ ±âº»ÀûÀ¸·Î ½© ½ºÅ©¸³Æ®´Â ½©¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â ¸í·ÉµéÀÇ ÁýÇÕÀÌ´Ù. ¿©±â¿¡ µ¡ºÙ¿© ½©¿¡¼­´Â ½© ½ºÅ©¸³Æ®¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â ³ª¸§ÀÇ ¹®¹ýÀ» Á¦°øÇÑ´Ù.

     

Á¾·á »óÅ (Exit status)

    °¢ ¸í·ÉµéÀº ½ÇÇàÀ» ¿Ã¹Ù·Î ¸¶Ä¡°í Á¤»óÀûÀÎ Á¾·á(¼º°ø/Âü)Çϰųª, ½ÇÇà ¿À·ù ¶Ç´Â ÀÎÅÍ·´Æ®¿¡ ÀÇÇÑ Áß´Ü°ú °°Àº ÀÌÀ¯·Î ºñÁ¤»óÀûÀ¸·Î Á¾·á(½ÇÆÐ/°ÅÁþ)ÇÒ ¼ö ÀÖ´Ù. ÀÌ ¼º°ø°ú ½ÇÆд ¸í·ÉÀÇ Á¾·á »óÅ°ªÀ¸·Î ¾Ë ¼ö ÀÖ´Ù. º¸Åë 0Àº ¼º°øÀ» ³ªÅ¸³»¸ç, 0ÀÌ ¾Æ´Ñ °ªÀº ½ÇÆи¦ ³ªÅ¸³½´Ù. ½©¿¡¼­´Â ÀÌÀü¿¡ ½ÇÇàÇÑ ¸í·ÉÀÌ ¼º°øÀ» ÇÏ¿´´ÂÁö ½ÇÆи¦ ÇÏ¿´´ÂÁö¸¦ ? º¯¼ö°ª¿¡ ÀúÀåÀ» ÇÑ´Ù.

     

      $ who | grep root
      $ echo $?
      1
      $ who | grep hermes44
      hermes44 : 0       Sep 16 11:34
      hermes44 pts/0    Sep 16 11:36
      hermes44 pts/1    Sep 16 14:07
      $ echo $?
      0
      $ false; echo $?
      1
      $ true; echo $?
      0

     

    false ¸í·ÉÀº Ç×»ó 1, ½ÇÆÐÀÇ Á¾·á »óŸ¦ ¹ÝȯÇÏ°í true ¸í·ÉÀº Ç×»ó 0, ¼º°øÀÇ Á¾·á »óŸ¦ ¹ÝȯÇÑ´Ù.

    ½© ½ºÅ©¸³Æ®¿¡¼­´Â exit¸¦ ÀÌ¿ëÇÏ¿© ½ºÅ©¸³Æ®¸¦ Á¾·áÇϸ鼭 Á¾·á »óŸ¦ ¹ÝȯÇÒ ¼ö ÀÖ´Ù. exit¸¸À» »ç¿ëÇÏ¸é ½© ½ºÅ©¸³Æ®¸¦ Á¾·áÇÏ°í °¡Àå ¸¶Áö¸·¿¡ ½ÇÇàÇÑ ¸í·ÉÀÇ Á¾·á »óŸ¦ ¹ÝȯÇÏ°í, exit <¼ýÀÚ>¸¦ »ç¿ëÇϸé Á¾·áÇÏ°í <¼ýÀÚ> °ªÀ» ½©¿¡ ¹ÝȯÇÑ´Ù.

     

      $ cat return_exit
      #!/bin/sh
      #
      #return_exit: <ÀÎÀÚ>ÀÇ °ªÀ» Á¾·á »óÅ·Î
      #¹ÝȯÇÑ´Ù.
      #

      if [ $# -eq 0 ]
      then
            exit
      else
            exit $1
      fi
      $ ./return_exit; echo $?
      0
      $ ./return_exit 8; echo $?
      8

     

      if ±¸¹®Àº Á¶°Ç½Ä¿¡ µû¶ó¼­ ºÐ±â¸¦ ÇÑ´Ù.
         Çü½ÄÀº ´ÙÀ½°ú °°´Ù.

      if Á¶°Ç½Ä
      then
              ¸í·Éµé
      [ elif Á¶°Ç½Ä
         then
              ¸í·Éµé ]
      [ else
              ¸í·Éµé ]
      fi

    ifÀÇ Á¶°Ç½ÄÀÌ ÂüÀ̸é, Áï 0À» ¹ÝȯÇϸé then ´ÙÀ½ÀÇ ¸í·ÉµéÀ» ¼öÇàÇÏ°í, °ÅÁþÀ̸é, Áï 0ÀÌ ¾Æ´Ñ °ªÀ» ¹ÝȯÇϸé (´ë°³ 1ÀÌ´Ù) else ´ÙÀ½ÀÇ ¸í·ÉÀ» ¼öÇàÇÑ´Ù. elif´Â ifÀÇ Á¶°Ç½ÄÀÌ °ÅÁþÀÌ µÉ °æ¿ì¿¡ ºÐ±âµÇ¾î ´Ù½Ã »õ·Î¿î Á¶°Ç½ÄÀ» °Ë»çÇÑ´Ù. elif³ª else ±¸¹®Àº »ý·«ÀÌ °¡´ÉÇÏ´Ù. fi´Â if ±¸¹®ÀÇ ³¡Àº ³ªÅ¸³½´Ù. (fi´Â if¸¦ °Å²Ù·Î ¾´ °ÍÀÌ´Ù. :-))

    À§ÀÇ ¿¹Á¦ ½ºÅ©¸³Æ®¿¡¼­ if Á¶°Ç¹®ÀÇ [ $# -eq 0 ]´Â ½ºÅ©¸³Æ®ÀÇ ÀÎÀÚÀÇ °¹¼ö($#)°¡ 0°ú °°ÀºÁö(-eq)¸¦ °Ë»çÇÏ´Â °ÍÀÌ´Ù. ÀÎÀÚ°¡ ¾ø´Ù¸é exit¸¦ ¼öÇàÇÏ°í ¸¶Áö¸·À¸·Î ¼öÇàÇÑ ¸í·ÉÀÎ Á¶°Ç½ÄÀÇ Á¾·á »óÅ°ª 0À» ¹ÝȯÇÏ´Ù. ÀÎÀÚ°¡ ÀÖ´Ù¸é else ±¸¹®¿¡¼­ ù¹ø° ÀÎÀÚ °ªÀ»($1)À» Á¾·á »óÅ·Π¹ÝȯÇÑ´Ù.

    ½© ½ºÅ©¸³Æ®°¡ ¼öÇ൵Áß¿¡ ÀÎÅÍ·´Æ®¸¦ ¹Þ¾Æ¼­ ºñÁ¤»óÀûÀ¸·Î Á¾·áÇÒ ¼öµµ ÀÖ´Ù. ÀÌ·± °æ¿ì¿¡´Â Àӽ÷Π»ç¿ëÇÑ ÆÄÀÏÀ» »èÁ¦ÇÏ´Â °Í°ú °°Àº Á¤¸® ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ¾ø°ÔµÈ´Ù. À̸¦ ¹æÁöÇϱâ À§ÇÑ trap ±¸¹®ÀÌ ÀÖ´Ù. Çü½ÄÀº ´ÙÀ½°ú °°´Ù.

      trap ¡®¸í·Éµé¡¯ [½Ã±×³Î ¹øÈ£µé]

    ÀÎÅÍ·´Æ®¿¡ ÇØ´çÇÏ´Â ½Ã±×³Î ¹øÈ£¸¦ ½áÁØ´Ù. ÀÌ ¹øÈ£´Â kill -lÀ» ÇÏ¸é ¾Ë ¼ö ÀÖ´Ù.½Ã±×³Î ¹øÈ£¸¦ 0À» ¾µ °æ¿ì´Â ½© ½ºÅ©¸³Æ®°¡ Á¤»óÀûÀÎ Á¾·á¸¦ ÇÒ °æ¿ì¸¦ ³ªÅ¸³½´Ù.

    ¾Æ·¡ÀÇ ½© ½ºÅ©¸³Æ®¸¦ ¼öÇàÇϸé loop ¶ó´Â ±Û¾¾°¡ È­¸é¿¡ °è¼Ó Ãâ·ÂµÉ °ÍÀÌ´Ù. ¿©±â¼­ »ç¿ëµÈ whileÀº ¹«ÇÑ ·çÇÁ¸¦ µ¹°Ô µÈ´Ù. ·çÇÁ¿¡ ´ëÇؼ­´Â µÚ¿¡¼­ º¸°Ú´Ù. Á¾·á¸¦ Çϱâ À§Çؼ­ Ctrl+C(SIGINT,2)¸¦ ´©¸£´õ¶óµµ À̴ ù¹ø° trap ±¸¹®¿¡ ÀÇÇؼ­ ¸Þ¼¼Áö¸¸À» Ãâ·ÂÇÑ´Ù.
    Ctrl+¡¬(SINQUIT,3)¸¦ ´©¸£¸é ½ºÅ©¸³Æ®´Â Á¾·á¸¦ ÇϰԵȴÙ.

     

     $ kill -1

    1) SIGHUP

    2) SIGINT

    3) SIGQUIT

    4) SIGILL

    5) SIGTRAP

    6) SIGIOT

    7) SIGBUS

    8) SIGFPE

    9) SIGKILL

    10) SIGUSR1

    11) SIGSEGV

    12) SIGUSR2

    13) SIGPIPE

    14) SIGALRM

    15) SIGTERM

    16) SIGCHLD

    17) SIGCONT

    18) SIGSTOP

    19) SIGTSTP

    20) SIGTTIN

    21) SIGTTOU

    22) SIGURG

    23) SIGXCPU

    24) SIGXFSZ

    25) SIGVTALRM

    26) SIGPROF

    27) SIGWINCH

    28) SIGIO

    29) SIGPWR

     

     

     

    $ cat trap_exit
    #!/bin/sh
    #
    #trap_exit: trap Å×½ºÆ®
    #

    trap ¡®echo basename $0: signal catch¡¯ 1 2 15
    trap ¡®echo script exit; exit¡¯ 3

    while :
    do
            echo loop
    done
    $ ./trap_exit

     

¸í·ÉÇà ÀÎÀÚ (Command-line argument)

    ½© ½ºÅ©¸³Æ®¿¡¼­´Â ÃÖ´ë 9°³ÀÇ ¸í·ÉÇà ÀÎÀÚ¸¦ ¹ÞÀ» ¼ö ÀÖ´Ù. ±× °ªÀº $1~$9¿¡ ÀúÀåµÈ´Ù. (ÃֽŠ½©¿¡¼­´Â ±× ÀÌ»óÀÇ ÀÎÀÚ¸¦ ¹ÞÀ» ¼öµµ ÀÖ´Ù. ${10}°ú °°Àº Çü½ÄÀÌ´Ù.) $0¿¡´Â ½ÇÇàÇÑ ½© ½ºÅ©¸³Æ®ÀÇ °æ·Î°¡ ÀúÀåµÈ´Ù. ¶ÇÇÑ À§¿¡¼­ Àá±ñ º¸¾ÒµíÀÌ $#¿¡´Â ÀÎÀÚÀÇ °³¼ö°¡ ÀúÀåÀÌ µÈ´Ù.

    ½ºÅ©¸³Æ® Áß¿¡ shift¸¦ »ç¿ëÇÏ¿´À½À» ÁÖ¸ñÇ϶ó. shift´Â $1 ÀÎÀÚ¸¦ ¾ø¾Ö°í °¢ ÀÎÀÚ¹øÈ£¸¦ 1¾¿ ÁÙÀδÙ. Áï $2´Â $1, $3Àº $2, $4Àº $3°ú °°Àº ½ÄÀ¸·Î µÈ´Ù.

     

      #!/bin/sh
      #
      # prarg: ¼¼ °³ÀÇ ÀÎÀÚ¸¦ Ãâ·ÂÇÏ´Ù.
      #

      prog= basename $0

      if [$# -eq 3 ]
      then
            echo ¡°Script $prog path: $0¡±
            echo ¡°Arg1: $1¡±
            echo ¡°Arg2: $2¡±
            shift
            echo ¡°Arg3: $2¡±
      else
            echo ¡°Usage: $ $prog arg1 arg2 arg3¡±
            exit
      fi
      $ ./prog es 34
      Usage: $ prarg arg1 arg2 arg3
      $ ./prog 28 ksl 9
      Script prarg path: ./prarg
      Arg1: 28
      Arg2: ksl
      Arg3: 9

     

    ±×·¡¼­ shiftÇÑ ÀÌÈÄ¿¡´Â ¼¼¹ø° ÀÎÀÚ°¡ $2°¡ µÇ´Â °ÍÀÌ´Ù. À̶§ $# °ªµµ 1ÁØ´Ù.

    ¸ðµç ÀÎÀÚ´Â ¡°$@¡±, $*¿¡ ÀúÀåÀÌ µÈ´Ù. ¡°$@¡±´Â ¸í·ÉÇà¿¡¼­ »ç¿ëÇÑ µû¿ÈÇ¥°¡ ±×·¡µµ Àû¿ëµÇÁö¸¸, $*¿¡¼­´Â ±× µû¿ÈÇ¥°¡ Àû¿ëµÇÁö ¾Ê´Â´Ù. µû¿ÈÇ¥¿¡ À¯¹«¿¡ µû¶ó¼­ ½©¿¡¼­ »ç¿ëÇϴ Ư¼ö¹®ÀÚµé - °ø¹é, ÅÇ, \, ¡®, ¡°, ` µî - Çؼ®ÇÒ °ÍÀÎÁöÀÇ ¿©ºÎ°¡ °áÁ¤ÀÌ µÈ´Ù. ÀÌ´Â ½©À» »ç¿ëÇÏ´Â °Í¿¡ °üÇÑ ¹®Á¦À̱⠶§¹®¿¡ ´õÀÌ»ó ÀÚ¼¼È÷´Â ´Ù·çÁö ¾Ê°Ú´Ù.

    $$¿¡´Â ÇöÀç ½© ½ºÅ©¸³Æ®ÀÇ ÇÁ·Î¼¼½º ID°¡ ÀúÀåÀÌ µÈ´Ù. ÀÌ´Â ¸í·ÉÇà ÀÎÀÚ´Â ¾Æ´ÏÁö¸¸ Àӽà ÆÄÀÏÀ» ¸¸µé ¶§¿Í °°Àº °æ¿ì¿¡ À¯À¶ÇÏ°Ô »ç¿ëµÈ´Ù.

 

·çÇÁ (Loop)

    ½© ½ºÅ©¸³Æ®¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â ·çÇÁ´Â ¼¼ °¡Áö°¡ ÀÖ´Ù.

      while  Á¶°Ç½Ä
      do
                ¸í·Éµé
      done

    while ·çÇÁ´Â Á¶°Ç½ÄÀÌ ÂüÀÎ µ¿¾È do~done »çÀÌÀÇ ¸í·ÉÀ» ¼öÇàÇÑ´Ù.

     

      $ cat arg-while
      #!/bin/sh
      #
      # arg-while: ¸ðµç ÀÎÀÚ¸¦ Ãâ·ÂÇÑ´Ù.
      #

      echo Argument number: $#
      while [ $# -gt 0 ]
      do
            echo $1
            shift
      done
      $ ./arg-whilel 1 2 3 4
      Argument number: 4
      1
      2
      3
      4

     

      until   Á¶°Ç½Ä
      do
                ¸í·Éµé
      done

    until ·çÇÁ´Â Á¶°Ç½ÄÀÌ ÂüÀÌ µÉ ¶§±îÁö do~done »çÀÌÀÇ ¸í·ÉÀ» ¼öÇàÇÑ´Ù.

     

      $ cat arg-until
      #!/bin/sh
      #
      # arg-until: ¸ðµç ÀÎÀÚ¸¦ Ãâ·ÂÇÑ´Ù.
      #

      echo Argument number: $#
      until [ $# -eq 0 ]
      do
            echo $1
            shift
      done
      $ ./arg-until 1 2 3 4
      Argument number: 4
      1
      2
      3
      4

     

      for º¯¼ö in [¹®ÀÚ¿­ ¸ñ·Ï]
      do
            ¸í·Éµé
      done

     

      $ cat arg-for
      #
      !/bin/sh
      #
      # arg-for: @ ÀÎÀÚ¾ÕÀÇ ÀÎÀÚ¸¦ Ãâ·ÂÇÑ´Ù.
      #
      echo Argument number: $#
      for arg
      do
      if [ $arg = @ ]
      then
      break
      fi
      echo $arg
      done
      $ ./arg-for 1 2 @ 3 2 4 6
      Argument number: 7
      1
      2

     

    for ·çÇÁ´Â ¹®ÀÚ¿­ ¸ñ·ÏÀÇ °ªµéÀÌ for º¯¼ö¿¡ ÁöÁ¤µÇ¾î do~done »çÀÌÀÇ ¸í·ÉÀ» ¼öÇàÇÑ´Ù. in ºÎºÐÀ» »ý·«ÇÏ¸é ¸í·ÉÇà ÀÎÀÚ°¡ »ç¿ëµÈ´Ù. break¸¦ »ç¿ëÇÏ¸é ·çÇÁ¸¦ ºüÁ®³ª¿Â´Ù.

    ·çÇÁ´Â ¾Æ´ÑÁö¸¸ C¿¡¼­ÀÇ switch¿Í ºñ½ÁÇÑ ¿ªÇÒÀ» ÇÏ´Â case±¸¹®ÀÌ ÀÖ´Ù.
    caseÀÇ Çü½ÄÀº ´ÙÀ½°ú °°´Ù.

      case º¯¼ö in
      ÆÐÅÏ1) ¸í·Éµé ;;
      ÆÐÅÏ2) ¸í·Éµé ;;
      *) ¸í·Éµé ;;
      esac

    º¯¼ö°ªÀ» ÆÐÅÏ1ºÎÅÍ ºñ±³ÇØ°¡¸é¼­ ÇØ´çÇÏ´Â ÆÐÅÏÀÌ ÀÖÀ¸¸é ±×¿¡ ÇØ´çÇÏ´Â ¸í·ÉµéÀ» ¼öÇàÇÑ´Ù. ;;Àº ÆÐÅÏ¿¡ ÇØ´çÇÏ´Â ¸í·ÉÀÇ ³¡À» ³ªÅ¸³»°í esacÀº (case¸¦ °Å²Ù·Î ¾´ °ÍÀÌ´Ù.) case ±¸¹®ÀÇ ³¡À» ³ªÅ¸³½´Ù. ÇØ´çµÇ´Â ÆÐÅÏÀÌ ¾ø´Ù¸é * ÆÐÅÏÀÇ ¸í·ÉÀ» ¼öÇàÇÏ°Ô µÈ´Ù. ÆÐÅÏ¿¡´Â ½©¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â ¿ÍÀϵå Ä«µå(*,?), Á¤±ÔÇ¥Çö½Ä, ¹®ÀÚ¿­, º¯¼ö°¡ ¿Ã ¼ö ÀÖ´Ù.

     

      $ cat check-flag
      #!/bin/sh
      #
      # check_flag: ÀÎÀÚ¸¦ °Ë»çÇÏ¿© flag¸¦ ÄÒ´Ù.
      #

      aflag=0
      bflag=0

      for arg
      do
                case $arg in
                 -a) aflag=1 ;;
                 -b) bflag=1 ;;
             *) echo ¡°Usage: `basename $0` [-a] [-b]¡± 1>&2
                exit 1 ;;
             esac
      done

      echo aflag=$aflag bflag=$bflag
      $ ./check-flag
      aflag=0 bflag=0
      $ ./check-flag -a
      aflag=1 bflag=0
      $ ./check-flag -a -b
      aflag=1 bflag=1 

     

     Á¶°Ç½Ä

    if, while, until ±¸¹®¿¡¼­´Â Á¶°Ç½ÄÀÌ »ç¿ëµÈ´Ù. Á¶°Ç½ÄÀº Âü°ú °ÅÁþÀÇ °á°ú¸¦ ³»´Â ±¸¹®ÀÌ´Ù. ÂüÀÏ °æ¿ì Á¶°Ç½ÄÀº 0À» ¹ÝȯÇÏ°í, °ÅÁþÀÏ °æ¿ì¿¡´Â 1À» ¹ÝȯÇÑ´Ù. Á¶°Ç½ÄÀÇ Çü½ÄÀº ´ÙÀ½°ú °°´Ù.

    test ½Ä
    [ ½Ä ]
    :

    ½ÄÀº ÆÄÀϽÄ, ¹®ÀÚ¿­½Ä, ¼ö½ÄÀÇ ¼¼ Á¾·ù·Î Å©°Ô ³ª´­ ¼ö ÀÖ´Ù. :´Â Ç×»ó ÂüÀÓÀ» ³ªÅ¸³½´Ù. while, until¿¡¼­ ¹«ÇÑ ·çÇÁ¸¦ ¸¸µé±â À§ÇØ »ç¿ëµÈ´Ù.

    ÆÄÀϽÄÀº ¾î¶² ÆÄÀÏÀÇ ¼Ó¼ºÀ» °Ë»çÇÏ´Â °ÍÀ¸·Î ´ÙÀ½°ú °°Àº Á¾·ù°¡ ÀÖ´Ù.

    -b ÆÄÀÏ : ÆÄÀÏÀÌ ºí·° ÀåÄ¡ ÆÄÀÏÀ̸é Âü
    -c ÆÄÀÏ : ÆÄÀÏÀÌ ¹®ÀÚ ÀåÄ¡ ÆÄÀÏÀ̸é Âü
    -d ÆÄÀÏ : ÆÄÀÏÀÌ µð·ºÅ丮À̸é Âü
    -e ÆÄÀÏ : ÆÄÀÏÀÌ Á¸ÀçÇϸé Âü
    -f ÆÄÀÏ : ÆÄÀÏÀÌ Á¤±Ô ÆÄÀÏÀ̸é Âü
    -L ÆÄÀÏ : ÆÄÀÏÀÌ ½Éº¼¸¯ ¸µÅ©À̸é Âü
    -p ÆÄÀÏ : ÆÄÀÏÀÌ ³×ÀÓµå(named) ÆÄÀÌÇÁÀ̸é Âü
    -S ÆÄÀÏ : ÆÄÀÏÀÌ ¼ÒÄÏÀ̸é Âü
    -r ÆÄÀÏ : ÆÄÀÏÀÌ Àб⠰¡´ÉÀ̸é Âü
    -s ÆÄÀÏ : ÆÄÀÏÀÇ Å©±â°¡ 0º¸´Ù Å©¸é Âü
    -w ÆÄÀÏ : ÆÄÀÏÀÌ ¾²±â °¡´ÉÀ̸é Âü
    -x ÆÄÀÏ : ÆÄÀÏÀÌ ½ÇÇà °¡´ÉÀ̸é Âü
    ÆÄÀÏ1 -nt ÆÄÀÏ2 : ÆÄÀÏ1ÀÌ ÆÄÀÏ2º¸´Ù »õ·Î¿î ÆÄÀÏÀ̸é Âü
    ÆÄÀÏ1 -ot ÆÄÀÏ2 : ÆÄÀÏ1ÀÌ ÆÄÀÏ2º¸´Ù ¿À·¡µÈ ÆÄÀÏÀ̸é Âü
    ÆÄÀÏ1 -ef ÆÄÀÏ2 : ÆÄÀÏ1°ú ÆÄÀÏ2°¡ °°Àº ÆÄÀÏÀ̸é Âü

    ¹®ÀÚ¿­½ÄÀº ¹®ÀÚ¿­¿¡ ´ëÇÑ ºñ±³¸¦ ÇÑ´Ù.

    -z ¹®ÀÚ¿­ : ¹®ÀÚ¿­ÀÇ ±æÀÌ°¡ 0À̸é Âü
    -n ¹®ÀÚ¿­ : ¹®ÀÚÀÏÀÇ ±æÀÌ°¡ 0ÀÌ ¾Æ´Ï¸é Âü
    ¹®ÀÚ¿­1 = ¹®ÀÚ¿­2 : ¹®ÀÚ¿­1°ú ¹®ÀÚ¿­2°¡ °°À¸¸é Âü
    ¹®ÀÚ¿­1 != ¹®ÀÚ¿­2 : ¹®ÀÚ¿­1°ú ¹®ÀÚ¿­2°¡ ´Ù¸£¸é Âü

    ¼ö½ÄÀº ¼ýÀÚ°ªÀ» ºñ±³ÇÑ´Ù. ¾çÀÇ Á¤¼ö, À½ÀÇ Á¤¼ö, 0, º¯¼ö°ªÀÌ ¿Ã ¼ö ÀÖ´Ù.

    °ª1 -eq °ª2 : °ª1 = °ª2
    °ª1 -ne °ª2 : °ª1 != °ª2
    °ª1 -lt °ª2 : °ª1 < °ª2
    °ª1 -le °ª2 : °ª1 <= °ª2
    °ª1 -gt °ª2 : °ª1 > °ª2
    °ª1 -ge °ª2 : °ª1 >= °ª2

    ÀÌ¿Ü¿¡µµ ´ÙÀ½°ú °°ÀÌ ½Ä Àüü¿¡ ´ëÇÑ ¿¬»êÀÌ °¡´ÉÇÏ´Ù.

    ! ½Ä : ½Ä¿¡ ´ëÇÑ ºÎÁ¤(not)
    ½Ä1 -a ½Ä2 : ½Ä1°ú ½Ä2¿¡ ´ëÇÑ ³í¸®°ö(and)
    ½Ä1 -o ½Ä2 : ½Ä1°ú ½Ä2¿¡ ´ëÇÑ ³í¸®ÇÕ(or)

 

°á·Ð

    À̹ø ±â»ç¿¡¼­´Â ½© ½ºÅ©¸³Æ®¿¡ ´ëÇÑ ±âº»ÀûÀÎ »çÇ×µéÀ» »ìÆ캸¾Ò´Ù. ÀÛ¼º, ½ÇÇà ¹æ¹ý°ú ±âº»ÀûÀÎ ¹®¹ý¸¸À¸·Îµµ °£´ÜÈ÷ °³ÀÎÀûÀ¸·Î À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Â ½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ´ÙÀ½ ±â»ç¿¡´Â °¢ ¼¼ºÎ »çÇ׿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸í°ú ±â¹ý¿¡ ´ëÇؼ­ ¾Ë¾Æµµ·Ï ÇÏÀÚ.

    <Âü°íÀÚ·á>
    ¡¤UNIX POWER TOOLS, 2ed. Jerry Peek,
        Tim O¡¯Reilly, Mike Loukides. O¡¯Reilly
    ¡¤bash ¸Å´º¾ó ÆäÀÌÁö




¡ã top

homeÀ¸·Î...