1. UNIX Shell°ú Shell ÇÁ·Î±×·¥
1.1 UNIX Shell°ú Shell ÇÁ·Î±×·¥
1.1.1 ShellÀÇ Á¤ÀÇ
UNIXÀÇ ShellÀº ´ÙÀ½°ú °°ÀÌ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.
* ShellÀº ¿î¿µÃ¼Á¦¿Í »ç¿ëÀÚ »çÀÌÀÇ Áß°è ¿ªÇÒÀ» ÇÏ´Â ¸í·É¾î ÇØ¼®±â(command interpreter)ÀÌ´Ù.
* ShellÀº º¯¼ö¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ°í Á¶°Ç¹®, ¹Ýº¹¹®, »ê¼ú ¿¬»ê µîÀ» ÇÒ ¼ö ÀÖ´Â ¿ÏÀüÇÑ ÇÁ·Î±×·¥ ¾ð¾î(program language)ÀÌ´Ù.
(1) Command Interpreter
»ç¿ëÀÚ¿Í ½Ã½ºÅÛ°£ÀÇ ´ëȸ¦ °¡´ÉÇÏ°Ô ÇØ ÁÖ´Â °ÍÀ¸·Î »ç¿ëÀÚ°¡ ÀԷ½ÃŲ ¸í·É¾î ¶óÀÎÀ» ÀÐ°í¼ ÇÊ¿äÇÑ ½Ã½ºÅÛ ±â´ÉÀ» ½ÇÇà½ÃŲ´Ù.
(2) Program Language
ÆÄÀÏ¿¡ ÀúÀåµÈ ÀÏ·ÃÀÇ ¸í·É ±ºÀ» ½ÇÇàÇÒ ¼ö ÀÖÀ¸¸ç, Á¦¾î ±¸Á¶¸¦ ÀÌ¿ëÇØ ¸í·ÉÀÇ ½ÇÇà ¼ø¼¸¦ ¹Ù²Ü ¼ö ÀÖ´Ù.
1.1.2 Shell ÇÁ·Î±×·¥
ShellÀÌ ½ÇÇàÇÒ ¼ö ÀÖ´Â ¸í·ÉµéÀ» ¸ð¾Æ ³õÀº ÆÄÀÏÀ» ¸»Çϸç, C-language·Î ¸¸µç ÆÄÀÏÀ» c-programÀ̶ó Çϵí shell language·Î ¸¸µç ÆÄÀÏÀ» shell program ȤÀº shell script¶ó ºÎ¸¥´Ù.
±âÁ¸ÀÇ ÇÁ·Î±×·¥ ¾ð¾î(C, PASCAL µî)°¡ codingÀ» ÅëÇØ »õ·Î¿î ÇÁ·Î±×·¥À» ¸¸µå³ª, shell script´Â UNIX½Ã½ºÅÛ¿¡ ÀÖ´Â ¸í·É¾îµé°ú ±âº»ÀûÀ¸·Î shellÀÌ °¡Áö°í Àִ±â´ÉÀ» Á¶ÇÕÇÏ¿© ÇÁ·Î±×·¥À» ¸¸µç´Ù. Áï, ÀÌ¹Ì "ÀÖ´Â" ÇÁ·Î±×·¥µéÀ» Á¦¾î ±¸Á¶¿Í È¥ÇÕÇÏ¿© »õ·Î¿î ±â´ÉÀ» ÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µç´Ù.
Shell scriptÀº shellÀÌ ½ÇÇàÇÒ ¼ö ÀÖ´Â UNIX ¸í·É°ú Á¦¾î ±¸Á¶ÀÇ Á¶ÇÕÀ¸·Î ±¸¼ºµÈ ÆÄÀÏÀÌ´Ù.
¡¡
1.1.3 Shell ÇÁ·Î±×·¥ÀÇ ÀåÁ¡
Shell ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â °ÍÀº Ÿ ÇÁ·Î±×·¥ ¾ð¾î¿¡ ºñÇØ ´ÙÀ½°ú °°Àº ÀåÁ¡ÀÌ Àֱ⠶§¹®ÀÌ´Ù.
1.2.1 ShellÀÇ ¿ª»ç
UNIX ½Ã½ºÅÛÀº Å©°Ô 3 ºÎºÐÀ¸·Î ³ª·ê ¼ö ÀÖ´Ù. °¡Àå Áß½ÉÀº ½Ã½ºÅÛÀ» ±¸¼ºÇÏ´Â hardware¿µ¿ª, ´ÙÀ½Àº HW¿Í ÀÀ¿ë ÇÁ·Î±×·¥À» Áß°èÇÏ´Â OS ¿µ¿ª(¿î¿µÃ¼Á¦), ±×¸®°í ÀÀ¿ëÇÁ·Î±×·¥À¸·Î ³ª´ ¼ö ÀÖ´Ù. ±×¸®°í ÀÌ ¿î¿µÃ¼Á¦ ºÎºÐÁß HW¿Í ¹ÐÁ¢ÇÑ °ü°è°¡ ÀÖ´Â ºÎºÐÀ» Ä¿³Î(kernel)À̶ó°í ºÎ¸£´Âµ¥, Ä¿³ÎÀº ½Ã½ºÅÛÀ» ±¸¼ºÇÏ´Â HW¿¡ µû¶ó º¯ÇÑ´Ù. ÀÀ¿ë ÇÁ·Î±×·¥µéÀº ¿î¿µÃ¼Á¦ÀÇ ÀϺÎÀÎ kernelÀ» ÅëÇØ ½Ã½ºÅÛ HW¿Í ¿¬°á µÇ¹Ç·Î ½Ã½ºÅÛÀ» ±¸¼ºÇÏ´Â HW¿Í º°°³·Î ¿î¿µµÈ´Ù.
À̿Ͱ°ÀÌ ÀÀ¿ë ÇÁ·Î±×·¥µéÀº HW¿Í º°°³·Î ¿î¿µµÇ¹Ç·Î, UNIXÀÇ ´Ù¸¥ HW¿¡ À̽ÄÇϰíÀÚ ÇÒ¶§, Ä¿³Î ºÎºÐ¸¸ À̽ÄÇÏ¸é µÈ´Ù.
Shellµµ ¿î¿µÃ¼Á¦(Ä¿³Î)ÀÇ ÀϺΰ¡ ¾Æ´Ï°í "ls", "vi" µî°ú °°Àº ÀÀ¿ë ÇÁ·Î±×·¥ Áß ÇϳªÀÌ´Ù. Áï UNIX´Â óÀ½ºÎÅÍ shellÀ» ¿î¿µÃ¼Á¦ÀÇ ÁÖ¿ä ºÎºÐ°ú ºÐ¸®µÈ µ¶¸³ ÇÁ·Î±×·¥À¸·Î ¼³°èÇÏ¿´´Ù. µû¶ó¼ ¿À´Ã³¯ »ç¿ëµÇ°í ÀÖ´Â shell¿¡´Â ¿©·¯ °¡Áö°¡ ÀÖÀ¸¸ç, »ç¿ëÀÚ°¡ À̸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù.
»õ·Î °³¹ßµÇ´Â shellÀÇ Æ¯Â¡Àº ÁÖ·Î ¼Óµµ¸¦ Çâ»ó½ÃŰ´Â °ÍÀ¸·Î, ´õ ÀûÀº Ű ÀÔ·ÂÀ¸·Î °°Àº °á°ú¸¦ ¾òÀ» ¼ö ÀÖ°Ô ÇÏ´Â °ÍÀÌ´Ù.
1.2.2 ShellÀÇ Á¾·ù
UNIX ½Ã½ºÅÛ¿¡´Â ±âº»ÀûÀ¸·Î Bourne Shell, C Shell, K ShellÀÌ ¼³Ä¡µÇ¾î ÀÖÀ¸¸ç, ±âŸ ´Ù¸¥ ShellµéÀº InternetÀ» ÅëÇØ ¾òÀ» ¼ö ÀÖ´Ù.
(1) Bourne Shell
ÀÌ shellÀº ±¸Á¶Àû ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖ´Â ÇÁ·Î±×·¥ ¾ð¾î¸¦ ³»ÀåÇß°í, ƯÈ÷ ÀÔ/Ãâ·Â Á¦¾î¿¡ °·ÂÇÑ ±â´ÉÀ» Á¦°øÇß´Ù. ±×·¯³ª ÀÌ shellÀÇ ÇÁ·Î±×·¥ ȯ°æ (ºñ´ëÈ½Ä »ç¿ëÀÚ È¯°æ : non-interactive user interface)Àº ¸Å¿ì ÈǸ¢ÇÑ ¹Ý¸é ´ëÈ½Ä »ç¿ëÀÚ È¯°æ(interactive user interface)Àº ¸Å¿ì ºó¾àÇÏ¿© Á» ´õ ³ªÀº "¹«¾ùÀΰ¡"°¡ ³ªÅ¸³¯ ¿©Áö¸¦ ³²°Ü ³õ¾Ò´Ù.
(2) C shell
Bourne shellÀÇ ´ÜÁ¡ÀÎ ´ëÈ½Ä »ç¿ëÀÚ È¯°æÀ» °ÈÇÏ°í ¸î °¡Áö »õ·Î¿î °³³ä(job control, history, aliasµî)À» µµÀÔÇÑ C-shellÀ» ͏®Æ÷´Ï¾Æ ´ëÇб³ ¹öŬ¸® ºÐ±³¿¡¼ ¸¸µé¾ú´Ù. ±×·¯³ª ÃʱâÀÇ C-shellÀº ¸¹Àº °áÇÔ(bug)ÀÌ ¹ß°ßµÇ¾î À̰ÍÀ» »ç¿ëÇÏ¿© ¿ÏÀüÇÑ shell script¸¦ ¸¸µå´Â µ¥´Â ¹®Á¦°¡ ÀÖ¾ú´Ù. ±×·¡¼ ¸¹Àº »ç¶÷µéÀÌ C-shellÀÇ »ç¿ë¿¡ ÁÖÀúÇßÀ¸³ª, Æí¸®ÇÑ »ç¿ëÀÚ È¯°æÀ¸·Î ÀÎÇØ ´ëÈ½Ä »ç¿ëÀÚ È¯°æÀº C-shellÀ» »ç¿ëÇÏ°í ºñ ´ëÈ½Ä È¯°æ(shell program)¿¡´Â ÁÖ·Î Bourne shellÀ» »ç¿ëÇÏ´Â ±âÇö»óÀÌ ³ªÅ¸³µ´Ù.
C ShellÀÇ ÇÁ·Î±×·¥ÀÇ °æ¿ì ¾ð¾î ±¸Á¶°¡ C ¾ð¾î¿Í À¯»çÇϱ⠶§¹®¿¡ ÀÌÇØÇϱⰡ ½±´Ù. ¿©±â¼µµ C ShellÀ» À§ÁÖ·Î ¼³¸íÀ» ÇÑ´Ù.
(3) TC shell
C ShellÀÇ °áÇÔÀ» °íÄ¡°í ¸î °³ÀÇ »õ·Î¿î ±â´É(command line editing, spelling correction, login/logout watching µî)À» Ãß°¡ÇÏ¿© TC shell(tcsh)ÀÌ ¸¸µé¾î Á³´Ù. ±×·¯³ª ´ë´Ù¼öÀÇ UNIX½Ã½ºÅÛ Á¦Á¶¾÷ü¿¡¼ TC shellÀ» ¼±ÅÃÇÏÁö ¾Ê°í Ç¥ÁØ C shellÀ» ±âº»ÀûÀ¸·Î žÀçÇ߱⠶§¹®¿¡ Áö±Ý±îÁö ºñÇ¥ÁØ shell·Î ³²¾Æ ÀÖ´Ù.
(4) Korn Shell
AT&TÀÇ David Korn¿¡°Ô ÀÌ·¯ÇÑ È¥µ·À» Á¤¸®ÇÒ ¼ö ÀÖ´Â idea°¡ ÀÖ¾ú°í, ±× °á°ú·Î Korn shell(ksh)À» ¸¸µé¾ú´Ù. Áï Bourne shellÀÇ ºñ ´ëÈ½Ä »ç¿ëÀÚ È¯°æ¿¡ C shellÀÇ ÈǸ¢ÇÑ ´ëÈ½Ä »ç¿ëÀÚ È¯°æÀ» µ¡ºÙÀÎ °ÍÀÌ´Ù. Korn shellÀº °ð system VÀÇ ÀϺΰ¡ µÇ¾úÁö¸¸ ³ª¸ÓÁö ´Ù¸¥ shellµé°ú´Â ´Þ¸® "°øÂ¥"°¡ ¾Æ´Ï¾î¼ kshÀ» »ç¿ëÇÏ·Á¸é AT&T¿¡ »ç¿ë·á¸¦ ÁöºÒÇØ¾ß ÇÏ´Â ¹®Á¦°¡ ÀÖ¾ú´Ù.
(5) Bourne Again Shell
ÀÌ ½Ã±â¿¡ GNU project¿¡¼ Korn shell¿¡ ¹ö±Ý°¡´Â ±â´ÉÀ» °®´Â "°øÂ¥" shellÀÌ ÇÊ¿äÇÏ´Ù´Â °áÁ¤À» ÇÏ¿´°í, ±× °á°ú bash(Bourne Again Shell)°¡ ź»ýÇß´Ù. Bash´Â Korn shell°ú ¸¶Âù°¡Áö·Î Bourne shell ¿¡ ±âÃÊÇÏ¿© c-shellÀÇ ¿©·¯±â´ÉÀ» Ãß°¡Çß°í, Korn shell°ú´Â ´Þ¸® "°øÂ¥"¿´À¸¹Ç·Î ±Þ¼ÓÈ÷ ÀüÆÄµÇ¾î ÇöÀç »õ·Î¿î ¼¼´ëÀÇ shellÁß¿¡¼ °¡Àå Àαâ ÀÖ´Â shellÀÌ µÇ¾ú´Ù.
(6) Z-shell
´õ ¿ÏÀüÇÑ shellÀ» ÇâÇÑ ³¡¾ø´Â Ãß±¸´Â Áö±Ýµµ °è¼ÓµÇ°í ÀÖ°í, ±× °á°ú Bourne shell¿¡ ±âÃÊÇÑ ¶Ç ´Ù¸¥ shellÀÎ Z-shell(zsh)ÀÌ ³ªÅ¸³µ´Ù. ÀÌ shell¿¡´Â Àü¹®°¡µµ Á¤È®È÷ »ç¿ëÇϱâ Èûµç ¿©·¯ °¡ÁöÀÇ ´Ù¾çÇÑ ±â´ÉÀÌ ¸¹ÀÌ Ãß°¡µÇ¾ú´Ù.
1.2.3 shellÀÇ ºñ±³
¡¡ ShellÀÇ ±â´É ºñ±³
Function |
sh |
csh |
ksh |
bash |
tcsh |
zsh |
Job control |
X |
O |
O |
O |
O |
O |
Aliases |
X |
O |
O |
O |
O |
O |
Command history |
X |
O |
O |
O |
O |
O |
Command line editing |
X |
X |
O |
O |
O |
O |
login/logout watching |
X |
X |
X |
X |
O |
O |
File name completion |
X |
O |
O |
O |
O |
O |
Spelling correction |
X |
X |
X |
X |
O |
O |
Process substitution |
X |
X |
X |
O |
X |
O |
Shell scripts |
O |
O |
O |
O |
O |
O |
Freely available |
X |
X |
X |
O |
O |
O |
1. editor¸¦ ÀÌ¿ëÇØ nfileÀ̶ó´Â ÆÄÀÏÀ» ¿¾î ´ÙÀ½ÀÇ ³»¿ëÀ» ÀÔ·ÂÇÑ´Ù. ¡¡
#!/bin/csh ¡¡
if ($#argv == 0) then
awk ¡®{printf "%4d %s\n", NR, $0}¡¯
exit 0
endif
foreach file ($argv[*])
if (-f $file) then
awk '{printf "%4d %s\n",NR, $0}' $file
else
echo $0\: No file $file
endif
end
2. ÆÄÀÏÀ» ½ÇÇà °¡´É Çϵµ·Ï ÆÄÀÏ ¼Ó¼ºÀ» º¯°æÇÑ´Ù.
% chmod 755 nfile
3. ScriptÀ» ½ÇÇà½ÃŲ´Ù.
% nfile nfile
% nfile [enter] (¾Æ¹« ³»¿ëÀ̳ª ÀÔ·ÂÀ» Çϰí [enter]¸¦ ´©¸¥´Ù)
[CTRL+D]
4. ÇÁ·Î±×·¥ÀÇ µ¿ÀÛ