Àû´çÈ÷ Àß ¾²ÀÎ º¯¼ö´Â ½ºÅ©¸³Æ®¿¡ °·ÂÇÔ°ú À¯¿¬ÇÔÀ» ÁÙ ¼ö Àֱ⠶§¹®¿¡ º¯¼öÀÇ ¹Ì¹¦ÇÑ Â÷ÀÌÁ¡°ú ´µ¾Ó½º¿¡ ´ëÇØ ÀÚ¼¼È÷ ¹è¿ï Çʿ䰡 ÀÖ½À´Ï´Ù.
ȯ°æ º¯¼ö´Â ½ºÅ©¸³Æ®ÀÇ µ¿ÀÛ¿¡ ¿µÇâÀ» ¹ÌĨ´Ï´Ù.
ÀÔ·Â ÇÊµå ±¸ºÐÀÚ
±âº»Àº °ø¹é ¹®ÀÚÁö¸¸ ½°Ç¥·Î ºÐ¸®µÈ µ¥ÀÌŸ ÆÄÀÏÀ» ÆÄ½ÌÇÏ·Á°í ÇÒ °æ¿ìó·³ º¯°æÀÌ °¡´ÉÇÕ´Ï´Ù.
»ç¿ëÀÚÀÇ È¨ µð·ºÅ丮, º¸Åë /home/username (예 3-6 Âü°í)
½ÇÇà ÆÄÀÏÀÇ °æ·Î, º¸Åë /usr/bin/, /usr/X11R6/bin/, /usr/local/bin, µîµî..
참고: º¸Åë, ÇöÀç "ÀÛ¾÷ µð·ºÅ丮", ./ ´Â º¸¾È Â÷¿ø¿¡¼ $PATH ¿¡¼ Á¦¿Ü ½Ãŵ´Ï´Ù.
¸í·É¾î ÁÙ¿¡¼ ¾²ÀÌ´Â ¸ÞÀÎ ÇÁ·ÒÇÁÆ®ÀÔ´Ï´Ù.
Ãß°¡ ÀÔ·Â ÀÛ¾÷ÀÌ ÇÊ¿äÇÒ ¶§ ¾²ÀÌ´Â 2Â÷ ÇÁ·ÒÇÁÆ®ÀÔ´Ï´Ù. ">", ÀÌ·¸°Ô º¸ÀÔ´Ï´Ù.
3Â÷ ÇÁ·ÒÇÁÆ®·Î select ·çÇÁ¿¡¼ ¾²ÀÔ´Ï´Ù (예 3-37 Âü°í).
4Â÷ ÇÁ·ÒÇÁÆ®·Î, ½ºÅ©¸³Æ®¸¦ -x ¿É¼ÇÀ¸·Î ºÒ·¶À» ¶§, Ãâ·Â ÁÙ¸¶´Ù "+"¸¦ ÁÙ ¾Õ¿¡ ºÙ¿© ÁÝ´Ï´Ù.
ÇöÀç ÀÛ¾÷ µð·ºÅ丮
#!/bin/bash WRONG_DIRECTORY=33 clear # ½ºÅ©¸°À» Áö¿ò. TargetDirectory=/home/bozo/projects/GreatAmericanNovel cd $TargetDirectory echo "$TargetDirectory ¿¡ ÀÖ´Â ¾È ¾²´Â ÆÄÀϵéÀ» Áö¿ó´Ï´Ù." if [ $PWD != $TargetDirectory ] # ½Ç¼ö·Î ´Ù¸¥ µð·ºÅ丮¸¦ ³¯·Á ¹ö¸®Áö ¾Ê°Ô Çϱâ À§Çؼ then echo "´Ù¸¥ µð·ºÅ丮ÀÔ´Ï´Ù!" echo "ÇöÀç $TargetDirectory °¡ ¾Æ´Ï°í $PWD ¿¡ ÀÖ½À´Ï´Ù!" echo "±×³É Á¾·áÇÕ´Ï´Ù!" exit $WRONG_DIRECTORY fi rm -rf * rm .[A-Za-z0-9]* # µµÆ® ÆÄÀϵé(dotfiles)À» Áö¿ì±â. # ÇÊ¿äÇÏ´Ù¸é ¿©±â¼ ´Ù¸¥ ÀÛ¾÷µéÀ» ¼öÇà echo echo "³¡." echo "$TargetDirectory ¿¡ ÀÖ´Â ÆÄÀÏÀ» ´Ù Áö¿ü½À´Ï´Ù." echo exit 0 |
¹Ù·Î Àü ÀÛ¾÷ µð·ºÅ丮
½ºÅ©¸³Æ®°¡ ºÎ¸¦ ±âº» ¿¡µðÅÍ·Î º¸Åë vi ³ª emacs ÀÔ´Ï´Ù.
TMOUT ȯ°æ º¯¼ö¸¦ 0ÀÌ ¾Æ´Ñ °ª timeÀ¸·Î ¼³Á¤ÇÏ¸é ¼¿ ÇÁ·ÒÇÁÆ®´Â ±× ½Ã°£ÀÌ Áö³ª¸é ·Î±×¾Æ¿ôÀÌ µË´Ï´Ù.
참고: ºÒÇàÇϰԵµ TMOUTÀº ÄֻܼóÀÇ ½© ÇÁ·ÒÇÁÆ®³ª xterm(hanterm)¿¡¼¸¸ µ¿ÀÛÇÕ´Ï´Ù. ¿¹¸¦ µé¾î ½ºÅ©¸³Æ® »ó¿¡¼ read »ç¿ë½Ã TMOUTÀ» ¾²·Á´Â °æ¿ì¿¡´Â Á¦´ë·Î µ¿ÀÛÇÏÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù.
ŸÀÓ ¾Æ¿ôÀ» ½© ½ºÅ©¸³Æ®¿¡¼ ±¸ÇöÇÒ ¼ö´Â ÀÖÀ¸³ª ±×·¸°Ô È¿°úÀûÀÌÁö ¾Ê½À´Ï´Ù. ŸÀÓ ¾Æ¿ôÀÌ ³µÀ» ¶§ ŸÀÌ¹Ö ·çÇÁ°¡ ½ºÅ©¸³Æ®¿¡°Ô ½Ã±×³ÎÀ» º¸³»µµ·Ï ¼¼ÆÃÇØ¾ß Çϰí ŸÀÌ¹Ö ·çÇÁ°¡ ¹ß»ý½ÃŲ (예 3-99 Âü°í) ÀÎÅÍ·´Æ®¸¦ ó¸®ÇÒ ½Ã±×³Î ó¸® ·çƾµµ ¸¸µé¾î¾ß ÇÕ´Ï´Ù.(ÈÞ~~ ^^)
#!/bin/bash # TMOUT=3 ½ºÅ©¸³Æ®¿¡¼´Â ¾µ¸ð ¾ø½À´Ï´Ù TIMELIMIT=3 # ¿©±â¼´Â 3ÃÊ, ´Ù¸¥ °ªÀ¸·Î ¼¼Æ® ÇÒ ¼ö ÀÖ½À´Ï´Ù. PrintAnswer() { if [ $answer = TIMEOUT ] then echo $answer else # ´Ù¸¥ ÂÊ¿¡¼ ºÎ¸£´Â PrintAnswer¿Í Çò°¥¸®Áö ¾Ê±â À§Çؼ echo "´ç½ÅÀÌ °¡Àå ÁÁ¾ÆÇÏ´Â ¾ßä´Â $answer À̱º¿ä." kill $! # ¹é±×¶ó¿îµå¿¡¼ µµ´Â TimerOn ÇÔ¼ö°¡ ÇÊ¿ä¾ø±â ¶§¹®¿¡ kill ½ÃÅ´. # $! ´Â ¹é±×¶ó¿îµå¿¡¼ µµ´Â °¡Àå ÃÖ±Ù ÀÛ¾÷ÀÇ PID ÀÔ´Ï´Ù. fi } TimerOn() { sleep $TIMELIMIT && kill -s 14 $$ & # 3Ãʸ¦ ±â´Ù¸®°í ¾Ë¶÷ ½Ã±×³Î(sigalarm)À» ½ºÅ©¸³Æ®¿¡ º¸³¿ } Int14Vector() { answer="TIMEOUT" PrintAnswer exit 14 } trap Int14Vector 14 # ŸÀÌ¸Ó ÀÎÅÍ·´Æ®(14)´Â ¿ì¸® Àǵµ´ë·Î ŸÀӾƿôÀ» ó¸®ÇÔ echo "Á¦ÀÏ ÁÁ¾ÆÇÏ´Â ¾ßä´Â?" TimerOn read answer PrintAnswer # ÀÌ´Â ºÐ¸íÈ÷ ŸÀÓ ¾Æ¿ô ÀԷ¿¡ ´ëÇÑ ¹ÌºÀÃ¥ÀÔ´Ï´Ù¸¸, # bash ·Î ÇÒ ¼ö ÀÖ´Â ÃÖ¼±À» ´ÙÇÑ °ÍÀÔ´Ï´Ù. # (µ¶Àڵ鿡°Ô µµÀü: ´õ ³ªÀº ÇØ°áÃ¥À» Á¦½ÃÇØ º¸¼¼¿ä.) # ´õ ¿ì¾ÆÇÑ ´Ù¸¥ °ÍÀÌ ÇÊ¿äÇÏ´Ù¸é C³ª C++¿¡¼ 'alarm'À̳ª 'setitimer'°°Àº # Àû´çÇÑ ¶óÀ̺귯¸® ÇÔ¼ö¸¦ ½á¼ ±¸ÇöÇϽñ⠹ٶø´Ï´Ù. exit 0 |
½ºÅ©¸³Æ®°¡ ¾ó¸¶³ª µ¹¾Ò´ÂÁö¸¦ ³ªÅ¸³»´Â ÃÊ ´ÜÀ§ ½Ã°£
#!/bin/bash ENDLESS_LOOP=1 echo echo "½ºÅ©¸³Æ®¸¦ ³¡³»·Á¸é Control-C ¸¦ ´©¸£¼¼¿ä." echo while [ $ENDLESS_LOOP ] do if [ $SECONDS -eq 1 ] then units=second else units=seconds fi echo "ÀÌ ½ºÅ©¸³Æ®´Â $SECONDS $units µ¿¾È µ¹°í ÀÖ½À´Ï´Ù." sleep 1 done exit 0 |
read¿¡ º¯¼ö°¡ ¾È ÁÖ¾îÁ³À» ¶§ ÀúÀåµÇ´Â ±âº»°ª. select ¿¡¼´Â º¯¼öÀÇ °ªÀÌ ¾Æ´Ï¶ó ¼±ÅÃÇÑ ¼ýÀÚ°¡ ÀúÀåµÊ.
#!/bin/bash echo echo -n "°¡Àå ÁÁ¾ÆÇÏ´Â ¾ßä´Â? " read echo "´ç½ÅÀÌ °¡Àå ÁÁ¾ÆÇÏ´Â ¾ßä´Â $REPLY ÀÔ´Ï´Ù." # REPLY ´Â ÃÖ±Ù "read"°¡ º¯¼ö ¾øÀÌ ±×³É ¾²ÀÎ °æ¿ì¿¡ ±× °ªÀ» °®°í ÀÖ½À´Ï´Ù. echo echo -n "°¡Àå ÁÁ¾ÆÇÏ´Â °úÀÏÀº? " read fruit echo "´ç½ÅÀÌ °¡Àå ÁÁ¾ÆÇÏ´Â °úÀÏÀº $fruit ÀÔ´Ï´Ù." echo "ÇÏÁö¸¸..." echo "\$REPLY °ªÀº ¿©ÀüÈ÷ $REPLY ÀÔ´Ï´Ù." # $fruit º¯¼ö°¡ »õ·Î¿î "read" °ªÀ» °¡Á®°¡ ¹ö·È±â ¶§¹®¿¡ $REPLY ´Â ¿©ÀüÈ÷ ±× Àü¿¡ # ¼¼Æ®µÇ¾ú´ø °ªÀ» °®°í ÀÖ½À´Ï´Ù. echo exit 0 |
bash ÀÚ½ÅÀÇ °æ·Î¸¦ ³ªÅ¸³»°í º¸ÅëÀº /bin/bashÀÓ.
½ºÅ©¸³Æ®°¡ ½ÇÇàµÉ ¶§ ¾îµð¿¡¼ bash ½ÃÀÛ ÆÄÀÏÀ» ÀÐÀ» °ÍÀÎÁö¸¦ ³ªÅ¸³»´Â ȯ°æ º¯¼ö.
À§Ä¡ ÀÎÀڷμ ¸í·É¾î ÁÙ¿¡¼ ½ºÅ©¸³Æ®³ª ÇÔ¼ö·Î Àü´ÞµÇ°Å³ª º¯¼ö¿¡ setÀ» ½ÃÅ´(예 3-20 ¿Í 예 3-40 Âü°í).
½ºÅ©¸³Æ® ÀÚ½ÅÀÇ ÇÁ·Î¼¼½º ID·Î, º¸Åë Àӽà ÆÄÀÏ À̸§À» ¸¸µé¶§ »ç¿ëÇÕ´Ï´Ù (예 A-5 ¿Í 예 3-100 Âü°í).
¸í·É¾î³ª ÇÔ¼ö, ½ºÅ©¸³Æ® ÀÚ½ÅÀÇ Á¾·á »óÅ (예 3-1 ¿Í 예 3-63 Âü°í).
ÇÑ ´Ü¾î·Î Ç¥½ÃµÇ´Â À§Ä¡ ÀÎÀÚµé ¸ðµÎ ´Ù
$*¿Í ¶È°°Áö¸¸ °¢ ÀÎÀÚ´Â µû¿ÈÇ¥·Î ¹ÀÔ´Ï´Ù. Áï, ÇØ¼®µÇ°Å³ª È®Àå¾øÀÌ ÀÖ´Â ±×´ë·Î ³Ñ°ÜÁý´Ï´Ù. ±× °á°ú·Î °¢ ÀÎÀÚ´Â °¢°¢ÀÌ ¼·Î ´Ù¸¥ ´Ü¾î·Î ±¸ºÐµÅ¼ Ç¥½ÃµË´Ï´Ù.
예 3-17. arglist: $* °ú $@ ·Î ÀÎÀÚ¸¦ ³ª¿Çϱâ
#!/bin/bash # ÀÌ ½ºÅ©¸³Æ®¿¡ "one two three" µîÀÇ ÀÎÀÚ¸¦ ³Ñ°Ü¼ ºÎ¸£¼¼¿ä. if [ ! -n "$1" ] then echo "»ç¿ë¹ý: `basename $0` argument1 argument2 etc." exit 1 fi echo index=1 echo "\"\$*\" ·Î ÀÎÀÚ¸¦ ³ª¿Çϱâ:" for arg in "$*" # "$*" ¸¦ µû¿ÈÇ¥·Î ¹Áö ¾Ê´Â´Ù¸é Á¦´ë·Î µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù. do echo "#$index ¹øÂ° ÀÎÀÚ = $arg" let "index+=1" done # $* ´Â ¸ðµç ÀÎÀÚ¸¦ ÇϳªÀÇ ´Ü¾î·Î º¾´Ï´Ù. echo "Àüü ÀÎÀÚ ¸ñ·ÏÀº ÇϳªÀÇ ´Ü¾î·Î ³ªÅ¸³³´Ï´Ù." echo index=1 echo "\"\$@\" ·Î ÀÎÀÚ¸¦ ³ª¿Çϱâ:" for arg in "$@" do echo "#$index ¹øÂ° ÀÎÀÚ = $arg" let "index+=1" done # $@ ´Â ÀÎÀÚ¸¦ ºÐ¸®µÈ ´Ü¾î·Î º¾´Ï´Ù. echo "Àüü ÀÎÀÚ ¸ñ·ÏÀº ºÐ¸®µÈ ´Ü¾î·Î ³ªÅ¸³³´Ï´Ù." echo exit 0 |
½ºÅ©¸³Æ®·Î ³Ñ¾î¿Â Ç÷¡±×
경고 |
¿ø·¡ ksh ¿¡¼ ¾²´ø °ÍÀ» Bash¿¡¼ äÅÃÇÑ °ÍÀε¥ ºÒÇàÈ÷µµ Àß µ¿ÀÛÇÏÁö ¾Ê´Â °Í °°½À´Ï´Ù. ½ºÅ©¸³Æ® ÀÚ½ÅÀÌ ´ëÈÇüÀÎÁö ¾Æ´ÑÁö ½º½º·Î È®ÀÎ ÇÏ·Á°í ÇÏ´Â °æ¿ì¿¡³ª ¾µ¸¸ÇÕ´Ï´Ù(3.29절 Âü°í). |
¹é±×¶ó¿îµå·Î µ¹°í ÀÖ´Â °¡Àå ÃÖ±Ù jobÀÇ PID (ÇÁ·Î¼¼½º ID)
º¯¼ö °ªÀ» ÃʱâÈÇϰųª º¯°æÇϱâ
´ëÀÔ ¿¬»êÀÚ(¾Õ µÚ·Î °ø¹éÀÌ ÀÖÀ¸¸é ¾È µË´Ï´Ù. )
test¹®¿¡¼ = °ú -eq À» Çò°¥¸®Áö ¸¶¼¼¿ä.
경고 |
= Àº »óȲ¿¡ µû¶ó ´ëÀÔ ¿¬»êÀÚµµ µÉ ¼ö ÀÖ°í test ¿¬»êÀÚµµ µÉ ¼ö ÀÖ½À´Ï´Ù. |
예 3-18. º¯¼ö ´ëÀÔ
#!/bin/bash echo # º¯¼ö°¡ '$' ¾øÀÌ ¾²ÀÏ ¶§¸¦ ¾Ë¾Æº¾½Ã´Ù. # ÇÒ´ç a=879 echo "\"a\" °ªÀº $a ÀÔ´Ï´Ù." # 'let'À¸·Î ÇÒ´ç let a=16+5 echo "ÀÚ, ÀÌÁ¦ \"a\" °ªÀº $a ÀÔ´Ï´Ù." echo # 'for' ·çÇÁ¿¡¼ (ÁøÂ¥ ÀÏÁ¾ÀÇ ¼ÓÀÓ¼ö ÇÒ´ç) echo -n "·çÇÁ ¾È¿¡¼ \"a\" °ªÀº " for a in 7 8 9 11 do echo -n "$a " done echo echo # 'read' ¹®¿¡¼ echo -n "Enter \"a\" " read a echo "\"a\" °ªÀº ÀÌÁ¦ $a ÀÔ´Ï´Ù." echo exit 0 |
예 3-19. Æò¹üÇϰí Àç¹Õ´Â º¯¼ö ´ëÀÔ
#!/bin/bash a=23 # °£´ÜÇÑ °æ¿ì echo $a b=$a echo $b # ÀÚ Á» ´õ Àç¹Õ´Â °É º¼±î¿ä... a=`echo Hello!` # 'echo' ¸í·É¾îÀÇ °á°ú¸¦ 'a' ¿¡ ÇÒ´çÇÕ´Ï´Ù. echo $a a=`ls -l` # 'ls -l' ¸í·É¾îÀÇ °á°ú¸¦ 'a' ¿¡ ÇÒ´çÇÕ´Ï´Ù. echo $a exit 0 |
$()¸¦ ¾´ º¯¼ö ´ëÀÔ(¿ª µû¿ÈÇ¥º¸´Ù »õ·Î¿î ¹æ¹ý)
# /etc/rc.d/rc.local ¿¡¼ ¹ßÃé R=$(cat /etc/redhat-release) arch=$(uname -m) |
Áö¿ª º¯¼ö´Â ÄÚµå ºí·°À̳ª ÇÔ¼ö ¾È¿¡¼¸¸ º¸ÀÔ´Ï´Ù (3.19절 Âü°í).
°æ·Î³ª ½© ÇÁ·ÒÇÁƮó·³ ½©°ú À¯Àú ÀÎÅÍÆäÀ̽º¿¡ ¿µÇâÀ» ÁÖ´Â º¯¼ö¸¦ ȯ°æ º¯¼ö¶ó°í ÇÕ´Ï´Ù.
½ºÅ©¸³Æ®¾È¿¡¼ ȯ°æ º¯¼ö¿¡ °ªÀ» ¼³Á¤ÇÑ ÈÄ ±× °ªÀÌ ½ºÅ©¸³Æ® ¹Û, ȯ°æ º¯¼ö ¿µ¿ªÀ¸·Î Àü´ÞµÇ°Ô ÇØ¾ß Çϴµ¥ ÀÌ ¶§ ¾²´Â ÇÔ¼ö°¡ exportÀÔ´Ï´Ù.
참고: ½ºÅ©¸³Æ®´Â ¿ÀÁ÷ ÀÚ½ÅÀÇ ÀÚ½Ä ÇÁ·Î¼¼½º(½ºÅ©¸³Æ® ¾È¿¡¼ ½ÇÇàµÈ ¸í·É¾î³ª ÇÁ·Î¼¼½º)¿¡°Ô¸¸ º¯¼ö¸¦ export ÇÒ ¼ö ÀÖ½À´Ï´Ù. µû¶ó¼, ¸í·É¾î ÁÙ¿¡¼ ºÒ¸° ½ºÅ©¸³Æ®´Â ¸í·É¾î Á٠ȯ°æ¿¡ º¯¼ö¸¦ Àü´ÞÇÒ ¼ö ¾ø°í, ÀÚ½Ä ÇÁ·Î¼¼½º´Â ºÎ¸ð ÇÁ·Î¼¼½º¿¡°Ô º¯¼ö¸¦ Àü´ÞÇÒ ¼ö ¾ø½À´Ï´Ù.
---
¸í·É¾î ÁÙ¿¡¼ ½ºÅ©¸³Æ®·Î ³Ñ¾î¿Â ÀÎÀÚµé, $0, $1, $2, $3... ($0 Àº ½ºÅ©¸³Æ® À̸§, $1 Àº ù¹øÂ° ÀÎÀÚ µîµî)
예 3-20. À§Ä¡ ÀÎÀÚ
#!/bin/bash echo echo ÀÌ ½ºÅ©¸³Æ®ÀÇ À̸§Àº $0 ÀÔ´Ï´Ù. # ÇöÀç µð·ºÅ丮ÀÎ ./ ¸¦ ºÙÀÔ´Ï´Ù. echo ÀÌ ½ºÅ©¸³Æ®ÀÇ À̸§Àº `basename $0` ÀÔ´Ï´Ù. # °æ·Î À̸§À» ¶¼¾î³À´Ï´Ù('basename' Âü°í). echo if [ $1 ] then echo "#1 ÀÎÀÚ´Â $1 ÀÔ´Ï´Ù." # # À» À̽ºÄÉÀÌÇÁ ½Ã۱â À§Çؼ Àοë(quote)À» ÇØÁà¾ß ÇÕ´Ï´Ù. fi if [ $2 ] then echo "#2 ÀÎÀÚ´Â $2 ÀÔ´Ï´Ù." fi if [ $3 ] then echo "#3 ÀÎÀÚ´Â $3 ÀÔ´Ï´Ù." fi echo exit 0 |
¾î¶² ½ºÅ©¸³Æ®µéÀº ÀÚ½ÅÀÌ ºÒ¸° À̸§¿¡ µû¶ó ´Ù¸£°Ô µ¿ÀÛÇÒ ¼öµµ Àִµ¥ ÀÌ·¸°Ô ÇÏ·Á¸é ½ºÅ©¸³Æ® ¾È¿¡¼ $0À» È®ÀÎÇÏ¸é µË´Ï´Ù. ¾î¶² À̸§À¸·Î ºÒ¸®µçÁö °£¿¡ ±× À̸§À» Á¤È®ÇÏ°Ô ½Éº¼¸¯ ¸µÅ©Çϰí Àֱ⠶§¹®ÀÔ´Ï´Ù.
참고: ¸¸¾à¿¡ ÀÎÀÚ°¡ ÁÖ¾îÁ®¾ß ÇÏ´Â ½ºÅ©¸³Æ®Àε¥ ºüÁ® ÀÖ´Ù¸é °¢°¢ÀÇ À§Ä¡ ÀÎÀڵ鿡°Ô´Â ³Î °ªÀÌ µé¾î°¡¼ ¿øÄ¡ ¾Ê´Â °á°ú¸¦ °¡Á® ¿Ã°Ì´Ï´Ù. ÀÌ·± »óȲÀ» ÇÇÇÏ´Â ÇÑ °¡Áö ¹æ¹ýÀº À§Ä¡ ÀÎÀÚ¸¦ º¯¼ö¿¡ ´ëÀÔÇÏ´Â ¹®Àå¿¡¼ ¾çÂÊ¿¡ ¶È°°Àº ¾Æ¹« ¹®ÀÚ³ª ºÙÀÌ´Â °ÍÀÔ´Ï´Ù.
variable1x=$1x # ÀÌ·¸°Ô Çϸé À§Ä¡ ÀÎÀÚ°¡ ³Î °ªÀÌ¶óµµ ¿¡·¯¸¦ ¸·¾ÆÁÝ´Ï´Ù. # º¯¼ö¸¦ ¾µ °÷¿¡¼ ´ÙÀ½Ã³·³ ÇØÁÖ¸é ¿¡·¯ ¹æÁö¿ë ¹®ÀÚ°¡ Àß·Á³ª°©´Ï´Ù. variable1=${variable1x/x/} # ¾Õ¿¡¼ ¾ê±âÇß´ø ÀÎÀÚ ¹Ù²Ù±âÁß ÇÑ °¡Áö ¹æ¹ýÀ¸·Î º¯°æ ÆÐÅÏÀ» »èÁ¦ÇÕ´Ï´Ù. |
---
예 3-21. wh, whois µµ¸ÞÀÎ ³×ÀÓ ·è¾÷(domain name lookup)
#!/bin/bash # ripe.net, cw.net, radb.net Áß ÇϳªÀÇ ¼¹ö¿¡ ´ëÇØ¼ # 'whois domain-name' ·è¾÷À» ½ÇÇà # ÀÌ ½ºÅ©¸³Æ® À̸§À» 'wh' ¶ó°í ÇØ¼ /usr/local/bin ¿¡ ³Ö¾îµÎ¼¼¿ä. # ±×¸®°í ´ÙÀ½Ã³·³ ½Éº¼¸¯ ¸µÅ©¸¦ °Å¼¼¿ä. # ln -s /usr/local/bin/wh /usr/local/bin/wh-ripe # ln -s /usr/local/bin/wh /usr/local/bin/wh-cw # ln -s /usr/local/bin/wh /usr/local/bin/wh-radb if [ -z $1 ] then echo "»ç¿ë¹ý: `basename $0` [domain-name]" exit 1 fi case `basename $0` in # ½ºÅ©¸³Æ® À̸§À» È®ÀÎÇØ¼ ÇØ´ç ¼¹ö¸¦ ºÎ¸¨´Ï´Ù. "wh" ) whois $1@whois.ripe.net;; "wh-ripe") whois $1@whois.ripe.net;; "wh-radb") whois $1@whois.radb.net;; "wh-cw" ) whois $1@whois.cw.net;; * ) echo "»ç¿ë¹ý: `basename $0` [domain-name]";; esac exit 0 |
---
shift Àº À§Ä¡ ÀÎÀÚ¸¦ ¿ÞÂÊÀ¸·Î Çϳª¾¿ À̵¿½Ãŵ´Ï´Ù.
$1 <--- $2, $2 <--- $3, $3 <--- $4, µîµî...
¿ø·¡ $1 Àº ¾ø¾îÁöÁö¸¸ $0 Àº ¹Ù²îÁö ¾Ê½À´Ï´Ù. À§Ä¡ ÀÎÀÚ °¹¼ö°¡ ¸¹´Ù¸é shift¸¦ ½á¼ ¿¹Àü 10°³¸¦ ¾µ ¼ö ÀÖ°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù.
declare ³ª typeset(µ¿ÀǾî) ´Â º¯¼öÀÇ Æ¯¼ºÀ» Á¦ÇÑÇÒ ¼ö ÀÖ½À´Ï´Ù. ¸î¸î ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼´Â ÀÌ·¸°Ô ¾î¼³Ç ÇüÅ·ΠŸÀÔÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. declare ´Â bash ¹öÀü 1´ë¿¡¼´Â ¾µ ¼ö ¾ø½À´Ï´Ù.
declare -r var1 |
(declare -r var1 ´Â readonly var1 ¿Í ¶È°°ÀÌ µ¿ÀÛÇÕ´Ï´Ù.)
C¿¡¼ const ÇüÇÑÁ¤¾î¿Í °ÅÀÇ ºñ½ÁÇÕ´Ï´Ù. Àбâ Àü¿ëÀÎ º¯¼ö°ªÀ» ¹Ù²Ù·Á°í ÇÏ¸é ¿¡·¯ ¸Þ¼¼Áö°¡ ³ª¿É´Ï´Ù.
declare -i var2 |
ÀÌ ½ºÅ©¸³Æ®´Â ÀÌ ¼±¾ð ÈÄ ³ª¿À´Â var2À» Á¤¼ö·Î ó¸®ÇÕ´Ï´Ù. ÀÌ·¸°Ô Á¤¼ö·Î ¼±¾ðµÈ º¯¼ö´Â expr³ª let¾øÀÌ »ê¼ú ¿¬»êÀÌ °¡´ÉÇØ Áø´Ù´Â °Í¿¡ ÁÖÀÇÇϼ¼¿ä.
declare -a index |
index´Â ¹è¿·Î Ãë±ÞµË´Ï´Ù.
declare -f # (ÀÎÀÚ ¾øÀ½) |
declare -f ´Â ½ºÅ©¸³Æ®¾ÈÀÇ ¸ðµç ÇÔ¼öµéÀÇ ¸ñ·ÏÀ» ³ªÅ¸³À´Ï´Ù.
declare -x var3 |
ÀÌ ¼±¾ðÀº ½ºÅ©¸³Æ® ¿ÜºÎ ȯ°æ¿¡¼µµ ÀÌ º¯¼ö¸¦ º¼ ¼ö ÀÖ°Ô ÇØ ÁÝ´Ï´Ù(export).
예 3-23. declare ½á¼ º¯¼ö ŸÀÔ ÁöÁ¤Çϱâ
#!/bin/bash declare -f # ´ÙÀ½¿¡ ³ª¿À´Â ÇÔ¼öµéÀÇ ¸ñ·ÏÀ» º¸¿©ÁÜ. func1 () { echo ¿©±â´Â ÇÔ¼öÀÔ´Ï´Ù. } declare -r var1=13.36 echo "var1 Àº $var1 ·Î ¼±¾ð µÇ¾ú½À´Ï´Ù." # Àбâ Àü¿ë º¯¼ö¸¦ º¯°æÇÏ·Á°í ÇÔ. var1=13.37 # ¿¡·¯ ¸Þ¼¼Áö ³ª¿À°í. echo "var1 Àº ¿©ÀüÈ÷ $var1 ÀÔ´Ï´Ù." echo declare -i var2 var2=2367 echo "var2 Àº $var2 ·Î ¼±¾ð µÇ¾ú½À´Ï´Ù." var2=var2+1 # Á¤¼ö ¼±¾ðÀº 'let' ÀÌ ÇÊ¿ä¾ø°Ô ÇØÁÝ´Ï´Ù. echo "1ÀÌ Áõ°¡ÇÑ var2 ´Â $var2 ÀÔ´Ï´Ù." # Á¤¼ö·Î ¼±¾ðµÈ º¯¼ö¸¦ º¯°æÇÏ·Á°í ÇÔ. echo "var2 ¸¦ ºÎµ¿Çü °ªÀÎ 2367.1·Î º¯°æÇÏ·Á°í ÇÔ." var2=2367.1 # º¯¼ö°ªÀº ¹Ù²îÁö ¾Ê°í ¿¡·¯ ¸Þ¼¼Áö¸¸ ³ª¿È. echo "var2 ´Â ¿©ÀüÈ÷ $var2 ÀÔ´Ï´Ù." exit 0 |
¾î´À º¯¼ö°ªÀÌ µÚ¿¡ ³ª¿Ã º¯¼öÀÇ À̸§À̶ó°í °¡Á¤Çغ¾½Ã´Ù. ±×·¸´Ù¸é ±× º¯¼ö·Î µÚ¿¡ ³ª¿Ã º¯¼öÀÇ °ªÀ» ¾Ë¾Æ³¾ ¼ö ÀÖÀ»±î¿ä? ¿¹¸¦ µé¸é a=letter_of_alphabetÀ̰í letter_of_alphabet=z¶ó°í ÇÒ ¶§ a¸¦ ÂüÁ¶Çϸé z °¡ ³ª¿Ã±î¿ä? ÀÌ´Â ¿ì¸® »ý°¢´ë·Î µ¿ÀÛÇϰí À̸¦ °£Á¢ ÂüÁ¶¶ó°í ºÎ¸¨´Ï´Ù. eval var1=\$$var2ó·³ ¾à°£Àº ÀÌ»óÇÏ°Ô »ý±ä ÇüÅ·Π½á¸ÔÀ» ¼ö ÀÖ½À´Ï´Ù.
예 3-24. °£Á¢ ÂüÁ¶
#!/bin/bash # º¯¼ö °£Á¢ ÂüÁ¶. a=letter_of_alphabet letter_of_alphabet=z # Á÷Á¢ ÂüÁ¶. echo "a = $a" # °£Á¢ ÂüÁ¶. eval a=\$$a echo "Now a = $a" echo # ÀÚ, ÀÌÁ¦ °£Á¢ ÂüÁ¶°ªÀ» ¹Ù²ãº¾½Ã´Ù. t=table_cell_3 table_cell_3=24 eval t=\$$t echo "t = $t" # ¾ÆÁ÷Àº ±¦ÂúÁÒ. table_cell_3=387 eval t=\$$t echo "tÀÇ °ªÀÌ $t ·Î ¹Ù²î¾ú½À´Ï´Ù." # ERROR! # ÀÌ·± ½ÄÀ¸·Î °£Á¢ ÂüÁ¶µÇ´Â º¯¼öÀÇ °ªÀ» ¹Ù²Ü ¼ö´Â ¾ø½À´Ï´Ù. # ÀÌ·¸°Ô ÇÏ·Á¸é ${!t} Ç¥±â¹ýÀ» ½á¾ß ÇÕ´Ï´Ù. exit 0 |
경고 |
ÀÌ·± ½ÄÀÇ °£Á¢ ÂüÁ¶¿¡´Â ¾àÁ¡ÀÌ Çϳª Àִµ¥ ¸¸¾à¿¡ µÎ¹øÂ° º¯¼ö°ªÀÌ º¯°æµÈ´Ù¸é ù¹øÂ° º¯¼öÀÇ °£Á¢ ÂüÁ¶´Â ¿¡·¯¸¦ ¹ß»ý½Ãŵ´Ï´Ù. ´ÙÇེ·´°Ôµµ ÀÌ ¹®Á¦´Â Bash ¹öÀü 2¿¡¼ ${!variable} °°Àº »õ·Î¿î Ç¥½Ã¹ýÀ¸·Î ÇØ°áµÆ½À´Ï´Ù(예 3-102 Âü°í). |
참고: $RANDOM Àº Bash ³»ºÎ ÇÔ¼ö·Î(»ó¼ö°¡ ¾Æ´Õ´Ï´Ù) 0¿¡¼ 32767»çÀÌÀÇ °¡»óÀÇ ¹«ÀÛÀ§ Á¤¼ö °ªÀ» ¸®ÅÏÇÕ´Ï´Ù. $RANDOM Àº ¾ÏÈ£È Å°¸¦ ¹ß»ý½Ã۴µ¥ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù.
예 3-25. ¹«ÀÛÀ§ ¼ýÀÚ ¸¸µé±â
#!/bin/bash # $RANDOM Àº ºÒ¸± ¶§¸¶´Ù ´Ù¸¥ ¹«ÀÛÀ§ °ªÀ» ¸®ÅÏÇÕ´Ï´Ù. # ¸íĪ»óÀÇ ¹üÀ§: 0 - 32767 (¾çÀÇ Á¤¼ö). MAXCOUNT=10 count=1 echo echo "$MAXCOUNT °³ÀÇ ¹«ÀÛÀ§ °ª:" echo "-----------------" while [ $count -le $MAXCOUNT ] # 10 ($MAXCOUNT) ¹«ÀÛÀ§ Á¤¼ö¸¦ ¹ß»ý. do number=$RANDOM echo $number let "count += 1" # Ä«¿îÅÍ Áõ°¡. done echo "-----------------" # ¾î¶² ¼ö º¸´Ù ÀÛÀº ¹«ÀÛÀ§ Á¤¼ö°¡ ÇÊ¿äÇÏ´Ù¸é # '³ª¸ÓÁö(modulo)' ¿¬»êÀÚ¸¦ ¾²¸é µË´Ï´Ù. RANGE=500 echo number=$RANDOM let "number %= $RANGE" echo "$RANGE º¸´Ù ÀÛÀº ¹«ÀÛÀ§ ¼ýÀÚ --> $number" echo # ƯÁ¤ÇÑ ÇÏÇѰªº¸´Ù Å« ¹«ÀÛÀ§ Á¤¼ö°¡ ÇÊ¿äÇÏ¸é ±× ÇÏÇѰªº¸´Ù ÀÛÀº ¼ö´Â # ¹«½ÃÇÏ´Â test ¹®À» °É¸é µË´Ï´Ù. FLOOR=200 number=0 # ÃʱâÈ while [ $number -le $FLOOR ] do number=$RANDOM done echo "$FLOOR º¸´Ù Å« ¹«ÀÛÀ§ ¼ýÀÚ --> $number" echo # »óÇѰª°ú ÇÏÇѰª »çÀÌÀÇ ¼ö°¡ ÇÊ¿äÇÏ´Ù¸é À§ÀÇ µÎ Å×Å©´ÐÀ» °°ÀÌ ¾²¸é µË´Ï´Ù. number=0 # ÃʱâÈ while [ $number -le $FLOOR ] do number=$RANDOM let "number %= $RANGE" done echo "$FLOOR °ú $RANGE »çÀÌÀÇ ¹«ÀÛÀ§ ¼ýÀÚ --> $number" echo # "Âü"À̳ª "°ÅÁþ"Áß¿¡ Çϳª¸¦ °í¸£µµ·Ï ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. BINARY=2 number=$RANDOM let "number %= $BINARY" if [ $number -eq 1 ] then echo "Âü" else echo "°ÅÁþ" fi echo # ÁÖ»çÀ§ ´øÁö±â¸¦ Èä³»³» º¼±î¿ä? SPOTS=7 DICE=2 die1=0 die2=0 # Á¤È®ÇÑ È®·üÀ» À§Çؼ µÎ °³ÀÇ ÁÖ»çÀ§¸¦ µû·Î µû·Î ´øÁý½Ã´Ù. while [ $die1 -eq 0 ] # ÁÖ»çÀ§¿¡ 0Àº ¾øÁÒ. do let "die1 = $RANDOM % $SPOTS" done while [ $die2 -eq 0 ] do let "die2 = $RANDOM % $SPOTS" done let "throw = $die1 + $die2" echo "µÎ ÁÖ»çÀ§¸¦ ´øÁø °á°ú = $throw" echo exit 0 |
[1] | "¾Æ±Ô¸ÕÆ®(argument)"³ª "ÆÄ¶ó¹ÌÅÍ(parameter)"´Â ÈçÈ÷ ¼·Î ¹Ù²ã°¡¸é¼ ¾²À̱⠶§¹®¿¡ ÀÌ ¹®¼¿¡¼´Â ½ºÅ©¸³Æ®³ª ÇÔ¼ö¿¡ ³Ñ°ÜÁö´Â º¯¼ö¸¦ ³ªÅ¸³»´Â ¿ë¾î·Î °°ÀÌ »ç¿ëÇϰڽÀ´Ï´Ù(¿Å±äÀÌ: ¸ðµÎ "ÀÎÀÚ"¶ó°í ¹ø¿ªÇÕ´Ï´Ù). |