· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Shell Programming Tutorial

½© ÇÁ·Î±×·¡¹Ö °­ÁÂ

  • Âü°í¼­Àû: Ãʺ¸ÀÚ¿ë ¸®´ª½º ÇÁ·Î±×·¡¹Ö (´ë¸²ÃâÆÇ»ç, Çѵ¿ÈÆ,À̸¸¿ë¿ª, NEIL MATTHEW, RICHARD STONES Àú)
  • ³ÝÃ÷°í ¸®´ª½º µ¿È£È¸ 7¿ù Á¦ 5ȸ Á¤±â °ø°³°­Á ÀÚ·á
  • ±Û¾´ÀÌ: À§°æ¼· <powerhack@netsgo.com>
  • À§Å°¹®¼­ º¯È¯: À±ÇöÈ£ <hhyoon@kldp.org> 2005³â 2¿ù 23ÀÏ. ¿øº»: http://wiki.kldp.org/KoreanDoc/Shell_Programming-KLDP


1. º¯¼ö

  • ½©º¯¼ö´Â óÀ½ »ç¿ëµÉ ¶§ ¸¸µé¾îÁø´Ù. Áï ¹Ì¸® ¼±¾ðÇÒ ÇÊ¿ä°¡ ¾ø´Ù.
  • ½©º¯¼ö´Â À¯´Ð½º ¸í·É°ú ¸¶Âù°¡Áö·Î ´ë¼Ò¹®ÀÚ¿¡ ±¸º°ÀÌ ÀÖ´Ù.
  • ½©º¯¼ö´Â ±âº»ÀûÀ¸·Î µ¥ÀÌÅ͸¦ ¹®ÀÚ¿­·Î ÀúÀåÇÑ´Ù. ¼öÄ¡¸¦ ´ëÀÔÇصµ ½ÇÁ¦ ¼öÄ¡°¡ ¾Æ´Ñ ¹®ÀÚ¿­ÀÌ ÀúÀåµÈ´Ù. °è»êÀÌ ÇÊ¿äÇÒ °æ¿ì´Â ÀÚµ¿À¸·Î ¼öÄ¡·Î º¯È¯ÇÏ¿© °è»êÈÄ ´Ù½Ã ¹®ÀÚ¿­·Î ÀúÀåµÈ´Ù.
  • ½©º¯¼öÀÇ °ªÀ» »ç¿ëÇÒ ¶§´Â º¯¼ö¸í¾Õ¿¡ "$" ¸¦ ºÙ¿©¼­ »ç¿ëÇÑ´Ù.
  • ½©º¯¼ö¿¡ °ªÀ» ´ëÀÔÇÒ¶§´Â "$"¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù.
  • ½©º¯¼ö´Â ŸÀÔÀÌ ¾ø´Ù. Áï ¾Æ¹« °ªÀ̳ª ´Ù ³ÖÀ» ¼ö ÀÖ´Ù.

1.1. ȯ°æº¯¼ö

½©À» ±âµ¿ÇÏ°í³ª¸é ±âº»ÀûÀ¸·Î ¼ÂÆõǾîÀÖ´Â º¯¼öµéÀÌ´Ù. À¯´Ð½º/¸®´ª½º¿¡´Â ¸¹Àº ȯ°æº¯¼öµéÀÌ ÀÖ°í ÇÊ¿äÇÑ°æ¿ì ÀÌ º¯¼öµéÀ» ¸¶Ä¡ ÀϹݺ¯¼öó·³ °ªÀ» ¾ò¾î¿À°Å³ª ¼ÂÆÃÇÒ ¼ö ÀÖ´Ù. ¿©±â¼­´Â ½©°ú Á÷Á¢ÀûÀÎ °ü·ÃÀÌ Àִ°͸¸ ¼³¸íÇÑ´Ù.
  • $0 - ½ÇÇàµÈ ½© ½ºÅ©¸³Æ® À̸§
  • $# - ½ºÅ©¸³Æ®¿¡ ³Ñ°ÜÁø ÀÎÀÚÀÇ °¹¼ö
  • $$ - ½© ½ºÅ©¸³Æ®ÀÇ ÇÁ·Î¼¼½º ID

1.2. ÀÎÀÚ º¯¼ö

½©½ºÅ©¸³Æ®¿¡ ÀÎÀÚ¸¦ ³Ñ°ÜÁÙ¶§ ±× ÀÎÀڵ鿡 ´ëÇÑ Á¤º¸¸¦ °¡Áö°í ÀÖ´Â º¯¼öµé.
  • $1~ $nnn - ³Ñ°ÜÁø ÀÎÀÚµé
  • $* - ½ºÅ©¸³Æ®¿¡ Àü´ÞµÈ ÀÎÀÚµéÀ» ¸ð¾Æ³õÀº ¹®ÀÚ¿­. ÇϳªÀÇ º¯¼ö¿¡ ÀúÀåµÇ¸ç IFS ȯ°æº¯¼öÀÇ Ã¹¹ø° ¹®ÀÚ·Î ±¸ºÐµÈ´Ù.
  • $@ - $*°ú °°´Ù. ´Ù¸¸ ±¸ºÐÀÚ°¡ IFSº¯¼öÀÇ ¿µÇâÀ» ¹ÞÁö ¾Ê´Â´Ù.

2. ÀϹݺ¯¼ö

ÀϹݺ¯¼ö¿¡ Ưº°ÇÑ Á¦¾àÀº ¾ø´Ù. ´Ü ´ë¼Ò¹®ÀÚ ±¸ºÐ¸¸ Á¤È®ÇÏ°Ô ÇØÁÖ¸é µÈ´Ù.

