IzzyMenu.com

Programming(Script,ASSM,Unix-C)

 ·Î±×ÀÎ  È¸¿ø°¡ÀÔ

[Á¤º¸] ½© ÇÁ·Î±×·¡¹Ö
ANTON  2009-06-28 04:51:33, Á¶È¸ : 203, Ãßõ : 46

½© ÇÁ·Î±×·¡¹Ö (shell programming) À̶õ..
unix ½Ã½ºÅÛÀÇ »ç¿ëÀÚ´Â ¿©·¯ °³ÀÇ ½© ¸í·É¾îµéÀ» ¶È°°Àº ¼ø¼­·Î ¹Ýº¹ÇØ¾ß ÇÏ´Â
°æ¿ì°¡ ÀÖÀ» ¼ö ÀÖ´Ù. ÀÌ·± °æ¿ì ¸í·É¾îµéÀ» ÆÄÀÏ·Î ÀúÀåÇØµÎ°í ½© ¸í·É¾îó·³
»ç¿ëÇÒ ¼ö°¡ Àִµ¥, ÀÌ·± ÆÄÀϵéÀ» ½© script ¶Ç´Â ½© program À̶ó ÇÑ´Ù.
½©ÀÌ ½© programÀ» ½ÇÇàÇϱâ À§ÇÏ¿©´Â program ÆÄÀÏÀ» ÀÐ°í °¢ ÁÙÀ» ½ÇÇàÇÒ ¼ö
ÀÖ¾î¾ß ÇÑ´Ù. ±×·¡¼­, ÇØ´ç ½© program ÆÄÀÏ¿¡ ´ëÇØ read(Àбâ)¿Í execute(½ÇÇàÇϱâ)
±ÇÇÑÀÌ ÁÖ¾îÁ®¾ß ÇÑ´Ù.
½© ½ºÅ©¸³Æ®ÀÇ ¹®¹ýÀº ½©ÀÇ Á¾·ù¿¡ µû¶ó ´Ù¼ÒÀÇ Â÷ÀÌ°¡ ÀÖÀ¸¸ç, À¯´Ð½º
½Ã½ºÅÛ¿¡¼­ Ãʱ⠱¸µ¿½Ã Âü°íÇÏ´Â ÆÄÀϵéÀÌ ´ëºÎºÐ bourne ½© ¹®¹ýÀ¸·Î µÇ¾î
Àֱ⿡ ¿©±â¼­´Â bourne ½© ¹®¹ýÀ» Áß½ÉÀ¸·Î Àü°³ÇÏ·Á ÇÑ´Ù.
ÀÚ, ±×·³ sample programÀ» ¸¸µé¾î º¸ÀÚ.
$ cat sample_pgm
¡¡¡¡# this is sample program
¡¡¡¡¡¡¡¡who am i
¡¡¡¡¡¡ls -f
$ chmod +x sample_pgm
$ sample_pgm
À§ÀÇ sample ¿¹Á¦´Â login nameÀ» ¾Ë¾Æº¸°í ÇöÀç µð·ºÅ丮ÀÇ ÆÄÀÏ ¸ñ·ÏÀ» Ãâ·ÂÇÏ´Â
programÀÌ´Ù.
5¹ø° ÁÙ¿¡¼­ ½ÇÇà °¡´ÉÇϵµ·Ï execute ±ÇÇÑÀ» ºÎ¿©ÇÏ¿´´Ù.
½© scriptÀÇ Àμö(argument)
ÆÄÀÏÀ» º¹»çÇØ ÁÖ´Â cp ¸í·É¾î¸¦ »ý°¢Çغ¸¸é cp ¸í·É¾î ´ÙÀ½¿¡ º¹»çÇÒ ÆÄÀϸí°ú
º¹»çµÉ ÆÄÀϸíÀ» ÀÔ·ÂÇØ¾ß ÇÑ´Ù.
ÀÌó·³ ´ëºÎºÐÀÇ ¸í·É¾îµéÀÌ Àμö¸¦ Çã¿ëÇϴµ¥, ½© script¿¡µµ Àμö ÀÌ¿ëÀÌ
°¡´ÉÇÏ´Ù.
»ç¿ë¹ýÀ» »ìÆ캸¸é,
½© ÇÁ·Î±×·¥ À̸§ ¡¡arg1¡¡arg2¡¡¡¦¡¡argn
½© ÇÁ·Î±×·¥ ³»¿¡¼­ °¢ Àμö´Â $0 (program À̸§), $1(arg 1), $2(arg 2)¡¦$n(arg n)À¸·Î
ÂüÁ¶µÈ´Ù.
»ç¿ë¿¹´Â ´ÙÀ½°ú °°´Ù.
$ cat sample_2
¡¡echo your program name : $0
¡¡echo first argument : $1
¡¡echo second argument : $2
$ chmod +x sample_2
$ sample_2 love dream
¡¡your program name : sample 2
¡¡first argument : love
¡¡second argument : dream
½© º¯¼ö ÇÒ´çÇϱâ
½© script´Â ½© º¯¼ö¶ó´Â ±â´ÉÀ» »ç¿ëÇÏ¿©, º¸´Ù ´õ À¯¿¬ÇÏ°Ô ÀÛ¼ºµÉ ¼ö ÀÖ´Ù.
½© º¯¼ö´Â ¹®ÀÚ¿­À» ÀúÀåÇϴµ¥ »ç¿ëÇÏ´Â ÇϳªÀÇ À̸§ÀÌ´Ù.
º¯¼ö °ªÀº ¹®ÀÚ¿­ÀÌ µÈ´Ù.
º¯¼ö À̸§ ´ÙÀ½¿¡ µîÈ£(=)¿Í º¯¼ö °ªÀ» ±âÀÔÇÔÀ¸·Î¼­ º¯¼ö¿¡ °ªÀ» ÁÙ ¼ö
ÀÖ´Ù.
¿¹¸¦ µé¾î binÀ̶õ º¯¼ö¿¡ "bin"À̶õ °ªÀ» ÁÖ·Á¸é,
$ bin=bin
$ export bin
µÎ¹ø° ÁÙÀº binÀ» Áö¿ªº¯¼ö¿¡¼­ Àü¿ªº¯¼ö·Î ¹Ù²ãÁÖ´Â ¸í·É¾îÀÌ´Ù.
½© ¸í·É¿¡¼­ º¯¼öÀÇ °ªÀ» ÂüÁ¶ÇÏ·Á¸é º¯¼ö¸í ¾Õ¿¡ $¸¦ ºÙ¿© »ç¿ëÇÑ´Ù.
¿¹¸¦ µé¾î,
$ cd/usr/$bin
$ pwd
¡¡/usr/bin
cd ¸í·ÉÀ» ½ÇÇàÇϱ⠾ռ­ ½©Àº binÀ̶ó´Â º¯¼ö À̸§ ´ë½Å º¯¼öÀÇ °ª
"bin"À¸·Î ´ëüÇÑ´Ù.
°á±¹,
$cd/usr/bin À̶ó ÀÔ·ÂÇÑ °Í°ú °°´Ù.
exit¸í·É¾î¿Í return¸í·É¾î
exit ¸í·É¾î
½© programÀ» Á¾·áÇÏ°í ¹Ýȯ code¸¦ ¼³Á¤ÇÑ´Ù.
»ç¿ë¹ýÀº.
exit [arg]
return ¸í·É¾î
ÇÔ¼öÀÇ ½ÇÇàÀ» Á¤ÁöÇÏ°í È£Ãâ ÇÁ·Î½ÃÀú·Î µ¹¾Æ°£´Ù.
»ç¿ë¹ýÀº,
return [arg]
È£Ãâ ÇÁ·Î½ÃÀú°¡ ¾øÀ» °æ¿ì return ¸í·É¾î´Â exit¿Í °°´Ù.
return codes
unixÀÇ ¸ðµç ¸í·ÉÀº ¸í·ÉÀÌ ¿Ï·áµÉ ¶§ ¹Ýȯ code¸¦ »ý¼ºÇÑ´Ù.
¸í·ÉÀÌ Á¤»óÀûÀ¸·Î Á¾·áµÇ¾úÀ¸¸é 0À» return½ÃÅ°°í ¿À·ù°¡ ³µÀ¸¸é 0ÀÌ ¾Æ´Ñ
°ªÀ» ¹ÝȯÇÑ´Ù.
¸®ÅÏÄÚµå´Â ½© º¯¼öÀÎ $?·Î ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù.
»ó¿ë¹ýÀ» »ìÆ캸¸é,
$ ls¡¡¡¡¡¡¡¡
$ echo $?
¡¡0
½© º¯¼ö$?Àº ÃÖÁ¾ÀûÀ¸·Î returnµÈ °ªÀ» ÂüÁ¶ÇÑ´Ù.
$ true
$ echo $?
¡¡0
true¸í·ÉÀº Ç×»ó 0À» µÇµ¹·Á ÁØ´Ù.
$ false
$ echo $?
¡¡1
false¸í·ÉÀº Ç×»ó 1À» ¹ÝȯÇÑ´Ù.
$ cp
$ echo $?
¡¡1
Àμö°¡ ºüÁ® Àֱ⿡ ¿À·ù°¡ ¹ß»ýÇÔ.
test ¸í·É¾î
test ¸í·É¾î
test ¸í·É¾î´Â Ç¥Çö½ÄÀ» Æò°¡ÇÏ°í ¹Ýȯcode¸¦ »ý¼ºÇϴµ¥ »ç¿ëÇÑ´Ù.
test ¸í·É¾î´Â Á¤¼ö¿Í ¹®ÀÚ¿­°ú ÆÄÀÏÀÇ Á¶°ÇÀ» °Ë»çÇÏ´Â µ¥¿¡ »ç¿ëµÉ
¼ö ÀÖÀ¸¸ç, ÀϹÝÀûÀ¸·Î if¹®°ú while¹® µîÀÇ Á¶°ÇºÎ È帧 Á¦¾î¿¡
»ç¿ëÇÑ´Ù.
»ç¿ë¹ýÀº,
test expression or [expression]
Ç¥Çö½ÄÀÌ trueÀ̸é 0À» returnÇÏ°í falseÀ̸é 0ÀÌ ¾Æ´Ñ °ªÀ» returnÇÑ´Ù.
¼ö½Ä Æò°¡
¼ö½ÄÀ» Æò°¡ÇÏ´Â µ¥¿¡ÀÇ Ç¥Çö½Ä »ç¿ë¹ýÀº,
[¼ýÀÚ °ü°è ¼ýÀÚ]

