ÀÌ Àå¿¡¼´Â C ShellÀÌ °¡Áö°í ÀÖ´Â ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î¼ÀÇ ±â´É¿¡ ´ëÇÑ ¼³¸í°ú ÀÌ ±â´ÉÀ» »ç¿ëÇÑ Shell ÇÁ·Î±×·¡¹ÖÀÇ ¿¹Á¦¸¦ º¸¿©ÁØ´Ù.
ÁÖ¼®Àº ¶óÀÎÀÇ ¾Õ¿¡ ¡°#¡±·Î ½ÃÀÛÇÑ´Ù. ÁÖ¼®Àº # ÀÌÈĺÎÅÍ ÁÙ ³¡±îÁöÀ̹ǷΠ¸í·ÉÁÙ µÚ¿¡µµ ÁÖ¼®À» µÑ ¼ö ÀÖ´Ù. ±×·¯³ª ScriptÀÇ ¸Ç ù ÁÙ¿¡ "#!"´Â Ưº°ÇÑ Àǹ̸¦ °¡Áö°í Àִµ¥ À̰ÍÀº shellÀÌ script ÆÄÀÏÀ» ½ÇÇàÇÒ ¶§ "#!" µÚ¿¡ ÀÖ´Â ÇÁ·Î±×·¥À» »ç¿ëÇØ¾ß ÇÔÀ» ¸í½ÃÇÏ´Â °ÍÀÌ´Ù. À̰ÍÀ» ÀÌ¿ëÇϸé ÀÚ½ÅÀÌ ÇöÀç »ç¿ëÇϰí ÀÖ´Â Shell°ú ½ÇÇàÇϰíÀÚ ÇÏ´Â Shell scriptÀÇ shellÀÌ ´Þ¶óµµ À̸¦ ¹Ù·Î ½ÇÇàÇÒ ¼ö ÀÖ´Ù.
ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â ´ç½Ã¿¡´Â ÀÌÇØÇϰí ÀÛ¼ºÇÑ ºÎºÐµµ Àå±â°£ ½Ã°£ÀÌ °æ°ú ÈÄ¿¡ º¸¸é ±× ³»¿ëÀ» ÀÌÇØÇÒ ¼ö ¾ø´Â °æ¿ì°¡ ¸¹´Ù. ÀÌ·± °æ¿ì ÇÁ·Î±×·¥ÀÇ Áß°£¿¡ ÀÖ´Â ÁÖ¼® ºÎºÐÀÌ ÇÁ·Î±×·¥ÀÇ ÀÌÇØ¿¡ ¸¹Àº µµ¿òÀ» ÁØ´Ù. ¶ÇÇÑ ´Ù¸¥ »ç¿ëÀÚ°¡ ÇÁ·Î±×·¥À» º¼ ¶§µµ ¸¹Àº µµ¿òÀ» ÁØ´Ù.
¿¹ Á¦ 1 :
#!/bin/sh
#
# @(#)rc.local 1.116 91/05/10 SMI; from UCB 4.27 83/07/06
#
PATH=/bin:/usr/bin:/usr/etc:/usr/ucb; export PATH
# The file "/etc/.UNCONFIGURED" exists on machines shipped from the
# factory. We use this file here in order to run configuration programs
# at the time a machine is booted for the first time. The configuration
# programs are responsible for deleting this file after they have
# completed configuring the system. These configure programs may halt
# or reboot the system.
#
#
LC=¡°/usr/etc/install/run_configure¡±
NC=¡°/usr/etc/install/sysIDtool¡±
#
# Start the RPC portmapper.
#
if [ -f /usr/etc/portmap ]; then
portmap; echo 'starting rpc port mapper.'
fi
¿¹ Á¦ 2 :
#!/bin/csh : ½ÇÇà ½Ã cshÀ» »ç¿ë
#!/bin/ksh : ½ÇÇà ½Ã kshÀ» »ç¿ë
#!/usr/local/bin/perl : ½ÇÇà½Ã perlÀ» »ç¿ë
C shellÀº º¯¼ö¸¦ Á¤ÀÇÇÒ ¼ö ÀÖÀ¸¸ç, º¯¼ö¿¡´Â ¼ýÀÚ, ¹®ÀÚ, ¹®ÀÚ¿À» ÀúÀåÇÒ ¼ö ÀÖ´Ù. Á¤ÀÇµÈ º¯¼ö´Â ´Ù¸¥ º¯¼ö¿¡¼ ÂüÁ¶ÇÒ ¼ö ÀÖÀ¸¸ç, Çʿ信 ÀÇÇØ Á¤ÀÇµÈ º¯¼ö¸¦ ÇØÁ¦ÇÒ ¼öµµ ÀÖ´Ù.
3.2.1 º¯¼ö Á¤ÀÇ (¼³Á¤)
º¯¼öÀÇ ¼³Á¤Àº ¼³Á¤ÇϰíÀÚ ÇÏ´Â º¯¼ö ¸í°ú °ªÀ» ÁöÁ¤ÇÑ´Ù. º¯¼ö °ªÀº ¼ýÀÚ, ¹®ÀÚ, ¹®ÀÚµéÀÇ ÁýÇÕ µéÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
ÀÏ¹Ý º¯¼ö´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÑ´Ù.
set variable_name = variable_value
ÁýÇÕ º¯¼ö´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÑ´Ù.
set variable_name = (value1 value2 value3 ¡¦ valuen)
¿¹ Á¦ :
1. stringÀÌ °ø¹éÀÌ Æ÷ÇÔµÇÁö ¾ÊÀº ÇϳªÀÇ ´Ü¾îÀÎ °æ¿ì ¹®ÀÚ¿À» ³ª¿ÇÑ´Ù.
% set LogFile = /tmp/joblog.user_name
% echo $LogFile
2. stringÀÌ °ø¹éÀ» Æ÷ÇÔÇÑ º¹¼ö°³ÀÇ ´Ü¾î·Î ±¸¼ºµÈ °æ¿ì " " ·Î ¹´Â´Ù.
% set Usage = "Usage : jm -d mode -g groupname"
% echo $Usage
3. stringÀÌ °ø¹éÀ¸·Î ±¸ºÐµÈ º¹¼ö °³ÀÇ ¸ñ·ÏÀ¸·Î ±¸¼ºµÈ °æ¿ì( )·Î ¹´Â´Ù.
% set testhost = (edumaster edu01 edu02 edu03)
% echo $testhost
(Âü°í)
»ç¿ëÀÚÀÇ HOME µð·ºÅ丮¿¡ ÀÖ´Â .cshrc ÆÄÀÏÀ» º¸¸é setÀ¸·Î º¯¼ö¸¦ ¼±¾ðÇÑ ºÎºÐ°ú setenv¸¦ »ç¿ëÇÏ¿© º¯¼ö¸¦ ¼±¾ðÇÑ ºÎºÐÀÌ ÀÖ´Ù.
setÀº Shell¿¡¼ ÂüÁ¶ÇÏ´Â º¯¼öµéÀ̰í setenv´Â ´Ù¸¥ ÀÀ¿ë ÇÁ·Î±×·¥¼ ÂüÁ¶ÇÏ´Â º¯¼öÀÌ´Ù.
3.2.2 º¯¼ö ÂüÁ¶
º¯¼öÀÇ ÂüÁ¶´Â º¯¼ö ¸í ¾Õ¿¡ ´Þ·¯($) ±âÈ£¸¦ ºÙÇô »ç¿ëÇÑ´Ù.
1. ´Üµ¶ º¯¼ö´Â º¯¼ö À̸§ ¾Õ¿¡ "$" ±âÈ£¸¦ ºÙ¿© ÂüÁ¶ÇÑ´Ù.
$variable_name
2. ¹è¿À» °¡Áø º¯¼ö´Â index¸¦ »ç¿ëÇÏ¿© ÂüÁ¶ÇÑ´Ù.
$variable_name[index]
- ¸ñ·Ï º¯¼ö(list variable)ÀÎ °æ¿ì ¸ñ·ÏÀÇ °¢ ´Ü¾î¸¦ µ¶¸³ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù.
- index´Â ¸ñ·ÏÀÇ À§Ä¡¸¦ ³ªÅ¸³½´Ù. Áï ù ¹øÂ° ¸ñ·ÏÀÌ "1" ÀÌ´Ù.
- ¸ñ·Ï¿¡ ¾ø´Â index¸¦ ÂüÁ¶ÇÒ °æ¿ì error°¡ ¹ß»ýÇÑ´Ù.
¿¹ Á¦ :
% echo $testhost
% echo $testhost[1]
% echo $testhost[3]
% echo $testhost[0]
% echo $Usage
% echo $Usage[2]
3.3.3 º¯¼ö ÇØÁ¦
¼±¾ðµÈ º¯¼ö´Â unsetÀ̶ó´Â ¸í·É(ShellÀÇ ³»ºÎ ¸í·É)À» »ç¿ëÇÏ¿© ÇØÁ¦ÇÑ´Ù.
% unset variable_name
(Âü°í) ¾Õ¿¡¼ º¯¼öÀÇ ¼±¾ð°ú ÇØÁ¦¸¦ À§ÇØ »ç¿ëÇÑ set, unset °ú shell program¿¡ »ç¿ëÇÏ´Â if, foreach, while, switch ±¸¹®µîµµ shellÀÇ ³»ºÎ ¸í·É¾îµé ÀÌ´Ù.
¿¹ Á¦ :
% unset testhost
% echo $testhost
% unset $Usage
% echo $Usage
3.2.4 °æ·Î À̸§
Shell¿¡¼´Â °æ·Î À̸§ »ó¼úÀÚ¶ó ºÒ¸®´Â ¿É¼ÇÀ» Á¦°øÇϴµ¥, À̸¦ ÅëÇØ º¯¼ö °ª¿¡¼ °æ·Î¸í, ÀÔ·ÂµÈ program¸í, È®ÀåÀÚ µîÀÇ Æ¯Á¤ÇÑ ºÎºÐÀ» ¼±ÅÃÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇÑ´Ù.
°æ·Î À̸§ »ó¼úÀÚ(path name specified) : :r, :h, :t, :e
¿¹ Á¦ :
´ÙÀ½°ú °°ÀÌ cf º¯¼ö°¡ ¼³Á¤µÇ¾úÀ» °æ¿ì °¢ »ó¼úÀÚÀÇ ÀÇ¹Ì¿Í °á°ú´Â ´ÙÀ½°ú °°´Ù.
% set cf = /usr/bin/test.c
Option |
Meaning |
Command |
Result |
r |
root |
echo $cf:r |
/usr/bin/test |
h |
header |
echo $cf:h |
/usr/bin |
t |
tail |
echo $cf:t |
test.c |
e |
extension |
echo $cf:e |
c |
3.2.5 º¯¼ö ¼³Á¤ È®ÀÎ
C shell ÇÁ·Î±×·¥¿¡¼´Â ¾î¶² º¯¼ö°¡ Á¤ÀÇ(¼³Á¤)µÇ¾ú´ÂÁö È®ÀÎÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇϰí ÀÖ´Ù. À̸¦ ÅëÇØ Á¤ÀǵÇÁö ¾ÊÀº º¯¼ö ÂüÁ¶¿¡ ÀÇÇÑ ¹®Á¦¸¦ ¸·À» ¼ö ÀÖ´Ù. (¸¸¾à C ÇÁ·Î±×·¥À̶ó¸é ÄÄÆÄÀϽà ¿¡·¯°¡ Ç¥½ÃµÉ °ÍÀÌ´Ù.)
¸í·É Çü½Ä :
$?variable_name
1. ¡°$¡±¿Í º¯¼ö À̸§ »çÀÌ¿¡ ¡°?¡±¸¦ ³Ö¾î º¯¼ö°¡ ¼³Á¤µÇ¾ú´ÂÁö ¿©ºÎ¸¦ ¾Ë ¼ö ÀÖ´Ù.
2. º¯¼ö°¡ ¼³Á¤µÇ¾úÀ¸¸é ¡°Âü(1)¡±, ¼³Á¤µÇÁö ¾Ê¾ÒÀ¸¸é ¡°°ÅÁþ(0)¡±À» ³ªÅ¸³½´Ù.
¿¹ Á¦ :
% echo $?testuser
% set testhost = (userA userB userC)
% echo $?testuser
% unset testuser
% echo $?testuser
3.2.6 º¯¼ö ³» ´Ü¾î (ÁýÇÕ º¯¼öÀÇ °³¼ö È®ÀÎ)
¸ñ·Ï º¯¼ö¿¡ ¸î °³ÀÇ ´Ü¾î°¡ ÀÖ´ÂÁö¸¦ ¾Ë¾Æº¼ ¶§ "$"¿Í º¯¼ö À̸§ »çÀÌ¿¡ "#" À» ³Ö´Â´Ù.
$#variable_name
¿¹ Á¦ :
% echo $#testuser
3
% echo $?testuser
1
% echo $#cf
1
3.2.7 º¯¼ö ºÐ¸®
º¯¼ö µÚ¿¡ ¼ýÀÚ³ª ¹®ÀÚ ¶Ç´Â È®ÀåÀÚ¸¦ ºÎÄ¥ °æ¿ì º¯¼ö¸í°ú ÷ºÎ ¹®ÀÚ¿Í È¥¶õÀ» ÁÙ ¼öµµ ÀÖ´Ù. ÀÌ·± °æ¿ì ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù.
1. ¹®ÀÚ³ª ¼ýÀÚ·Î ½ÃÀÛÇÏ´Â ´Ù¸¥ ¹®ÀÚ¿·ÎºÎÅÍ º¯¼ö¸¦ ºÐ¸®ÇÏ·Á¸é "{}"¸¦ »ç¿ëÇÏ¿© ¡°{º¯¼ö}¡±¿Í °°ÀÌ »ç¿ëÇÑ´Ù.
2. º¯¼ö¸¦ È®½ÇÈ÷ ±¸ºÐÇϰíÀÚ ÇÒ ¶§ »ç¿ëÇÑ´Ù.
${variable_name}other_number_or_string
¿¹ Á¦ :
% set testfile = (fileA fileB fileC fileD)
% echo $testfile
% echo $testfile1
% echo ${testfile}1
3.2.8 º¯¼ö °ª ÀÔ·Â
C Shell¿¡¼´Â ÇÁ·Î±×·¥ÀÇ ½ÇÇà Áß¿¡ Ç¥ÁØÀÔ·ÂÀ¸·ÎºÎÅÍ °ªÀ» ÀÐÀ» ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇÑ´Ù.
»ç¿ë ¹æ¹ý :
set variable_name $<
1. Å͹̳ο¡¼ ÀÔ·ÂÇÑ µ¥ÀÌÅ͸¦ º¯¼ö¿¡ ÀúÀåÇÒ ¼ö ÀÖ´Ù.
2. scriptÀ» ½ÇÇà Áß Å͹̳ο¡¼ ÀÔ·ÂÀ» ¹ÞÀ» ¼ö ÀÖ´Ù
3. ¿©·¯ °³ÀÇ ´Ü¾î·Î ±¸¼ºµÈ ÀԷµµ ÇϳªÀÇ ´Ü¾î·Î Ãë±ÞµÈ´Ù.
Áï $#variable_nameÀº Ç×»ó 1ÀÌ´Ù.
¿¹ Á¦ 1 :
% echo ¡°Enter your name : ¡°
% set user_name = $<
user_name key-in
% echo $user_name
¿¹ Á¦ 2 :
ÀÌ ½ºÅ©¸³Æ®´Â »ç¿ëÀÚ°¡ ÆÄÀÏ À̸§À¸·Î È®ÀåÀÚ ¾øÀÌ ¡±filename¡± À¸·Î ÀÔ·ÂÇϰųª È®ÀåÀÚ(.net)¸¦ Æ÷ÇÔÇÏ¿© ¡°filename.net¡±À¸·Î ÀԷ½à ÀÔ·Â ÆÄÀÏÀÌ Á¸ÀçÇÏ´ÂÁö È®ÀÎÇÏ´Â °ÍÀÌ´Ù.
< script in hspice >
#!/bin/csh -f
set in = ¡°.net¡±
while (1)
echo -n "Enter input file name : "
set filename = $<
if (! -e $filename) then
if (.$filename:e != $in) set filename = "$filename$in"
if (! -e $filename) then
echo "Input file: $filename not found"
else
break
endif
else
break
endif
end
echo ¡°Input file is : $filename¡±
3.3.1 ¸Å°³ º¯¼ö
¸í·ÉÀ» ÀÔ·ÂÀ» ÇÒ ¶§ ½ÇÇàÇϰíÀÚ ÇÏ´Â ¸í·É¿¡ ÇÊ¿äÇÑ Ãß°¡Á¤º¸³ª ½ÇÇà ¹æ¹ý µîÀ» ¸í·É¾î µÚ¿¡ Ãß°¡ÇÒ ¼ö ÀÖ´Ù. ¿©±â¼ ¸í·É¾î ºÎºÐÀº ¸í·É¾î ÀÚüÀ̸ç, ±× µÚ¿¡ ¿À´Â Ãß°¡ÀûÀÎ ºÎºÐÀ» argument¶ó°í ÇÑ´Ù.
»ç¿ëÀÚ°¡ ÀÔ·ÂÇÑ ¸í·É¾î ÁÙ(command line)Àº ¸ðµÎ shellº¯¼öÀÎ argv¿¡ ¸ñ·Ï º¯¼ö·Î ÀúÀåµÈ´Ù. Script¿¡¼´Â argv ¸ñ·Ï º¯¼ö¿¡ ÀúÀåµÈ º¯¼ö °ªÀ» ÂüÁ¶ÇÏ¿© ¸í·ÉÁÙ¿¡¼ ÀÔ·ÂÇÑ argument¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
C Shell¿¡¼ ù ¹øÂ° argument´Â $argv[1]·Î ÂüÁ¶µÈ´Ù. C ÇÁ·Î±×·¥ÀÇ °æ¿ì´Â argv[0] ÀÌ´Ù. C shell¿¡¼ $argv[0]´Â Á¸ÀçÇÏÁö ¾Ê´Â´Ù.
3.3.2 ArgumentÂüÁ¶
ArgumentÀÇ ÂüÁ¶´Â ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÑ´Ù.
$#argv : argumentÀÇ °³¼ö
$argv[*] : ¸ðµç argument
$argv : ¸ðµç argument. $argv[*]¿Í µ¿ÀÏ
$* : ¸ðµç argument. $argv[*], $argv¿Í µ¿ÀÏ
$argv[1-n]: ù ¹øÂ° argument ºÎÅÍ n ¹øÂ° argument ±îÁö
$argv[n] : n ¹øÂ° argument. 1 ¡Â n ¡Â $#argv
$0 : ÇÁ·Î±×·¥ À̸§
$argv[0] : »ç¿ëÇÒ ¼ö ¾ø´Ù. $0À» »ç¿ëÇÑ´Ù.
$1 $2 ... $9 : 1 2 ... 9¹øÂ° argument. $argv[1] ... $argv[9]¿Í µ¿ÀÏ
$1°ú $argv[1]Àº °°Àº ÀǹÌÀÌ´Ù.
$argv[$#argv] : ¸¶Áö¸· argument
$argvÀ» »ç¿ëÇÏ·Á¸é ÃæºÐÇÑ argument°¡ ÀÖ´ÂÁö ¿©ºÎ(range checking)¸¦ °Ë»çÇÑ´Ù.
¿¹ Á¦ 1 :
1. editor¸¦ »ç¿ëÇÏ¿© argument_testÆÄÀÏ¿¡ ´ÙÀ½ÀÇ ³»¿ëÀ» ÀÔ·ÂÇÑ´Ù.
< argument_test >
#!/bin/csh -f
echo -n Program name by \$0 :
echo $0
echo -n Number of argument by \$\#argv :
echo $#argv
echo -n Display all argumenet by ¡¬$argv :
echo $argv
2. ÆÄÀÏÀ» ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï mode¸¦ º¯°æÇÑ´Ù.
% chmod 755 argument_test
3. ÆÄÀÏÀ» ½ÇÇàÇÑ´Ù,
% argument_test aa bb cc
¿¹ Á¦ 2 :
´ÙÀ½ ½ºÅ©¸³Æ®´Â ¸í·É¾î ½ÇÇà ÁÖ±â(sleep_time)¿Í ¸í·É¾î¸¦ ÀÔ·Â ¹Þ¾Æ °è¼Ó ÀÌ ¸í·ÉÀ» ¹Ýº¹ÇÑ´Ù. ½ÇÇàÀº ¡°./loop 1 ls -al¡± °ú °°ÀÌÇÑ´Ù.
< script in loop>
#!/bin/csh -f
if ($#argv < 2) then
echo ¡°USAGE : loop #number command_group¡±
exit
endif
set sleep_time = $1
if ($sleep_time !~ [0-9]) then
echo ¡°USAGE : loop #number command_group¡±
exit
shift
while (1)
clear
csh -c ¡°${argv}
sleep $sleep_time
end
# End of file