· 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

ID
Password
Join
You will meet an important person who will help you advance professionally.


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.0200 sec