¿¹Á¦
#!/bin/sh
echo "This Script Executable File : $0"
echo "Argument Count : $#"
echo "Process ID : $$"
echo "Argument List \$* : $*"
echo "Argument List \$@ : $@"
echo "Argument 1 : $1"
echo "Argument 2 : $2"
echo "Argument 3 : $3"
echo "Argument 4 : $4"  
½ÇÇà
$chmod 755 test1
$./test1 a1 a2 a3 a4
This Script Executable File : ./test1
Argument Count : 4
Process ID : 905
Argument List $* : a1 a2 a3 a4
Argument List $@ : a1 a2 a3 a4
Argument 1 : a1
Argument 2 : a2
Argument 3 : a3
Argument 4 : a4

2.1. ¿¬»ê

º¯¼öÀÇ »ê¼ú ¿¬»êÀº »ý°¢ÇÏ´Â °Íó·³ ½±Áö ¾Ê´Ù. À§¿¡¼­ ¾ð±ÞÇßµíÀÌ º¯¼ö¿¡´Â ¸ðµç °ÍÀÌ ¹®ÀÚ¿­·Î ÀúÀåµÇ±â ¶§¹®¿¡ ¿¬»êÀÌ ºÒ°¡´ÉÇÏ´Ù. ¿¬»êÀ» À§Çؼ­´Â Á» º¹ÀâÇÑ ÀýÂ÷¸¦ °ÅÃÄ¾ß ÇÑ´Ù.
º¯¼ö = $((»ê¼ú½Ä))
ÀÌ°ÍÀÌ °¡Àå ´Ü¼øÇÑ ¿¬»ê ±ÔÄ¢ÀÌ´Ù. »ê¼ú½Ä³»¿¡´Â º¯¼ö($1, $a ¿Í °°Àº) µµ µé¾î°¥ ¼ö ÀÖ´Ù. »ê¼ú½Ä ³»¿¡ ¼ýÀÚ°¡ ¾Æ´Ñ ¹®ÀÚ¿­, ¶Ç´Â ¹®ÀÚ¿­ÀÌ ´ã°ÜÀÖ´Â º¯¼ö°¡ µé¾î°¡¸é ±×°ÍµéÀº °è»ê¿¡¼­ Á¦¿ÜµÈ´Ù. (Á¤È®È÷ ¸»Çϸé 0 À¸·Î °£ÁÖµÇ¾î ¿¬»êÀÌ ÀÌ·ç¾î ÁöÁö ¾Ê´Â´Ù.)

2.2. ¸Å°³º¯¼ö È®Àå

¸Å°³º¯¼ö È®ÀåÀ̶õ º¯¼öÀÇ °ªÀ» ¹®ÀÚ¿­ µîÀ¸·Î ´ëüÇÏ´Â °ÍÀ» ¸»ÇÑ´Ù. ´Ü¼øÇÑ ´ëü»Ó ¾Æ´Ï¶ó º¯¼ö³»ÀÇ ¹®ÀÚ¿­À» Á¶ÀÛÇÏ¿© ¿øÇÏ´Â ¹®ÀÚ¿­¸¸À» ÃßÃâÇÒ ¼öµµ ÀÖ´Ù.