¿©±â¼­ °ü°è´Â,
-lt
: less than
-le
: less than or equal to
-gt
: greater than
-ge
: greater than or equal to
-eq
: equal to
-ne
: not equal to
¿¹¸¦ µé¾î x¸¦ 3ÀÌ¶ó °¡Á¤Çϸé,
$ [ $x -lt 7]
$ echo $?
0
$ [ $x -gt 7]
$ echo $?
¹®ÀÚ¿­ Æò°¡
test ¸í·É¿¡¼­ ¹®ÀÚ¿­À» Æò°¡ÇÒ ¶§ÀÇ Ç¥Çö½ÄÀº,
[¹®ÀÚ¿­1 = ¹®ÀÚ¿­2] : ¹®ÀÚ¿­ÀÌ °°Àº Áö¸¦ Æò°¡ÇÔ.
[¹®ÀÚ¿­1 != ¹®ÀÚ¿­2] : ¹®ÀÚ¿­ÀÌ ´Ù¸¥ Áö¸¦ Æò°¡ÇÔ.
¿¹¸¦ µé¾îº¸ÀÚ.
$ x=abc
$ [ $x ="abc"]
$ echo $?
¡¡0
$ [ $x !="abc"]
$ echo $?
¡¡1
¹®ÀÚ¿­¿¡´Â ¹Ýµå½Ã ""³ª''ºÎÈ£¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.
¹®ÀÚ¿­ ¿¬»êÀÚ¿¡´Â,
-z ¹®ÀÚ¿­
: ¹®ÀÚ¿­ÀÇ ±æÀÌ°¡ 0À̸é Âü
-n ¹®ÀÚ¿­
: ¹®ÀÚ¿­ÀÇ ±æÀÌ°¡ 0ÀÌ ¾Æ´Ï¸é Âü
ÆÄÀÏ Æò°¡
test ¹®¿¡¼­ ÆÄÀÏÀÌ µð·ºÅ丮ÀÎÁö ÆÄÀÏÀÎÁö¸¦ Æò°¡ÇÒ ¼ö ÀÖ´Ù.
»ç¿ë¹ýÀº,
test -Option filename
¿©±â¼­ OptionÀº,
-f
: filenameÀÌ ÆÄÀÏÀ̸é Âü.
-d
: filenameÀÌ µð·ºÅ丮À̸é Âü.
-s
: ÆÄÀÏÀÌ Á¸ÀçÇϸç Å©±â°¡ 0º¸´Ù Å©¸é Âü.
-r
: ÆÄÀÏÀÌ Á¸ÀçÇϸç Àб⠰¡´ÉÇϸé Âü.
-w
: ÆÄÀÏÀÌ Á¸ÀçÇÏ¸ç ¾²±â °¡´ÉÇϸé Âü.
-x
: ÆÄÀÏÀÌ Á¸ÀçÇÏ¸ç ½ÇÇà °¡´ÉÇϸé Âü.
´Ù¸¥ ¿¬»êÀÚ
test ¸í·É¾î¿¡¼­ ´ÙÀ½ÀÇ ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¸é º¹¼ö °Ë»ç°¡ °¡´ÉÇÏ´Ù.
-o
: or
-a
: and
!
: not
¡¬(¡¬)
: grouping
¿¹¸¦ µé¾î,
$ test -s filename -a -r filename
ÆÄÀÏÀÌ Á¸ÀçÇÏ°í size°¡ 0º¸´Ù Å©¸ç ±×¸®°í(and) Àб⠰¡´ÉÇÑÁö¸¦
°Ë»çÇÔ.
»ê¼ú½Ä Ç¥Çö
º»°ÝÀûÀ¸·Î ¹Ýº¹¹®À» ½ÃÀÛÇϱâ Àü¿¡, ½© script¿¡¼­ÀÇ »ê¼ú½Ä Ç¥Çö ¹æ¹ýÀ»
¾Ë¾Æº¸ÀÚ.
»ê¼ú½Ä Ç¥Çö ¹æ¹ýÀº,
let expression or ((expression))
¿¹¸¦ µé¾îº¸ÀÚ.
$ x=10
$ y=2
$ ((x=x+2))
$ echo $x
¡¡12
½© script¿¡¼­ÀÇ »ê¼ú½ÄÀº
let ¸í·ÉÀ» »ç¿ëÇϰųª,
°ýÈ£¸¦ µÎ °³ »ç¿ëÇÏ¿© Ç¥ÇöÇϰųª
expr ¸í·É¾î¸¦ ÀÌ¿ëÇÑ´Ù.
¿¹¸¦ µé¾îº¸ÀÚ.
$ let x=x+6
$ echo $x
¡¡ 18
$ let "x=x/(y+1)"
$ echo $x
¡¡ 6
»ê¼ú½Ä Ç¥Çö ¼Ó¿¡ °ýÈ£´Â Æò°¡ ¼ø¼­¸¦ ¹Ù²Ù´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù.
ÀÌ·± °æ¿ì Å« µû¿ÈÇ¥¸¦ ½á¾ßÇÔÀ» À¯ÀÇÇÏÀÚ.
À§ÀÇ Çü½Ä¿¡ ´ëÇÑ ¹Ù¸¥ Ç¥ÇöÀº,
let "x=x/(y+1)"¶Ç´Â ((x=x/(y+1))) ¶Ç´Â x=`expr $x/($y+1)`
[Âü°í] ` (back qoute)
expr À» »ç¿ëÇÑ ¿¹¸¦ ´õ »ìÆ캸ÀÚ.
$ expr 30 "*" 30
¡¡900
if ¹®
if ¹®Àº programÀ» Á¶°Ç¿¡ µû¶ó ºÐ±â½ÃŲ´Ù.
»ç¿ë¹ýÀ» »ìÆ캸¸é,
¡¡if
¡¡¡¡list a
¡¡then
¡¡¡¡list b
¡¡fi
»ç¿ë¿¹´Â ´ÙÀ½°ú °°´Ù.
¡¡if
¡¡¡¡test -s funfile
¡¡then
¡¡¡¡echo funfile exists
¡¡fi
funfileÀÌ Á¸ÀçÇÏ°í Å©±â°¡ 0ÀÌ ¾Æ´Ï¸é "funfile exists"¶ó´Â message¸¦ È­¸é¿¡
»Ñ¸°´Ù.
¹Ýº¹¹® (loop¹®)
¹Ýº¹¹®Àº ÀÏ·ÃÀÇ ¸í·ÉÀ» ¹Ýº¹ÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù.
¹Ýº¹À» °è¼ÓÇÒ Áö´Â Å° ¸í·ÉÀÇ ¹Ýȯ Äڵ忡 ±âÃÊÇÏ¿© ÀÌ·ç¾îÁø´Ù.
if ¹®À̳ª case ¹®Àº key word·Î ½ÃÀÛµÇ°í °Å²Ù·Î µÈ key word·Î ³¡³ª´Â ¹Ý¸é
¹Ýº¹¹®Àº Å°¿öµå¿Í ¾î¶² Á¶°ÇÀ¸·Î ½ÃÀÛÇÏ°í ³»ºÎ´Â do/doneÀ¸·Î µÑ·¯
½×ÀÌ°Ô µÈ´Ù.
¹Ýº¹¹®Àº ¾Æ·¡ÀÇ 3°¡Áö ÇüÅÂÀÌ´Ù.
while ¹®
¡¡ while¡¦
¡¡¡¡do
¡¡done
until ¹®
¡¡until¡¦
¡¡¡¡do
¡¡done
for ¹®
¡¡for¡¦
¡¡¡¡do
¡¡done
while ¹®
while ¹®Àº Á¶°ÇÀÌ ÂüÀÎ µ¿¾ÈÀº loop¸¦ ¹Ýº¹ÇÑ´Ù.
»ç¿ë¹ýÀ» »ìÆ캸¸é,
¡¡while
¡¡¡¡list a
¡¡do
¡¡¡¡list b
¡¡done
»ç¿ë¿¹[1]Àº ´ÙÀ½°ú °°´Ù
¡¡$cat sample_while
¡¡x=1
¡¡while((x<=10))
¡¡do
¡¡¡¡echo x is $x
¡¡¡¡let x=x+1
¡¡done
¡¡$sample_while
¡¡¡¡x is 1
¡¡¡¡x is 2
¡¡¡¡¡¡?BR> ¡¡¡¡¡¡?BR> ¡¡¡¡¡¡?
¡¡¡¡x is 10
À§ÀÇ ¿¹¿¡¼­ ¾Ë ¼ö ÀÖµíÀÌ Á¶°Ç½ÄÀÎ ((x<=10))ÀÌ ÂüÀÎ µ¿¾ÈÀº loop ³»ºÎ¸¦ ¹Ýº¹ÇÏ°Ô
µÈ´Ù. ±×·¡¼­, ¹«ÇÑ loop¿¡ ºüÁöÁö ¾Ê¾Æ¾ß ÇÔÀ» ÁÖÀÇÇÏÀÚ.
»ç¿ë¿¹[2]´Â ´ÙÀ½°ú °°´Ù
$ cat sample_while2
¡¡¡¡ans=yes
¡¡¡¡while
¡¡¡¡[ $ans = "yes" ]
¡¡do
¡¡¡¡echo enter a name
¡¡¡¡read name
¡¡¡¡echo yes or no
¡¡¡¡read ans
¡¡done
$ chmod 777 sample_while2
$ sample_while2
until ¹®
until ¹®Àº Á¶°Ç½ÄÀÌ ÂüÀÌ µÉ ¶§±îÁö loop¸¦ ¹Ýº¹ÇÑ´Ù.
(ºñ±³ : while ¹®Àº Á¶°ÇÀÌ ÂüÀÎ µ¿¾È loop°¡ °è¼ÓµÈ´Ù.)
»ç¿ë¹ýÀ» »ìÆ캸¸é,
¡¡until
¡¡¡¡list a
¡¡do
¡¡¡¡list b
¡¡done
»ç¿ë¿¹´Â ´ÙÀ½°ú °°´Ù.
$ cat sample_until
¡¡¡¡x=1
¡¡¡¡until((x>10))
¡¡do
¡¡¡¡echo x is $x
¡¡¡¡let x=x+1
¡¡done
$ sample_until
¡¡¡¡x is 1
¡¡¡¡x is 2
¡¡¡¡¡¡?BR> ¡¡¡¡¡¡?BR> ¡¡¡¡¡¡?BR> ¡¡¡¡x is 10
À§ÀÇ ¿¹¿¡¼­ ¾Ë ¼ö ÀÖµíÀÌ until ¹®Àº Á¶°ÇÀÌ ÂüÀÌ µÉ ¶§ ±îÁö ¹Ýº¹µÈ´Ù.
for ¹®
for ¹®Àº list¿¡ ÀÖ´Â °¢ itemµéÀÌ for ¹Ýº¹¹®¿¡ ¼øÂ÷ÀûÀ¸·Î ÇÒ´çµÇ¾î ¼ÒÁøµÉ ¶§ ±îÁö
loop¸¦ ½ÇÇàÇÑ´Ù.
»ç¿ë¹ýÀ» »ìÆ캸¸é,
¡¡for var list
¡¡do
¡¡¡¡list
¡¡done
»ç¿ë¿¹´Â ´ÙÀ½°ú °°´Ù.
$ cat sample_for
¡¡for x in 1 2 3 4 5
¡¡do
¡¡¡¡echo " 2 * $x is ¡¬c"
¡¡¡¡let x=x=+2
¡¡echo $x
¡¡done
$ sample_for
¡¡¡¡2*1 is 2
¡¡¡¡2*2 is 4
¡¡¡¡¡¡¡¡?BR> ¡¡¡¡¡¡¡¡?BR> ¡¡¡¡¡¡¡¡?BR> ¡¡¡¡2*5 is 10
break, continue, exit
¹Ýº¹¹®¿¡¼­ loop¸¦ ÁߴܽÃų ÇÊ¿ä°¡ ÀÖÀ» ¶§°¡ ÀÖÀ» ¼ö ÀÖ´Ù.
break ¿Í continue ´Â ¹«Á¶°ÇÀûÀÎ È帧 Á¦¾î¸¦ Á¦°øÇÑ´Ù.
exit
Àüü ÇÁ·Î±×·¥ÀÌ Á¾·áµÇ¾î¾ß ÇÒ °æ¿ì »ç¿ëÇÑ´Ù.
ÇÁ·Î±×·¥À» ¿ÏÀüÈ÷ Á¾·áÇÏ°í ½© ÇÁ·ÒÇÁÆ®·Î ³ª°¡°Ô ÇÑ´Ù.
break
loop ¸¦ Á¾·áÇÏ°í done ´ÙÀ½ÀÇ ¸í·ÉÀ» °è¼ÓÇÏ¿© ¼öÇàÇϵµ·Ï ÇÑ´Ù.
continue
loop ÀÇ ³ª¸ÓÁö ¸í·ÉÀ» Áß´ÜÇÏ°í loop ÀÇ ¸Ç À§·Î °¡°Ô ÇÑ´Ù.
Áï, continue´Â ´ÜÁö ÇѹøÀÇ loop¸¦ Á¾·áÇÏ°í loopÀÇ ¸Ç À§¿¡¼­ loop¸¦ °è¼ÓÇÏ°Ô
Çϸç, break´Â loop¸¦ ºüÁ®³ª°¡ ´ÙÀ½ ´Ü°è¸¦ °è¼Ó ¼öÇàÇÏ°Ô ÇÑ´Ù.
»ç¿ë¿¹´Â ´ÙÀ½°ú °°´Ù.
$ cat sample_break
¡¡while
¡¡¡¡true
¡¡do
¡¡¡¡echo "enter file name to remove :¡¬c"
¡¡¡¡read file
¡¡¡¡if test ! -f $file
¡¡¡¡then
¡¡¡¡¡¡cho $file is not a require file
¡¡¡¡¡¡continue
¡¡¡¡fi
¡¡¡¡echo removing $ file
¡¡¡¡rm $file
¡¡¡¡break
¡¡done



  ÃßõÇÏ±â   ¸ñ·Ïº¸±â

Copyright 1999-2024 Zeroboard / skin by zero