Çü½Ä:
  • ${parm:-default} - parmÀÌ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é default·Î ´ëüµÈ´Ù.
  • ${#parm} - parmÀÇ ±æÀ̸¦ ÂüÁ¶ÇÑ´Ù.(°¡Á®¿Â´Ù)
  • ${parm%word} - ³¡¿¡¼­ºÎÅÍ word¿Í ÀÏÄ¡ÇÏ´Â parmÀÇ ÃּҺκÐ(ù¹ø° ÀÏÄ¡)À» Á¦°ÅÇÏ°í ³ª¸ÓÁö¸¦ ¹ÝȯÇÑ´Ù.
  • ${parm%%word} - ³¡¿¡¼­ºÎÅÍ word¿Í ÀÏÄ¡ÇÏ´Â parmÀÇ ÃÖ´ëºÎºÐ(¸¶Áö¸· ÀÏÄ¡)À» Á¦°ÅÇÏ°í ³ª¸ÓÁö¸¦ ¹ÝȯÇÑ´Ù.
  • ${parm#word} - óÀ½ºÎÅÍ word¿Í ¸Â´Â parmÀÇ ÃּҺκÐ(ù¹ø° ÀÏÄ¡)À» Á¦°ÅÇÏ°í ³ª¸ÓÁö ºÎºÐÀ» ¹ÝȯÇÑ´Ù.
  • ${parm##word} - óÀ½ºÎÅÍ word¿Í ¸Â´Â parmÀÇ ÃÖ´ëºÎºÐ(¸¶Áö¸· ÀÏÄ¡)À» Á¦°ÅÇÏ°í ³ª¸ÓÁö¸¦ ¹ÝȯÇÑ´Ù.
word¿¡´Â ¿ÍÀϵå Ä«µå¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.¿¹¸¦ º¸ÀÚ.
1 #!/bin/sh
2
3 p="/usr/X11R6/bin/startx"
4
5 unset p
6 a=${p:-"Variable p Not found"}
7 echo $a
8
9 p="/usr/X11R6/bin/startx"
10 a=${p:-"Variable parm Not found"}
11 echo $a
12
13 a=${#p}
14 echo $a
15
16 a=${p%/*}
17 echo $a
18
19 a=${p%%/*}
20 echo $a
21
22 a=${p#*/}
23 echo $a
24
25 a=${p##*/}
26 echo $a
27                    
À§ ½ºÅ©¸³Æ®ÀÇ °á°ú´Â ´ÙÀ½°ú °°´Ù.
Variable p Not found
/usr/X11R6/bin/startx
21
/usr/X11R6/bin

usr/X11R6/bin/startx
startx
  • 6Çà : º¯¼ö p °¡ Á¦°Å µÇ¾úÀ¸¹Ç·Î "Variable p Not found" °¡ a¿¡ µé¾î°£´Ù.
  • 10Çà : º¯¼ö p °¡ ÀÖÀ¸¹Ç·Î ±×´ë·Î a¿¡ µé¾î°£´Ù.
  • 13Çà : a¿¡´Â º¯¼ö pÀÇ ±æÀÌ°¡ µé¾î°£´Ù.
  • 16Çà : p ¿¡¼­ °¡Àå ¿À¸¥ÂÊÀÇ "/"ºÎÅÍ ³¡±îÁö Áö¿ì°í ³ª¸ÓÁö¸¦ a¿¡ ³Ö´Â´Ù.
  • 19Çà : p ¿¡¼­ °¡Àå ¿ÞÂÊÀÇ "/" ºÎÅÍ ³¡±îÁö Áö¿ì°í ³ª¸ÓÁö¸¦ a¿¡ ³Ö´Â´Ù. (¾Æ¹«°Íµµ ¾ø´Ù)
  • 22Çà : p ÀÇ Ã³À½ºÎÅÍ °¡Àå¿ÞÂÊÀÇ "/" ±îÁö Áö¿ì°í ³ª¸ÓÁö¸¦ a¿¡ ³Ö´Â´Ù.
  • 25Çà : p ÀÇ Ã³À½ºÎÅÍ °¡Àå ¿À¸¥ÂÊÀÇ "/"±îÁö Áö¿ì°í ³ª¸ÓÁö¸¦ a¿¡ ³Ö´Â´Ù.

3. Á¶°Ç ÆÇ´Ü

½© ½ºÅ©¸³Æ®¿¡¼­ Á¶°ÇÆÇ´ÜÀº if ¿Í test ¸í·ÉÀ» È¥ÇÕÇÏ¿© »ç¿ëÇÑ´Ù. ÀϹÝÀûÀÎ ¿¹´Â ´ÙÀ½°ú °°´Ù.
if test -f test1
then
...
fi

-f ´Â ÁÖ¾îÁø ÀÎÀÚ°¡ ÀÏ¹Ý ÆÄÀÏÀÏ ¶§ ÂüÀÌ µÈ´Ù.

test ¸í·ÉÀº [] ·Î ´ëüµÉ ¼ö ÀÖ´Ù.
if [ -f test1 ]
then
...
fi

if [ -f test1 ]; then
...
fi

3.1. test ¸í·É

test ¸í·ÉÀÇ Á¶°ÇÀº ´ÙÀ½°ú °°ÀÌ ¼¼ ºÎ·ù·Î ³ª´©¾îÁø´Ù.

3.1.1. ¹®ÀÚ¿­ ºñ±³

  • string - stringÀÌ ºó ¹®ÀÚ¿­ÀÌ ¾Æ´Ï¶ó¸é Âü
  • string1 = string2 - µÎ ¹®ÀÚ¿­ÀÌ °°´Ù¸é Âü
  • string1 != string2 - µÎ ¹®ÀÚ¿­ÀÌ ´Ù¸£¸é Âü
  • -n string - ¹®ÀÚ¿­ÀÌ null(ºó ¹®ÀÚ¿­) ÀÌ ¾Æ´Ï¶ó¸é Âü
  • -z string - ¹®ÀÚ¿­ÀÌ null(ºó ¹®ÀÚ¿­) À̶ó¸é Âü

3.1.2. »ê¼ú ºñ±³

  • expr1 -eq expr2 - µÎ Ç¥Çö½Ä °ªÀÌ °°´Ù¸é Âü ('EQual')
  • expr1 -ne expr2 - µÎ Ç¥Çö½Ä °ªÀÌ °°Áö ¾Ê´Ù¸é Âü ('Not Equal')
  • expr1 -gt expr2 - expr1 > expr2 À̸é Âü ('Greater Than')
  • expr1 -ge expr2 - expr1 >= expr2 À̸é Âü ('Greater Equal')
  • expr1 -lt expr2 - expr1 < expr2 À̸é Âü ('Less Than')
  • expr1 -le expr2 - expr1 <= expr2 À̸é Âü ('Less Equal')
  • ! expr - expr ÀÌ ÂüÀÌ¸é °ÅÁþ, °ÅÁþÀ̸é Âü
  • expr1 -a expr2 - expr1 AND expr2 ÀÇ °á°ú (µÑ´Ù ÂüÀ̸é Âü, 'And')
  • expr1 -o expr2 - expr1 OR expr2 ÀÇ °á°ú (µÑÁß Çϳª¸¸ ÂüÀ̸é Âü, 'Or')

3.1.3. ÆÄÀÏ Á¶°Ç

  • -b FILE - FILE ÀÌ ºí·° µð¹ÙÀ̽º À̸é Âü
  • -c FILE - FILE ÀÌ ¹®ÀÚ µð¹ÙÀ̽º À̸é Âü.
  • -d FILE - FILE ÀÌ µð·ºÅ丮À̸é Âü
  • -e FILE - FILE ÀÌ Á¸ÀçÇϸé Âü
  • -f FILE - FILE ÀÌ Á¸ÀçÇÏ°í Á¤±ÔÆÄÀÏÀ̸é Âü
  • -g FILE - FILE ÀÌ set-group-id ÆÄÀÏÀ̸é Âü
  • -h FILE - FILE ÀÌ ½Éº¼¸¯ ¸µÅ©À̸é Âü
  • -L FILE - FILE ÀÌ ½Éº¼¸¯ ¸µÅ©À̸é Âü
  • -k FILE - FILE ÀÌ Sticky bit °¡ ¼ÂÆõǾî ÀÖÀ¸¸é Âü
  • -p FILE - True if file is a named pipe.
  • -r FILE - ÇöÀç »ç¿ëÀÚ°¡ ÀÐÀ» ¼ö ÀÖ´Â ÆÄÀÏÀ̸é Âü
  • -s FILE - ÆÄÀÏÀÌ ºñ¾îÀÖÁö ¾ÊÀ¸¸é Âü
  • -S FILE - ¼ÒÄÏ µð¹ÙÀ̽ºÀ̸é Âü
  • -t FD - FD °¡ ¿­·ÁÁø Å͹̳ÎÀ̸é Âü
  • -u FILE - FILE ÀÌ set-user-id ÆÄÀÏÀ̸é Âü
  • -w FILE - ÇöÀç »ç¿ëÀÚ°¡ ¾µ ¼ö ÀÖ´Â ÆÄÀÏ(writable file) À̸é Âü
  • -x FILE - ÇöÀç»ç¿ëÀÚ°¡ ½ÇÇàÇÒ ¼ö ÀÖ´Â ÆÄÀÏ(Executable file) À̸é Âü
  • -O FILE - FILE ÀÇ ¼ÒÀ¯ÀÚ°¡ ÇöÀç »ç¿ëÀÚÀ̸é Âü
  • -G FILE - FILE ÀÇ ±×·ìÀÌ ÇöÀç »ç¿ëÀÚÀÇ ±×·ì°ú °°À¸¸é Âü
  • FILE1 -nt FILE2 - : FILE1ÀÌ FILE2 º¸´Ù »õ·Î¿î ÆÄÀÏÀ̸é ( ÃÖ±ÙÆÄÀÏÀ̸é ) Âü
  • FILE1 -ot FILE2 - : FILE1ÀÌ FILE2 º¸´Ù ¿À·¡µÈ ÆÄÀÏÀ̸é Âü
  • FILE1 -ef FILE2 - : FILE1 ÀÌ FILE2ÀÇ Çϵ帵ũ ÆÄÀÏÀ̸é Âü

3.2. if ±¸¹®

if ¹®Àº Á¶°ÇÀ» ÆÇ´ÜÇÏ¿© ÁÖ¾îÁø ¹®ÀåÀ» ¼öÇàÇÑ´Ù.

3.2.1. Çü½Ä 1 (´ÜÀÏ if ¹®)

Çü½Ä:
if [ Á¶°Ç ]
then
    ¹®Àå1
    ¹®Àå2
fi

3.2.2. Çü½Ä 2 (if-else ¹®)

Çü½Ä:
if [ Á¶°Ç ]
then
    ¹®Àå3
    ¹®Àå4
fi

3.2.3. Çü½Ä 3 (if-elif ¹®)

Çü½Ä:
if [ Á¶°Ç ]
then
    ¹®Àå1
    ¹®Àå2
elif
    ¹®Àå3
    ¹®Àå4
else
    ¹®Àå5
    ¹®Àå6
fi

3.3. case ±¸¹®

'ÆÐÅÏ'¿¡´Â * ¹®ÀÚ, Áï ¿ÍÀϵåÄ«µå¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

Çü½Ä:
case º¯¼ö in
ÆÐÅÏ [ | ÆÐÅÏ ] ... ) ¹®Àå ;;
ÆÐÅÏ [ | ÆÐÅÏ ] ... ) ¹®Àå ;;
....
* ) ¹®Àå ;;
esac

3.4. ¸ñ·Ï

¿©·¯ ¸í·ÉÀ» ½ÇÇàÇÒ¶§ ¾ÕÀÇ ¸í·ÉÀÇ °á°ú¿¡ ÀÇÇؼ­ ´ÙÀ½ÇൿÀÌ °áÁ¤µÇ¾î¾ß ÇÒ °æ¿ì°¡ ÀÖ´Ù. ÀÌ·±°æ¿ì¿¡ AND³ª ORÁ¶°ÇÀ» »ç¿ëÇؼ­ Çѹø¿¡ ó¸®ÇÒ ¼ö ÀÖ´Ù. ÀÌ°ÍÀº ½© ½ºÅ©¸³Æ® »Ó ¾Æ´Ï¶ó ¸í·ÉÇà¿¡¼­µµ »ç¿ë °¡´ÉÇÏ´Ù. ¹°·Ð if ¹®À» ÀÌ¿ëÇؼ­ ¹Ýȯ°ªÀ» °Ë»çÇÏ¿© ó¸®ÇÒ ¼ö ÀÖÁö¸¸ ¹®ÀåÀÌ ±æ¾îÁö°í º¹ÀâÇØÁø´Ù.

3.4.1. AND ¸ñ·Ï

statment1 && statment2 && statmentN && .....

À§ÀÇ ¸í·ÉµéÀº °¢ ¸í·ÉÀÌ °ÅÁþÀÌ µÉ ¶§ ±îÁö ¸í·ÉÀ» ¼öÇàÇØ ³ª°£´Ù. ¼öÇà µµÁß °á°ú°¡ °ÅÁþÀÌ µÇ¸é ±×ÀÌÈÄÀÇ ¸í·ÉÀº ¼öÇàµÇÁö

3.4.2. OR ¸ñ·Ï

statment1 || statment2 || statmentN || .....

À§ÀÇ ¸í·ÉµéÀº °¢ ¸í·ÉÀÌ °ÅÁþÀÌ ³ª¿À´Â µ¿¾È °è¼ÓµÈ´Ù. Áï ÂüÀÌ ³ª¿À¸é ½ÇÇàÀ» ¸ØÃá´Ù.

3.4.3. AND¿Í OR¸ñ·ÏÀº È¥¿ëÀÌ °¡´ÉÇÏ´Ù.

[ Á¶°Ç ] && ¹®Àå1 || ¹®Àå2

À§ÀÇ ¿¹´Â Á¶°ÇÀÌ ÂüÀÌ¸é ¹®Àå1À» ¼öÇàÇÏ°í °ÅÁþÀÌ¸é ¹®Àå2¸¦ ¼öÇàÇÑ´Ù.

¶ÇÇÑ À§ÀÇ ¹®Àå1À̳ª ¹®Àå2¿¡¼­ ¿©·¯°³ÀÇ ¹®ÀåÀ» ¼öÇàÇÏ°í ½ÍÀ» ¶§´Â {}¸¦ »ç¿ëÇÏ¸é µÈ´Ù.
[Á¶°Ç] && {
    ¹®Àå1
    ¹®Àå2
    ¹®Àå3
} || {
    ¹®Àå4
    ¹®Àå5
    ¹®Àå6
}

4. Á¦¾î¹®

4.1. for

for ¹®Àº ÁöÁ¤µÈ ¹üÀ§¾È¿¡¼­ ·çÇÁ¸¦ ¼öÇàÇÑ´Ù. ¹üÀ§´Â ¾î¶² ÁýÇÕµµ °¡´ÉÇÏ´Ù.

Çü½Ä:
for º¯¼ö in °ª1, °ª2, ...
do
    ¹®Àå
done

¸Å ·çÇÁ¸¦ µ¹¶§¸¶´Ù º¯¼öÀÇ °ªÀº in ÀÌÈÄÀÇ °ªÀ¸·Î ´ëüµÈ´Ù.

¿¹Á¦:
for str in "test1", "test2", "test3", "test4"
do
    echo @str
done

Ãâ·Â:
test1
test2
test3
test4

°ª¿¡´Â ¿ÍÀϵå Ä«µå È®ÀåÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
for file in $(ls -a | grep "^\.")
do
    echo "$file is Hidden File"
done

À§ ¿¹ÀÇ Ãâ·Â °á°ú´Â ÇöÀç µð·ºÅ丮¿¡¼­ óÀ½ÀÌ "." À¸·Î½ÃÀÛÇÏ´Â ÆÄÀÏ(È÷µçÆÄÀÏ)¸¸À» Ãâ·ÂÇÑ´Ù.

for file in $(ls chap[345].txt); do
    echo "--- $file ---" >> Books.txt
    cat $file >> Books.txt
done

À§ÀÇ ¿¹´Â chap3.txt, chap4.txt, chap5.txt ÆÄÀÏÀ» Books.txt ¶ó´Â ÆÄÀÏ¿¡ ºÙ¿© ³Ö´Â´Ù.

´ÙÀ½ÀÇ ¿¹¸¦ º¸°í °á°ú¸¦ ¿¹ÃøÇغ¸ÀÚ.
echo "\$* output"

for fvar in $*
do
    echo $fvar
done

echo "\$@ output"
for fvar in $@
do
    echo $fvar
done

4.2. while

for ¸í·ÉÀÇ °æ¿ì´Â Ƚ¼ö¸¦ ÁöÁ¤Çؼ­ ·çÇÁ¸¦ ¼öÇàÇÏ´Â µ¥´Â ¹®Á¦°¡ ÀÖ´Ù. while ¹®Àº ½ÇÇà Ƚ¼ö°¡ ÁöÁ¤µÇÁö ¾Ê¾ÒÀ» ¶§ Æí¸®ÇÏ´Ù.

Çü½Ä:
while Á¶°Ç¹®
do
    ¹®Àå
done

¿¹Á¦¸¦ º¸ÀÚ. Æнº¿öµå¸¦ ÀÔ·Â¹Þ°í ¸Â´ÂÁö È®ÀÎÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù.
echo "Enter Password : "
read password1

echo "Retype Password : "
read password2

while [ "$password1" != "$password2" ]
do
    echo "Password mismatch Try again "

    echo "Retype Password : "
    read password2
done

echo "OK Password Match complete"

¾î¶»°Ô µ¿ÀÛÇϴ°¡ ?

4.3. until

untilÀº while¹®°ú µ¿ÀÏÇÑ È¿°ú¸¦ ³»Áö¸¸ Á¶°ÇÀÌ ¹Ý´ëÀÌ´Ù. Áï, while¹®Àº Á¶°ÇÀÌ ÂüÀϵ¿¾È ·çÇÁ¸¦ ¼öÇàÇÏÁö¸¸ untilÀº Á¶°ÇÀÌ °ÅÁþÀÏ µ¿¾È ·çÇÁ¸¦ ¼öÇàÇÑ´Ù.

Çü½Ä:
until Á¶°Ç¹®
do
    ¹®Àå
done

´ÙÀ½ ¿¹¸¦ º¸ÀÚ. ÀÌ ¿¹´Â ÁöÁ¤ÇÑ À¯Àú°¡ ·Î±×ÀÎÇÏ¸é ¾Ë·ÁÁØ´Ù.
#!/bin/sh

until who | grep "$1" > /dev/null
do
    sleep 10
done

echo "User $1 just logged in ^_^"

4.4. select

select¹®Àº ¿øÇÏ´Â ¸®½ºÆ®¸¦ Ãâ·ÂÇÏ°í ±× Áß ¼±ÅÃµÈ °ÍÀ» µ¹·ÁÁÖ´Â ±¸¹®ÀÌ´Ù. ÁÖÀÇÇÒ Á¡Àº selectÀÇ ·çÇÁ ³»¿¡¼­´Â ÀÚµ¿ÀûÀ¸·Î ·çÇÁ¸¦ ¹þ¾î³¯ ¼ö ¾ø´Ù. ¹Ýµå½Ã break¹®À» »ç¿ëÇؼ­ ·çÇÁ¸¦ ¹þ¾î³ª¾ß ÇÑ´Ù.

¿¹: °£´ÜÇÑ ÄûÁî
#!/bin/sh

echo "´ÙÀ½Áß ½ºÅ©¸³Æ®¾ð¾î ÇÁ·Î±×·¡¹Ö¿¡ ¼ÓÇÏ´Â °ÍÀº ?"
select var in "½© ÇÁ·Î±×·¡¹Ö" "C ÇÁ·Î±×·¡¹Ö" "ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö" "Exit"
do
    if [ "$var" = "½© ÇÁ·Î±×·¡¹Ö" ]
    then
        echo "Á¤´äÀÔ´Ï´Ù."
        exit 0
    elif [ "$var" = "Exit" ]
    then
        echo "Á¾·áÇÕ´Ï´Ù."
        exit 1
    else
        echo "$var À» ¼±ÅÃÇϼ̽À´Ï´Ù. ¿À´äÀÔ´Ï´Ù."
        echo "´ÙÀ½Áß ½ºÅ©¸³Æ®¾ð¾î ÇÁ·Î±×·¡¹Ö¿¡ ¼ÓÇÏ´Â °ÍÀº ?"
    fi
done

5. ÇÔ¼ö

½© ½ºÅ©¸³Æ® ³»ºÎ¿¡ ¶Ç´Â ´Ù¸¥ ½ºÅ©¸³Æ®ÆÄÀÏ¿¡ ÇÔ¼ö¸¦ Á¤ÀÇÇØ ³õ°í »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÇÔ¼ö¸¦ »ç¿ëÇϸé Äڵ带 ÃÖÀûÈ­ ÇÒ ¼ö ÀÖ°í, ÄÚµùÀÌ °£°áÇØÁö¸ç,Àç»ç¿ëÀÌ °¡´ÉÇÏ´Ù. ±×·¯³ª ´Ù¸¥ ½ºÅ©¸³Æ® ÆÄÀÏÀ» È£ÃâÇؼ­ ÇÔ¼ö¸¦ ½ÇÇàÇÒ °æ¿ì, °¡´ÉÀº ÇÏÁö¸¸ ½ºÅ©¸³Æ®ÀÇ ½ÇÇà½Ã°£ÀÌ ±æ¾îÁö°í, ÇÔ¼öÀÇ °á°ú¸¦ Àü´ÞÇÏ´Â °ÍÀÌ ±î´Ù·Ó±â ¶§¹®¿¡ °¡±ÞÀûÀÌ¸é ¿ÜºÎÆÄÀÏÀÇ ÇÔ¼ö´Â ¾È¾²´Â °ÍÀÌ ÁÁ´Ù.

Çü½Ä:
ÇÔ¼ö¸í ()
{
	¹®Àå
	return °ª
}

»ç¿ë
ÇÔ¼ö¸í ÀÎÀÚ1, ÀÎÀÚ2, ...

ÇÔ¼ö´Â µ¶¸³ÀûÀ¸·Î $#, $*, $0 µîÀÇ ÀÎÀÚ º¯¼ö¸¦ »ç¿ëÇÑ´Ù. Áï ÇÔ¼ö³»ÀÇ $#°ú º»Ã¼ÀÇ $#Àº ´Ù¸¦ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù.

´ÙÀ½ÀÇ ¿¹¸¦ º¸ÀÚ
#!/bin/sh
		
func()
{
    echo ------ this is func --------
    echo "This Script Executable File : $0"
    echo "Argument Count : $#"
    echo "Process ID : $$"
    echo "Argument List \$* : $*"
    echo "Argument List \$@ : $@"
    echo "Argument 1 : $1"
    echo "Argument 2 : $2"
    echo "Argument 3 : $3"
}

echo ------ this is main --------
echo "This Script Executable File : $0"
echo "Argument Count : $#"
echo "Process ID : $$"
echo "Argument List \$* : $*"
echo "Argument List \$@ : $@"
echo "Argument 1 : $1"
echo "Argument 2 : $2"
echo "Argument 3 : $3"
echo "Argument 4 : $4"
func aa bb cc 

º»Ã¼¿Í ÇÔ¼ö¿¡¼­ µ¿ÀÏÇÑ º¯¼ö¸¦ º¸¿©ÁÖÁö¸¸ °ªÀº Ʋ¸°´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.

ÇÔ¼ö¿¡¼­ °ªÀ» ¹ÝȯÇϱâ - ÇÔ¼ö¿¡¼­ ¹Ýȯ°ªÀº ¹Ýµå½Ã Á¤¼ö°ª¸¸À» ¹ÝȯÇÒ ¼ö ÀÖ´Ù. ÀÌ °ªÀ» if µîÀ¸·Î Á¶°ÇÀ» ÆÇ´ÜÇؼ­ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¹Ýȯ°ª Áß 0Àº ÂüÀ¸·Î ³ª¸ÓÁö ¼ýÀÚ´Â °ÅÁþÀ¸·Î ÆǺ°µÈ´Ù.

6. ¸í·É¾î

½©¿¡¼­ ¾µ ¼ö ÀÖ´Â ¸í·É¾î´Â µÎ°¡Áö·Î ³ª´©¾îÁø´Ù. ¸í·É ÇÁ·ÒÇÁÆ® »ó¿¡¼­ ½ÇÇà ½Ãų ¼ö ÀÖ´Â ¿ÜºÎ ¸í·É¾î¿Í ½© ³»ºÎ ¸í·ÉÀÌ´Ù. ³»ºÎ ¸í·ÉÀº º¸Åë ½© ³»ºÎ³ª ½© ±¸¹®»ó¿¡¼­ ¾²ÀδÙ. ¿ÜºÎ¸í·ÉÀº ½©¿¡ °ü°è¾øÀÌ »ç¿ëÀÌ °¡´ÉÇÏ´Ù.

6.1. break

Á¦¾î¹®À̳ª Á¶°Ç¹®ÀÇ ·çÇÁ¸¦ ºüÁ®³ª°¥¶§ »ç¿ëÇÑ´Ù.

¿¹Á¦
while [ $a -eq 10 ]
do
    if [ $a -eq 5 ]; then
        break
    fi
done

6.2. continue

Á¦¾î¹®À̳ª Á¶°Ç¹®ÀÇ Ã³À½À¸·Î µ¹¾Æ°¡¼­ ´Ù½Ã¼öÇàÇÑ´Ù.

¿¹Á¦
while [ $a -eq 10 ]
do
    if [ $a -eq 5 ]; then
        continue
    fi
done

6.3. : ¸í·É

Àǹ̾ø´Â ¸í·É. ³í¸®°ª true¸¦ ´ë½ÅÇØ ¾²±âµµ ÇÑ´Ù.

6.4. . ¸í·É

. ¸í·ÉÀ» »ç¿ëÇϸé ÇöÀç ½©¿¡¼­ ¸í·ÉÀ» ½ÇÇà½ÃŲ´Ù ±×·¯¹Ç·Î ½ÇÇàµÈ ¸í·ÉÀÇ °á°ú¸¦ º» ÇÁ·Î±×·¥¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

¿¹¸¦ µé¸é A ¶ó´Â ½ºÅ©¸³Æ®¿¡¼­ B¶ó´Â ½ºÅ©¸³Æ®¸¦ ±×³É ½ÇÇàÇÒ °æ¿ì B¿¡¼­ÀÇ º¯È­(ȯ°æº¯¼ö µî)´Â A¿¡°Ô ¾Æ¹«·± ¿µÇâµµ ¹ÌÄ¡Áö ¾Ê´Â´Ù. ±×·¯³ª . ¸í·ÉÀ» »ç¿ëÇؼ­ ½ÇÇàÇϸé B¿¡¼­ÀÇ º¯È­°¡ A¿¡µµ ¿µÇâÀ» ¹ÌÄ£´Ù.

6.5. echo

¹®ÀåÀ» Ãâ·ÂÇÑ´Ù. ÀÚµ¿À¸·Î °³Ç๮ÀÚ°¡ »ðÀԵȴÙ. (´ÙÀ½ ÁÙ·Î ³Ñ¾î°£´Ù)

6.6. eval

ÀÎÀÚÀÇ ½ÇÁ¦ °ªÀ» ±¸Çϴµ¥ »ç¿ëÇÑ´Ù.
foo=10
x=foo
y='$'$x
echo $y

ÀÌ ¿¹¸¦ ½ÇÇàÇØ º¸¸é $foo°¡ Ãâ·ÂµÈ´Ù
foo=10
x=foo
eval y='$'$x
echo $y

ÀÌ ¿¹¿¡¼­´Â $fooÀÇ °ª Áï 10 ÀÌ Ãâ·ÂµÈ´Ù. eval¸í·ÉÀº ¿øÇÏ´Â ¹®ÀÚ¿­µéÀ» Á¶ÇÕÇؼ­ º¯¼ö¸¦ ¾×¼¼½º ÇÒ ¼ö ÀÖ´Ù.

6.7. exec

ÇöÀç ½©À» ´Ù¸¥ ÇÁ·Î±×·¥À¸·Î ´ëüÇÑ´Ù.

¿¹Á¦
exec csh

6.8. exit n

ÇöÀç ½©À» Á¾·áÇÑ´Ù. Á¾·á½Ã n °ªÀ» ¸®ÅÏÇÑ´Ù.

6.9. export

ÇØ´ç ½©¿¡¼­ ÆÄ»ýµÈ ÀÚ½Ä ÇÁ·Î¼¼½º¿¡¼­ exportÇÑ È¯°æº¯¼ö´Â º»·¡ ½©¿¡¼­ °ü¸®ÇÑ´Ù.

6.10. expr

Ç¥Çö½ÄÀÇ °ªÀ» ±¸ÇÑ´Ù.
x=`expr 1 + 2`
¿äÁòÀº exprº¸´Ù´Â $((°è»ê½Ä)) ±¸¹®À» ¸¹ÀÌ »ç¿ëÇÑ´Ù.

6.11. printf

C ¾ð¾îÀÇ printf¸í·É°ú Èí»çÇÏ´Ù.

Çü½Ä:
printf "Format String" arg1 arg2 arg3 ...

6.12. return

½© ÇÔ¼ö¿¡¼­ °ªÀ» ¹Ýȯ ÇÒ ¶§ ¾²ÀδÙ. 0Àº ¼º°øÀ» 1~125±îÁö´Â ½© ¿¡·¯Äڵ带 ³ªÅ¸³½´Ù.

6.13. set

½© ³»ºÎ¿¡¼­ ¸Å°³ ÀÎÀÚ¸¦ ¼³Á¤ÇÑ´Ù. setÀÇ ÀÎÀÚ·Î ¾²ÀÎ ¹®ÀÚ¿­Àº °ø¹é¿¡ ÀÇÇØ $1 ºÎÅÍ Â÷·Ê´ë·Î ´ëÀԵȴÙ.

¿¹Á¦
#!/bin/sh
echo $#
set $(ls)
echo $# 

°á°ú´Â
0
22

ÀÌ´Ù. (22´Â ÇÊÀÚÀÇ ls °á°úÀÇ °¹¼öÀÌ´Ù.) ù¹ø° 0´Â ÀÌ ½ºÅ©¸³Æ®¿¡ Àμö°¡ ¾øÀ¸¹Ç·Î 0ÀÌ°í set $(ls) ¿¡ ÀÇÇؼ­ ÀμöÀÇ °¹¼ö°¡ 22°³·Î ´Ã¾ú´Ù.

6.14. shift

½©ÀÇ ÀÎÀÚ¸¦ ÇÑÀÚ¸®¾¿ ¾Æ·¡·Î(n -> 1 ·Î) À̵¿½ÃŲ´Ù.

¿¹Á¦
#!/bin/sh

echo $1
shift
echo $1
shift 5
echo $1

½ÇÇà
#./myscript 1 2 3 4 5 6 7 8 9 0
1
2
7

6.15. trap

½©ÀÇ ½ÇÇ൵Áß ½Ã±×³ÎÀ» ó¸®ÇÏ´Â ½Ã±×³Î 󸮱⸦ ¸¸µå´Â ¿ªÇÒÀ» ÇÑ´Ù.

Çü½Ä:
trap command signal

½© ½ºÅ©¸³Æ®´Â À§¿¡¼­ ¾Æ·¡·Î ½ÇÇàµÇ¹Ç·Î º¸È£ÇÏ·Á´Â ºÎºÐ ÀÌÀü¿¡ trap ¸í·ÉÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. trap Á¶°ÇÀ» ±âº»À¸·Î »ç¿ëÇÏ·Á¸é ¸í·É¿¡ - ¸¦ ³ÖÀ¸¸é µÈ´Ù. ½ÅÈ£¸¦ ¹«½ÃÇÏ·Á¸é '' ºó ¹®ÀÚ¿­À» ÁØ´Ù.

6.16. unset

º¯¼ö³ª ÇÔ¼ö¸¦ Á¦°ÅÇÑ´Ù.

7. ¸í·É ½ÇÇà

¿ÜºÎ ¸í·ÉÀÇ ½ÇÇà °á°ú¸¦ º¯¼ö¿¡ Áý¾î³Ö¾î º¯¼öÀÇ °ªÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù.

Çü½Ä:
x = $(¸í·É)

ÀÌ·¸°Ô º¯¼ö¿¡ °á°ú¸¦ ³ÖÀº ÈÄ¿¡´Â ÀÌ º¯¼ö¸¦ ÀϹݹ®ÀÚ¿­·Î »ý°¢ÇÏ°í ¿øÇÏ´Â °¡°øÀ» Çؼ­ °á°ú¸¦ ¾ò¾î³¾ ¼ö ÀÖ´Ù. À§¿¡¼­ º¸¾Ò´ø ¸Å°³º¯¼ö È®ÀåÀ̳ª set¸í·ÉÀ» ÀÌ¿ëÇؼ­ ¿øÇÏ´Â ºÎºÐÀ» ÃßÃâÇØ ³»¸é ±×¸¸ÀÌ´Ù.

8. ½© ½ºÅ©¸³Æ® ³»ºÎ¿¡¼­ ¸í·É¿¡ ÀÔ·Â Àü´ÞÇϱâ (Here Documents)

ÀÌ ±â´ÉÀº ½© ³»ºÎ¿¡¼­ ¸í·É¾î¿¡ ÀÔ·ÂÀ» Àü´ÞÇÏ´Â ¹æ¹ýÀÌ´Ù. Àü´ÞµÈ ÀÔ·ÂÀº ¸¶Ä¡ Å°º¸µå¿¡¼­ ´­·ÁÁø °Íó·³ ¹ÝÀÀÇÑ´Ù.

Çü½Ä:
¸í·É << Á¾·á¹®ÀÚ¿­
ÀԷ°ª.....
Á¾·á¹®ÀÚ¿­

¿¹Á¦: ÀÚµ¿À¸·Î ¸ÞÀÏÀ» º¸³»´Â ½ºÅ©¸³Æ®
#!/bin/sh

mail $1 << myscript
This is Header
This is Body
.

myscript

9. µð¹ö±ë Çϱâ

½© ÇÁ·Î±×·¡¹Ö ½Ã °£´ÜÇÏ°Ô µð¹ö±ëÇÏ´Â ¹æ¹ýÀ» ¼Ò°³ÇÕ´Ï´Ù.

9.1. ½© ¿É¼Ç

  • sh -n ½ºÅ©¸³Æ® : ¹®¹ý ¿¡·¯¸¸À» °Ë»ç, ¸í·ÉÀ» ½ÇÇàÇÏÁö ¾ÊÀ½
  • sh -v ½ºÅ©¸³Æ® : ¸í·ÉÀ» ½ÇÇàÇϱâ Àü¿¡ ¿¡ÄÚ
  • sh -x ½ºÅ©¸³Æ® : ¸í·ÉÁÙ¿¡¼­ ó¸®ÇÑ ´ÙÀ½ ¿¡ÄÚ

9.2. set ¿É¼Ç

À§ÀÇ ½© ¿É¼ÇÀº ¾Æ·¡¿Í °°ÀÌ set ¿É¼ÇÀ¸·Îµµ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.
  • set -o noexec ¶Ç´Â set -n : ¹®¹ý ¿¡·¯¸¸À» °Ë»ç, ¸í·ÉÀ» ½ÇÇàÇÏÁö ¾ÊÀ½
  • set -o verbose ¶Ç´Â set -v : ¸í·ÉÀ» ½ÇÇàÇϱâ Àü¿¡ ¿¡ÄÚ
  • set -o xtrace ¶Ç´Â set -x : ¸í·ÉÁÙ¿¡¼­ ó¸®ÇÑ ´ÙÀ½ ¿¡ÄÚ
  • set -o nounset ¶Ç´Â set -u : Á¤ÀǵÇÁö ¾ÊÀº º¯¼ö°¡ »ç¿ëµÇ¸é ¿¡·¯ ¸Þ½ÃÁö¸¦ Á¦°øÇÑ´Ù.

¾Æ·¡¿Í °°ÀÌ set -x¸¦ ÀÌ¿ëÇÏ¿© ¼Õ½±°Ô ½ÇÇà°úÁ¤À» ÃßÀûÇÒ ¼ö ÀÖ´Ù. (Âü°í·Î set ¿É¼ÇÀ» Ãë¼ÒÇÏ·Á¸é set +x¸¦ ÀÔ·ÂÇÏ¸é µÈ´Ù. ´Ù¸¥ ¿É¼Çµµ ¸¶Âù°¡Áö)
set -x
for str in "test1" "test2" "test3" "test4"
do
    echo $str
done

°á°ú
+ for str in '"test1"' '"test2"' '"test3"' '"test4"'
+ echo @str
@str
+ for str in '"test1"' '"test2"' '"test3"' '"test4"'
+ echo @str
@str
+ for str in '"test1"' '"test2"' '"test3"' '"test4"'
+ echo @str
@str
+ for str in '"test1"' '"test2"' '"test3"' '"test4"'
+ echo @str
@str



sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2014-03-21 23:19:49
Processing time 0.0201 sec