½© ½ºÅ©¸³Æ®¿¡¼ ¾²À̴ Ư¼ö ¹®ÀÚµé
ÁÖ¼®. #À¸·Î ½ÃÀÛÇÏ´Â ÁÙ(#!¸¸ »©°í)Àº ÁÖ¼®ÀÔ´Ï´Ù.
# ÀÌ ÁÙÀº ÁÖ¼®ÀÔ´Ï´Ù. |
¸í·É¾î ³¡¿¡ ÁÖ¼®ÀÌ ³ª¿Ã ¼öµµ ÀÖ½À´Ï´Ù.
echo "µÚ¿¡ ÁÖ¼®ÀÌ ³ª¿É´Ï´Ù." # ÁÖ¼®ÀÌ ¿©±â¿¡. |
Á٠ùºÎºÐ¿¡ ³ª¿À´Â °ø¹é¹®ÀÚµÚ¿¡µµ ÁÖ¼®À» ¾µ ¼ö ÀÖ½À´Ï´Ù.
# ÀÌ ÁÖ¼® ¾Õ¿¡ ÅÇÀÌ ÀÖ½À´Ï´Ù. |
°æ°í |
ÇÑ ÁÙ¿¡¼ ÁÖ¼®µÚ¿¡ ¸í·É¾î°¡ ¿Ã ¼ö´Â ¾ø½À´Ï´Ù. ÁÖ¼®°ú "½ÇÁ¦ ÄÚµå"¸¦ ±¸ºÐÇÒ ¹æ¹ýÀÌ ¾ø±â ¶§¹®¿¡ ´Ù¸¥ ¸í·É¾î´Â »õ·Î¿î ÁÙ¿¡ ¾²¼¼¿ä. |
Âü°í: ´ç¿¬ÇÑ À̾߱âÁö¸¸, echo ¹®¿¡¼ À̽ºÄÉÀÌÇÁµÈ #Àº ÁÖ¼®ÀÇ ½ÃÀÛÀ» ³ªÅ¸³»Áö ¾Ê½À´Ï´Ù. ºñ½ÁÇÏ°Ô ¸î¸î ¸Å°³º¯¼ö ġȯÀ̳ª »ê¼ú »ó¼ö È®Àå¿¡ ³ª¿À´Â #µµ ÁÖ¼®À» ³ªÅ¸³»Áö ¾Ê½À´Ï´Ù.
Ç¥ÁØ Äõ¿ìÆÃ(quoting)°ú À̽ºÄÉÀÌÇÁ(escape) ¹®ÀÚµéÀÎ (" ' \) µéÀº # À» À̽ºÄÉÀÌÇÁ ½Ãų ¼ö ÀÖ½À´Ï´Ù.
echo "ÀÌ # Àº ÁÖ¼®ÀÇ ½ÃÀÛÀÌ ¾Æ´Õ´Ï´Ù." echo 'ÀÌ # Àº ÁÖ¼®ÀÇ ½ÃÀÛÀÌ ¾Æ´Õ´Ï´Ù.' echo ÀÌ \# Àº ÁÖ¼®ÀÇ ½ÃÀÛÀÌ ¾Æ´Õ´Ï´Ù. echo ÀÌ # Àº ÁÖ¼®ÀÇ ½ÃÀÛÀ» ³ªÅ¸³À´Ï´Ù. echo ${PATH#*:} # ¸Å°³º¯¼ö ġȯÀ¸·Î, ÁÖ¼®ÀÌ ¾Æ´ÏÁÒ. echo $(( 2#101011 )) # Áø¹ý º¯È¯, ÁÖ¼®ÀÌ ¾Æ´Õ´Ï´Ù. # Thanks, S.C.
¸î¸î ÆÐÅÏ ¸ÅĪ ¿¬»êÀÚµµ #À» »ç¿ëÇÕ´Ï´Ù.
¸í·É¾î ±¸ºÐÀÚ. [¼¼¹ÌÄÝ·Ð] µÎ °³ ÀÌ»óÀÇ ¸í·É¾î¸¦ ÇÑ ÁÙ¿¡¼ °°ÀÌ ¾µ ¼ö ÀÖ°Ô ÇØÁÝ´Ï´Ù.
echo hello; echo there |
";"´Â °¡²û À̽ºÄÉÀÌÇÁ ½Ãų ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù.
case ¿É¼Ç Á¾·áÀÚ. [ÀÌÁß ¼¼¹ÌÄÝ·Ð]
case "$variable" in abc) echo "$variable = abc" ;; xyz) echo "$variable = xyz" ;; esac |
"Á¡"(dot) ¸í·É¾î. [¸¶Ä§Ç¥] source ¸í·É¾î¿Í µ¿ÀÏÇÕ´Ï´Ù(¿¹ 11-14 Âü°í). ÀÌ ¸í·É¾î´Â bash ³»Àå ¸í·É(builtin)ÀÔ´Ï´Ù.
"Á¡"(dot)ÀÌ Á¤±Ô Ç¥Çö½Ä(reqular expression)À¸·Î Çؼ®µÉ ¶§´Â, ÇÑ °³ÀÇ ¹®ÀÚ¿Í ÀÏÄ¡µË´Ï´Ù.
¶Ç´Ù¸¥ ¹®¸Æ¿¡¼´Â ±×³É ls ¶ó°í ÃÆÀ» ¶§, º¸ÀÌÁö ¾Ê´Â "¼û±è" ÆÄÀÏÀ» ³ªÅ¸³»´Â ÆÄÀϸí Á¢µÎ¾î·Îµµ ¾²ÀÔ´Ï´Ù.
bash$ touch .hidden-file bash$ ls -l total 10 -rw-r--r-- 1 bozo 4034 Jul 18 22:04 data1.addressbook -rw-r--r-- 1 bozo 4602 May 25 13:58 data1.addressbook.bak -rw-r--r-- 1 bozo 877 Dec 17 2000 employment.addressbook bash$ ls -al total 14 drwxrwxr-x 2 bozo bozo 1024 Aug 29 20:54 ./ drwx------ 52 bozo bozo 3072 Aug 29 20:51 ../ -rw-r--r-- 1 bozo bozo 4034 Jul 18 22:04 data1.addressbook -rw-r--r-- 1 bozo bozo 4602 May 25 13:58 data1.addressbook.bak -rw-r--r-- 1 bozo bozo 877 Dec 17 2000 employment.addressbook -rw-rw-r-- 1 bozo bozo 0 Aug 29 20:54 .hidden-file |
ºÎºÐ Äõ¿ìÆÃ(partial quoting). [ÀÌÁß Äõ¿ìÆ®] "¹®ÀÚ¿" À̶ó°í ÇÏ¸é ½©ÀÌ ¹®ÀÚ¿¿¡ µé¾î ÀÖ´Â °ÅÀÇ ´ëºÎºÐÀÇ Æ¯¼ö ¹®ÀÚ¸¦ Çؼ®ÇÏÁö ¸øÇϵµ·Ï ¸·¾ÆÁÝ´Ï´Ù. 6ÀåÀ» Âü°íÇϼ¼¿ä.
¿ÏÀü Äõ¿ìÆÃ(full quoting). [´ÜÀÏ Äõ¿ìÆ®] '¹®ÀÚ¿' À̶ó°í ÇÏ¸é ½©ÀÌ ¹®ÀÚ¿¿¡ µé¾î ÀÖ´Â ¸ðµç Ư¼ö ¹®ÀÚ¸¦ Çؼ®ÇÏÁö ¸øÇϵµ·Ï ¸·¾ÆÁÝ´Ï´Ù. "º¸´Ù ´õ °ÇÑ ÇüÅÂÀÇ Äõ¿ìÆÃÀÔ´Ï´Ù. 6ÀåÀ» Âü°íÇϼ¼¿ä.
ÄÞ¸¶ ¿¬»êÀÚ. ÄÞ¸¶ ¿¬»êÀÚ ´Â ¿¬¼ÓÀûÀÎ »ê¼ú ¿¬»êÀ» ÇÏ·Á°í ÇÒ ¶§ ¾²ÀÔ´Ï´Ù. ¸ðµç °è»êÀÌ ÀÌ·ç¾îÁøµÚ, ¸¶Áö¸·¿¡ °è»êµÈ °á°ú¸¸ ¸®Åϵ˴ϴÙ.
let "t2 = ((a = 9, 15 / 3))" # "a"¸¦ ¼¼Æ®ÇÏ°í "t2"¸¦ °è»ê. |
À̽ºÄÉÀÌÇÁ(escape). [¿ª½½·¡½¬] \X¶ó°í Çϸé X ¹®ÀÚ¸¦ "À̽ºÄÉÀÌÇÁ" ½ÃÅ°°í, 'X' ¶ó°í "Äõ¿ìÆÃ" ½ÃÅ°´Â °Í°ú µ¿ÀÏÇÑ È¿°ú¸¦ °®½À´Ï´Ù. \´Â "³ª 'ÀÌ ¹®ÀÚ ±×´ë·Î Çؼ®µÇµµ·Ï Äõ¿ìÆ® ÇÒ ¶§ ¾²ÀÏ ¼öµµ ÀÖ½À´Ï´Ù.
À̽ºÄÉÀÌÇÁµÈ ¹®Àڵ鿡 ´ëÇÑ ¼³¸íÀÌ 6Àå¿¡ ÀÚ¼¼ÇÏ°Ô µÇ¾î ÀÖ½À´Ï´Ù.
ÆÄÀÏ¸í °æ·Î ±¸ºÐÀÚ. [½½·¡½¬] ÆÄÀÏ¸í¿¡ µîÀåÇÏ´Â °¢ ¿ä¼ÒµéÀ» ±¸ºÐÇØ ÁÝ´Ï´Ù(/home/bozo/projects/Makefile ó·³).
³ª´©±â »ê¼ú ¿¬»êÀÚµµ µË´Ï´Ù.
¸í·É¾î ġȯ(command substitution). [¹éƽ(backticks)] `¸í·É¾î` ¶ó°í ÇÏ¸é ¸í·É¾îÀÇ °á°ú¸¦ º¯¼ö°ªÀ¸·Î ¼³Á¤ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ´Ù¸¥ ¸»·Î backticks³ª ¿ªÄõ¿ìÆ®(backquote)¶ó°íµµ ÇÕ´Ï´Ù.
³Î ¸í·É¾î(null command). ½©ÀÇ "NOP"(no op, ¾Æ¹« µ¿ÀÛµµ ¾ÊÇÔ)¿¡ ÇØ´çÇÕ´Ï´Ù. ½© ³»Àå ¸í·ÉÀÎ trueÀÇ µ¿ÀǾî¶ó°íµµ º¼ ¼ö ÀÖ½À´Ï´Ù. ÁÖÀÇÇÒ Á¡Àº :Àº bash ³»Àå ¸í·ÉÀ̱⠶§¹®¿¡ Á¾·á »óÅ´ 0À̶ó´Â °ÍÀÔ´Ï´Ù.
: echo $? # 0 |
¹«ÇÑ ·çÇÁ:
while : do ù¹ø° ¿¬»ê µÎ¹ø° ¿¬»ê ... n¹ø° ¿¬»ê done # ÀÌ´Â ´ÙÀ½°ú °°½À´Ï´Ù: # while true # do # ... # done |
if/then Å×½ºÆ® ¹®ÀÇ Placeholder:
if condition then : # ¾Æ¹«°Íµµ ¾È ÇÏ°í °è¼Ó ÁøÇà else ¾î¶² ÀÛ¾÷ fi |
ÀÌÁø ¿¬»êÀÇ placeholder Á¦°ø, ¿¹ 8-1 ¿Í µðÆúÆ® ¸Å°³º¯¼ö Âü°í.
: ${username=`whoami`} # "username"ÀÌ ¸í·É¾î³ª ³»Àå ¸í·É¾î°¡ ¾Æ´Ñ °æ¿ì¿¡ # ${username=`whoami`} ¿¡ : ¾øÀÌ ¾²¸é ¿¡·¯°¡ ³³´Ï´Ù. |
here document°¡ ³ª¿Ã °÷ÀÇ placeholder¸¦ Á¦°ø. ¿¹ 17-8 Âü°í.
¸Å°³º¯¼ö ġȯÀ» ½á¼ º¯¼öÀÇ ¹®ÀÚ¿ Æò°¡(¿¹ 9-10 Âü°í).
: ${HOSTNAME?} ${USER?} ${MAIL?} # ÇʼöÀûÀΠȯ°æº¯¼öÁß Çϳª¶óµµ ¼¼Æ®°¡ ¾È µÅ ÀÖ´Ù¸é ¿¡·¯¸¦ Ãâ·Â. |
º¯¼ö È®Àå/¹®ÀÚ¿ Á¶°¢ ´ëÄ¡(Variable expansion / substring replacement).
ÀçÁöÇâ ¿¬»êÀÚÀÎ >°ú °°ÀÌ ½á¼ ƯÁ¤ ÆÄÀÏÀÇ ÆÛ¹Ì¼Ç º¯°æ ¾øÀÌ Å©±â¸¦ 0À¸·Î ¸¸µé¾î ÁÝ´Ï´Ù. ÆÄÀÏÀÌ ¾ø¾ú´Ù¸é »õ·Î ¸¸µé¾î ³À´Ï´Ù.
: > data.xxx # "data.xxx"Àº ÀÌÁ¦ ºó ÆÄÀÏÀÔ´Ï´Ù. # cat /dev/null >data.xxx ¶ó°í ÇÑ °Í°ú µ¿ÀÏÇÏÁö¸¸ # ":"°¡ ³»Àå ¸í·É¾îÀ̱⠶§¹®¿¡ »õ ÇÁ·Î¼¼½º¸¦ Æ÷Å©(fork) ½ÃÅ°Áö ¾Ê½À´Ï´Ù. |
¿ª½Ã ÀçÁöÇâ ¿¬»êÀÚÀÎ >>°ú °°ÀÌ ¾²¸é ÆÄÀÏÀÇ ¾ï¼¼½º/º¯°æ ½Ã°£À» ¾÷µ¥ÀÌÆ® ÇØ ÁÝ´Ï´Ù(: >> new_file). ÆÄÀÏÀÌ ¾ø¾ú´Ù¸é »õ·Î ¸¸µé¾î ³À´Ï´Ù. touch¿Í °°½À´Ï´Ù.
Âü°í: º¸Åë ÆÄÀÏ¿¡¸¸ »ç¿ëÇÏ°í ÆÄÀÌÇÁ³ª ½Éº¼¸¯ ¸µÅ©, Ư¼ö ÆÄÀÏ¿¡´Â »ç¿ëÇÏÁö ¸¶¼¼¿ä.
±ÇÀåÇÏ´Â ¹æ¹ýÀº ¾Æ´Õ´Ï´Ù¸¸, ÁÖ¼®ÀÇ ½ÃÀÛÀ» ³ªÅ¸³¾ ¶§ ¾µ ¼öµµ ÀÖ½À´Ï´Ù. ÁÖ¼®¿¡ #À» ¾²°Ô µÇ¸é ±× ÁÙÀÇ ³ª¸ÓÁö ºÎºÐ¿¡ ´ëÇؼ ¿¡·¯ È®ÀÎÀ» ¾È Çϱ⠶§¹®¿¡ ¾î¶² ¹®Àåµµ ¿Ã ¼ö ÀÖÁö¸¸ :ÀÇ °æ¿ì´Â ´Ù¸¨´Ï´Ù.
: ÀÌ ÁÖ¼®Àº ¿¡·¯¸¦ ¹ß»ý½Ãŵ´Ï´Ù, ( if [ $x -eq 3] ). |
":"´Â ¶ÇÇÑ /etc/passwd¿Í $PATH º¯¼ö¿¡¼ ÇÊµå ±¸ºÐÀڷεµ ¾²ÀÔ´Ï´Ù.
bash$ echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/sbin:/usr/sbin:/usr/games |
Å×½ºÆ®³ª Á¾·á »óÅÂÀÇ Àǹ̸¦ ¹Ý´ë³ª ºÎÁ¤ÇØ ÁÝ´Ï´Ù. ! ¿¬»êÀÚ´Â ÇØ´ç ¸í·É¾îÀÇ Á¾·á »óŸ¦ ¹Ý´ë·Î ÇØ ³õ½À´Ï´Ù(¿¹ 3-2 Âü°í). ¶ÇÇÑ, Å×½ºÆ® ¿¬»êÀÚÀÇ Àǹ̵µ °Å²Ù·Î ¹Ù²ã Áִµ¥ ¿¹¸¦ µé¾î, "equal"( = )À» "not-equal" ( != )·Î Çؼ®ÇÏ°Ô ÇØ ÁÝ´Ï´Ù. ! ¿¬»êÀÚ´Â bash Å°¿öµåÀÔ´Ï´Ù.
´Ù¸¥ »óȲ¿¡¼´Â °£Á¢ º¯¼ö ÂüÁ¶ÀÇ Àǹ̷εµ ¾²ÀÔ´Ï´Ù.
¿ÍÀϵå Ä«µå. [º°Ç¥] * ¹®ÀÚ´Â Á¤±Ô Ç¥Çö½Ä¿¡¼ 0°³ ÀÌ»óÀÇ ¹®ÀÚ¸¦ ³ªÅ¸³»´Â °Í°ú µ¿ÀÏÇÏ°Ô ÆÄÀϸí È®Àå(globbing)¿¡¼ "¿ÍÀϵå Ä«µå"ó·³ ¾²ÀÔ´Ï´Ù.
ÀÌÁß º°Ç¥, **, ´Â ¼öÇÐÀÇ ´©½Â(Òéã«, exponentiation) ¿¬»êÀÚÀÔ´Ï´Ù.
¿ÍÀϵå Ä«µå(ÇϳªÀÇ ¹®ÀÚ). [¹°À½Ç¥] ? ¹®ÀÚ´Â È®Àå Á¤±Ô Ç¥Çö½Ä¿¡¼ ÇÑ ¹®ÀÚ¸¦ ³ªÅ¸³»´Â °Í°ú ¸¶Âù°¡Áö·Î ±Û·Îºù(globbing)¿¡¼ ÆÄÀϸí È®ÀåÀ» ³ªÅ¸³»´Â ÇÑ ¹®ÀÚÂ¥¸® "¿ÍÀϵå Ä«µå"ÀÇ ¿ªÇÒÀ» ÇÕ´Ï´Ù.
?Àº ÀÌÁß ¼Ò°ýÈ£¿¡¼ C ½ºÅ¸ÀÏÀÇ »ïÁß ¿¬»êÀڷεµ ¾²ÀÔ´Ï´Ù. ¿¹ 9-22¸¦ Âü°íÇϼ¼¿ä.
var1=5 var2=23skidoo echo $var1 # 5 echo $var2 # 23skidoo |
$Àº Á¤±Ô Ç¥Çö½Ä¿¡¼ ÁÙÀÇ ³¡À» ³ªÅ¸³À´Ï´Ù.
¸í·É¾î ±×·ì.
(a=hello; echo $a) |
Áß¿ä: ¼Ò°ýÈ£·Î ¹ÀÎ ¸í·É¾îµéÀº ¼ºê½©¿¡¼ µ¿ÀÛÇÕ´Ï´Ù.
½ºÅ©¸³Æ®ÀÇ ´Ù¸¥ °÷¿¡¼´Â ¼Ò°ýÈ£ ¾ÈÀÇ ¼ºê½©¿¡ µé¾î ÀÖ´Â º¯¼öµéÀ» º¼ ¼ö°¡ ¾ø½À´Ï´Ù. ºÎ¸ð ÇÁ·Î¼¼½ºÀÎ ½ºÅ©¸³Æ®´Â ÀÚ½Ä ÇÁ·Î¼¼½º(¼ºê½©)¿¡¼ ¸¸µé¾îÁø º¯¼ö¸¦ ÀÐÀ» ¼ö°¡ ¾ø½À´Ï´Ù.
a=123 ( a=321; ) echo "a = $a" # a = 123 # ¼Ò°ýÈ£ ¾ÈÀÇ "a" ´Â Áö¿ªº¯¼öó·³ µ¿ÀÛÇÕ´Ï´Ù.
¹è¿ ÃʱâÈ.
Array=(element1 element2 element3) |
Áß°ýÈ£ È®Àå.
grep Linux file*.{txt,htm*} # "fileA.txt", "file2.txt", "fileR.html", "file-87.htm" µîµîÀÇ ÆÄÀÏ¿¡¼ # "Linux"°¡ µé¾î ÀÖ´Â °ÍÀ» ¸ðµÎ ãÀ½ |
¸í·É¾î´Â Áß°ýÈ£¾ÈÀÇ ÄÞ¸¶·Î ºÐ¸® ÁöÁ¤µÈ ÆÄÀÏ ½ºÆå¿¡ ¸Â°Ô µ¿ÀÛÇÒ °ÍÀÔ´Ï´Ù. [1] ÆÄÀϸí È®Àå(globbing)Àº Áß°ýÈ£ ¾È¿¡¼ ÁöÁ¤µÈ ÆÄÀÏ ½ºÆå¿¡ Àû¿ëµË´Ï´Ù.
°æ°í |
ºó ÄÀº Äõ¿ìÆ®(quote)³ª À̽ºÄÉÀÌÇÁ(escape)µÇÁö ¾Ê°í Áß°ýÈ£¿¡¼ ¾²ÀÏ ¼ö ¾ø½À´Ï´Ù. echo {file1,file2}\ :{\ A," B",' C'} file1 : A file1 : B file1 : C file2 : A file2 : B file2 : C |
ÄÚµå ºí·°. [Áß°ýÈ£] "ÀζóÀÎ ±×·ì"À̶ó°íµµ ºÎ¸£´Â Áß°ýÈ£ ÇÑ ½ÖÀº ½ÇÁ¦·Î À͸íÀÇ ÇÔ¼ö¸¦ ¸¸µé¾î ³À´Ï´Ù¸¸ º¸ÅëÀÇ ÇÔ¼ö¿Í´Â ´Þ¸® ÄÚµå ºí·° ¾ÈÀÇ º¯¼öµéÀ» ½ºÅ©¸³Æ®ÀÇ ´Ù¸¥ °÷¿¡¼ º¼ ¼ö°¡ ÀÖ½À´Ï´Ù.
bash$ { local a; a=123; } bash: local: can only be used in a function |
a=123 { a=321; } echo "a = $a" # a = 321 (ÄÚµå ºí·°¿¡¼ ¼³Á¤µÈ °ª) # Thanks, S.C. |
Áß°ýÈ£·Î ¹ÀÎ ÄÚµå ºí·°Àº I/O ÀçÁöÇâµÇ°Å³ª ÀçÁöÇâÀ» ¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù.
¿¹ 4-1. ÄÚµå ºí·°°ú I/O ÀçÁöÇâ
#!/bin/bash # /etc/fstab Àбâ File=/etc/fstab { read line1 read line2 } < $File echo "$File ÆÄÀÏÀÇ Ã¹¹ø° ÁÙ:" echo "$line1" echo echo "$File ÆÄÀÏÀÇ µÎ¹ø° ÁÙ:" echo "$line2" exit 0 |
¿¹ 4-2. ÄÚµå ºí·°ÀÇ °á°ú¸¦ ÆÄÀÏ·Î ÀúÀåÇϱâ
#!/bin/bash # rpm-check.sh # rpm ÆÄÀÏ¿¡ ´ëÇؼ ¼³Ä¡°¡´É¿©ºÎ, ¼³Ä¡Á¤º¸, ¼³Ä¡¸ñ·Ï¿¡ ´ëÇؼ Äõ¸®¸¦ ÇÏ°í, #+ ±× °á°ú¸¦ ÆÄÀÏ·Î ÀúÀåÇÕ´Ï´Ù. # # ÀÌ ½ºÅ©¸³Æ®´Â ÄÚµå ºí·°ÀÌ ¾î¶»°Ô ¾²ÀÌ´ÂÁö º¸¿©ÁÝ´Ï´Ù. SUCCESS=0 E_NOARGS=65 if [ -z "$1" ] then echo "»ç¿ë¹ý: `basename $0` rpm-file" exit $E_NOARGS fi { echo echo "¾ÆÄ«À̺ê Á¤º¸:" rpm -qpi $1 # ¼³Ä¡Á¤º¸ Äõ¸®. echo echo "¾ÆÄ«ÀÌºê ¸ñ·Ï:" rpm -qpl $1 # ¼³Ä¡¸ñ·Ï Äõ¸®. echo rpm -i --test $1 # ¼³Ä¡°¡´É¿©ºÎ Äõ¸®. if [ "$?" -eq $SUCCESS ] then echo "$1 ´Â ¼³Ä¡µÉ ¼ö ÀÖ½À´Ï´Ù." else echo "$1 ´Â ¼³Ä¡µÉ ¼ö ¾ø½À´Ï´Ù." fi echo } > "$1.test" # ºí·°ÀÇ ¸ðµç Ãâ·ÂÀ» ÆÄÀÏ·Î ÀçÁöÇâ. echo "$1.test ÆÄÀÏ¿¡ rpm Å×½ºÆ®ÀÇ °á°ú°¡ ÀúÀåµÇ¾ú½À´Ï´Ù." # ¿©±â¼ ¾²ÀÎ ¿É¼Ç¿¡ ´ëÇÑ ¼³¸íÀº ¸Ç ÆäÀÌÁö¸¦ Âü°íÇϼ¼¿ä. exit 0 |
Âü°í: ";" ´Â find ¸í·É¾îÀÇ -exec ¿É¼ÇÀÌ ¿©·¯°³ ³ª¿Ã ¶§ ³¡À» ³ªÅ¸³»±â ¶§¹®¿¡ ½©ÀÌ Çؼ®ÇÏ´Â °ÍÀ» ¸·±â À§Çؼ À̽ºÄÉÀÌÇÁ ½ÃÄÑÁà¾ß µË´Ï´Ù.
Å×½ºÆ®.
[ ] »çÀÌÀÇ Å×½ºÆ®¹®. [´Â ½© ³»Àå ¸í·ÉÀÎ test¿Í µ¿ÀǾî·Î¼, ¿ÜºÎ ¸í·É¾îÀÎ /usr/bin/testÀÇ ¸µÅ©°¡ ¾Æ´Õ´Ï´Ù.
Å×½ºÆ®.
[[ ]] »çÀÌÀÇ Å×½ºÆ®¹®(½© Å°¿öµå).
´õ ÀÚ¼¼ÇÑ »çÇ×Àº [[ ... ]]À» Âü°íÇϼ¼¿ä.
Á¤¼ö È®Àå.
(( ))¿¡ µé¾î ÀÖ´Â Á¤¼ö Ç¥Çö½ÄÀ» È®ÀåÇÏ°í Æò°¡ÇØ ÁÝ´Ï´Ù.
´õ ÀÚ¼¼ÇÑ ¼³¸íÀº (( ... ))¸¦ Âü°íÇϼ¼¿ä.
scriptname >filename Àº scriptnameÀÇ °á°ú¸¦ filenameÀ¸·Î ÀçÁöÇâ½Ãŵ´Ï´Ù. ÀÌ ¶§, fielnameÀÌ ÀÌ¹Ì ÀÖ´Ù¸é µ¤¾î ½áÁý´Ï´Ù.
command >&2´Â commandÀÇ °á°ú¸¦ Ç¥ÁØ¿¡·¯·Î ÀçÁöÇâ ½Ãŵ´Ï´Ù.
scriptname >>filenameÀº scriptnameÀÇ °á°ú¸¦ filename À¸·Î µ¡ºÙÀÔ´Ï´Ù. ÀÌ ¶§, filenameÀÌ ¾ø´Ù¸é »õ·Î ¸¸µì´Ï´Ù.
ÇÁ·Î¼¼½º ġȯ(process substitution).
(command)>
<(command)
"<" ¿Í ">" ¹®ÀÚ´Â ´Ù¸¥ ¹®¸Æ¿¡¼ ¹®ÀÚ¿ ºñ±³ ¿¬»êÀÚ·Î µ¿ÀÛÇÕ´Ï´Ù.
¶Ç ´Ù¸¥ ¹®¸Æ¿¡¼´Â Á¤¼ö ºñ±³ ¿¬»êÀÚ·Î µ¿ÀÛÇÕ´Ï´Ù. ¿¹ 12-6¸¦ Âü°íÇϼ¼¿ä.
here document¿¡¼ ¾²ÀÌ´Â ÀçÁöÇâ.
ÆÄÀÌÇÁ. ¿©·¯ ¸í·É¾îµéÀ» ¿¬°áÇÏ´Â ¹æ¹ýÀ¸·Î½á, ÇÑ ¸í·É¾îÀÇ Ãâ·ÂÀ» ´ÙÀ½ ¸í·É¾î³ª ½©¿¡°Ô Àü´Þ.
echo ls -l | sh # "echo ls -l" ÀÇ Ãâ·ÂÀ» ½©¿¡°Ô Àü´ÞÇϴµ¥, #+ ±×³É "ls -l" ¶ó°í ÇÑ °Í°ú ¶È°°½À´Ï´Ù. cat *.lst | sort | uniq # ¸ðµç ".lst" ÆÄÀϵéÀ» ÇÕÄ£ ´ÙÀ½ Á¤·ÄÇÏ°í Áߺ¹µÈ ÁÙµéÀ» Áö¿ó´Ï´Ù. |
¸í·É¾îÀÇ Ãâ·ÂÀ̳ª ¸í·É¾î ÀÚü¸¦ ½ºÅ©¸³Æ®·Î ÆÄÀÌÇÁ¸¦ °É ¼öµµ ÀÖ½À´Ï´Ù.
#!/bin/bash # uppercase.sh : ÀÔ·ÂÀ» ´ë¹®ÀÚ·Î ¹Ù²ãÁÜ. tr 'a-z' 'A-Z' # ÇÑ ±ÛÀÚÂ¥¸® ÆÄÀÏ À̸§ÀÌ »ý±â´Â °É ¸·±â À§Çؼ #+ ¹®ÀÚ ¹üÀ§´Â ²À Äõ¿ìÆ® ½ÃÄÑ¾ß ÇÕ´Ï´Ù. exit 0 |
bash$ ls -l | ./uppercase.sh -RW-RW-R-- 1 BOZO BOZO 109 APR 7 19:49 1.TXT -RW-RW-R-- 1 BOZO BOZO 109 APR 14 16:48 2.TXT -RW-R--R-- 1 BOZO BOZO 725 APR 20 20:56 DATA-FILE |
Âü°í: ÆÄÀÌÇÁ·Î ¹ÀÎ °¢ ÇÁ·Î¼¼½ºÀÇ Ç¥ÁØÃâ·ÂÀº ´ÙÀ½ ¸í·É¾îÀÇ Ç¥ÁØÀÔ·ÂÀ¸·Î ÀÐÇô¾ß ÇÕ´Ï´Ù. ÀÌ·±½ÄÀ¸·Î µ¿ÀÛÇÏÁö ¾Ê´Â´Ù¸é µ¥ÀÌŸÀÇ È帧Àº ºí·°µÉ °ÍÀÌ°í ÆÄÀÌÇÁ´Â »ý°¢Çß´ø´ë·Î µ¿ÀÛÇÏÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù.
cat file1 file2 | ls -l | sort # "cat file1 file2" ÀÇ Ãâ·ÂÀº ³ªÅ¸³ªÁö ¾Ê½À´Ï´Ù.ÆÄÀÌÇÁ´Â ÀÚ½Ä ÇÁ·Î¼¼½º·Î µ¹±â ¶§¹®¿¡ ½ºÅ©¸³Æ®ÀÇ º¯¼ö°ªÀ» ¹Ù²Ü ¼ö°¡ ¾ø½À´Ï´Ù.
variable="initial_value" echo "new_value" | read variable echo "variable = $variable" # variable = initial_valueÆÄÀÌÇÁ·Î ¿¬°áµÈ ¸í·É¾îÁß Çϳª°¡ Ãë¼ÒµÈ´Ù¸é Àüü ½ÇÇàÀÌ Ãë¼ÒµÇ´Âµ¥ À̸¦ broken pipe¶ó°í ÇÏ°í, ÀÌ ¶§ SIGPIPE ½Ã±×³ÎÀÌ ¹ß»ý µË´Ï´Ù.
°Á¦ ÀçÁöÇâ(noclobber ¿É¼ÇÀÌ ÄÑ ÀÖ´õ¶óµµ). ÆÄÀÏÀÌ ÀÌ¹Ì Á¸ÀçÇÏ´õ¶óµµ °Á¦·Î µ¤¾î ¾²°Ô ÇÕ´Ï´Ù.
ÀÛ¾÷À» ¹é±×¶ó¿îµå·Î µ¹¸®±â. ¸í·É¾î µÚ¿¡ &¸¦ ºÙ¿© ÁÖ¸é ¹é±×¶ó¿îµå·Î ½ÇÇàµË´Ï´Ù.
bash$ sleep 10 & [1] 850 [1]+ Done sleep 10 |
°æ°í |
½ºÅ©¸³Æ®¿¡¼ ¾î¶² ¸í·É¾î¸¦ ¹é±×¶ó¿îµå·Î µ¹¸®°Ô µÇ¸é Å°°¡ ´¸®±æ ±â´Ù¸®¸é¼ ½ºÅ©¸³Æ®°¡ ¸ØÃç¹ö¸³´Ï´Ù. ´ÙÇེ·´°Ôµµ ÀÌ·± »óȲÀ» ÇÇÇØ °¥ ¼ö ÀÖ´Â ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù. |
(cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xpvf -) # ÇÑ µð·ºÅ丮ÀÇ Àüü ÆÄÀÏ ±¸Á¶¸¦ ´Ù¸¥ µð·ºÅ丮·Î ¿Å±è # [Alan Cox <a.cox@swansea.ac.uk> Á¦°ø, ¾à°£ÀÇ ¼öÁ¤] # 1) cd /source/directory ¿Å°ÜÁú ÆÄÀϵéÀÌ ÀÖ´Â ¼Ò½º µð·ºÅ丮 # 2) && "And-list": 'cd' ¸í·ÉÀÌ ¼º°øÇÏ¸é ´ÙÀ½ ¸í·É¾î°¡ ½ÇÇàµÊ # 3) tar cf - . 'c' ¿É¼ÇÀº »õ ¾ÆÄ«À̺긦 ¸¸µé¶ó´Â ¸í·É¾î # 'f'(file) ¿É¼ÇÀº ±× µÚ¿¡ ³ª¿À´Â '-'¿¡ ÀÇÇØ Å¸ÄÏ ÆÄÀÏÀ» Ç¥ÁØ Ãâ·ÂÀ¸·Î ÁöÁ¤ÇØ ÁÖ°í, # ÇöÀç µð·ºÅ丮 Æ®¸®(.)¸¦ ´ë»óÀ¸·Î ÇÏ°Ô ÇÕ´Ï´Ù. # 4) | ÆÄÀÌÇÁ¸¦ °É°í # 5) ( ... ) ¼ºê½© # 6) cd /dest/directory ¿Å±æ µð·ºÅ丮·Î À̵¿ # 7) && À§¿¡¼ ¼³¸íÇß´ø "And-list" # 8) tar xpvf - ¾ÆÄ«À̺긦 Ç®°í('x'), ¼ÒÀ¯±Ç°ú ÆÄÀÏ Æ۹̼ÇÀ» À¯Áö(' p')ÇÏ°í # Ç¥ÁØÃâ·ÂÀ¸·Î ¸Þ¼¼Áö¸¦ ¸¹ÀÌ(verbose) Âï°Ô ÇÏ°í('v') # Ç¥ÁØÀԷ¿¡¼ µ¥ÀÌÅ͸¦ ÀÐ¾î µéÀÓ('f' ´ÙÀ½ÀÇ '-') # # 'x'´Â ¸í·É¾î°í, 'p', 'v', 'f'´Â ¿É¼ÇÀÔ´Ï´Ù. ÁÖÀÇÇϼ¼¿ä. # ÇíÇí~~~~ # ¶È°°Áö¸¸ ´õ ¿ì¾ÆÇÑ ¹æ¹ý: # cd source-directory # tar cf - . | (cd ../target-directory; tar xzf -) # # cp -a /source/directory /dest µµ °°Àº °á°ú°¡ ³ª¿É´Ï´Ù. |
bunzip2 linux-2.4.3.tar.bz2 | tar xvf - # --tar ÆÄÀÏÀ» Ç®¾î¼ -- | --"tar" ¿¡°Ô ³Ñ±è -- # "tar"¿¡ "bunzip2"¸¦ ó¸®ÇÏ´Â ÆÐÄ¡°¡ ¾È µÅ ÀÖ´Ù¸é # ÆÄÀÌÇÁ¸¦ ½á¼ µÎ ´Ü°è·Î ³ª´©¾î 󸮸¦ ÇØ Áà¾ß ÇÕ´Ï´Ù. # ¿©±â¼´Â "bzip"À¸·Î ¾ÐÃàµÈ Ä¿³Î ¼Ò½º¸¦ Ǫ´Â °ÍÀ» º¸¿©ÁÝ´Ï´Ù. |
¿©±â¼ ¾²ÀÎ "-"´Â Bash ¿¬»êÀÚ°¡ ¾Æ´Ï°í, tar³ª cat °°Àº ¸î¸î À¯´Ð½º À¯Æ¿¸®Æ¼µéÀÌ ÀνÄÇؼ Ç¥ÁØÃâ·ÂÀ¸·Î ¾²µµ·Ï ÇØÁÖ´Â ¿É¼ÇÀÓ¿¡ ÁÖÀÇÇϼ¼¿ä.
ÆÄÀϸíÀÌ ³ª¿Í¾ß ÇÒ °÷¿¡ -ÀÌ ³ª¿À¸é Ç¥ÁØÃâ·ÂÀ¸·Î °á°ú¸¦ ÀçÁöÇâÇϵçÁö(tar cf¿¡¼ °¡²û ¾²ÁÒ), ½ÇÁ¦ ÆÄÀÏ¿¡¼ ÀÔ·ÂÀ» ¹ÞÁö ¾Ê°í Ç¥ÁØÀԷ¿¡¼ ¹Þµµ·Ï ÀçÁöÇâ ÇÏ°Ô ÇØ ÁÝ´Ï´Ù. ÁÖ·Î ÆÄÀÏÀ» ´Ù·ç´Â À¯Æ¿¸®Æ¼µéÀ» ÆÄÀÌÇÁ¿¡¼ ÇÊÅÍ·Î ¾µ ¶§ ÀÌ ¹æ¹ýÀ» ¾¹´Ï´Ù.
bash$ file »ç¿ë¹ý: file [-bciknvzL] [-f namefile] [-m magicfiles] file... |
bash$ file - #!/bin/bash standard input: Bourne-Again shell script text executable |
- ´Â Ç¥ÁØÃâ·ÂÀ» ´Ù¸¥ ¸í·É¾î·Î ÆÄÀÌÇÁ ½ÃÅ°´Âµ¥ ¾²ÀÏ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¸°Ô Çϸé ÆÄÀÏÀÇ ¾ÕÂÊ¿¡ ÁÙÀ» »ðÀÔÇϱⰰÀº ¹¦±âµµ ºÎ¸± ¼ö ÀÖ½À´Ï´Ù.
diff¸¦ ½á¼ ¼½¼ÇÀ» °¡Áø µÎ ÆÄÀÏÀ» ºñ±³ÇØ º¸±â ¹Ù¶ø´Ï´Ù.
grep bash file1 | diff file2 -
¸¶Áö¸·À¸·Î, tar¿¡ -¸¦ ¾´ Çö½ÇÀûÀÎ ¿¹Á¦ÀÔ´Ï´Ù.
¿¹ 4-3. ÃÖ±Ù ÇϷ絿¾È º¯°æµÈ ÆÄÀϵéÀ» ¹é¾÷Çϱâ
#!/bin/bash # ÇöÀç µð·ºÅ丮ÀÇ ¸ðµç ÆÄÀÏÁß ÃÖ±Ù 24½Ã°£ ¾È¿¡ º¯°æµÈ ÆÄÀϵéÀ» #+ Ÿ¸£·Î ¹°í gzipÀ¸·Î ¾ÐÃàÇÑ "Ÿ¸£º¼"·Î ¹é¾÷ NOARGS=0 E_BADARGS=65 if [ $# = $NOARGS ] then echo "»ç¿ë¹ý: `basename $0` filename" exit $E_BADARGS fi tar cvf - `find . -mtime -1 -type f -print` > $1.tar gzip $1.tar # ³Ê¹« ¸¹Àº ÆÄÀÏÀÌ ¹ß°ßµÇ°Å³ª ÆÄÀÏ¸í¿¡ ºó ÄÀÌ µé¾îÀÖ´Ù¸é À§ÀÇ ÄÚµå´Â #+ ½ÇÆÐÇÒ ¼öµµ ÀÖ´Ù°í Stephane Chazelas °¡ ÁöÀûÇØ ÁÖ¾ú½À´Ï´Ù. # ±×°¡ Á¦¾ÈÇÑ ´Ù¸¥ ¹æ¹ýÀº ´ÙÀ½°ú °°½À´Ï´Ù: # ------------------------------------------------------------- # find . -mtime -1 -type f -print0 | xargs -0 tar rvf "$1.tar" # "find"ÀÇ GNU ¹öÀüÀ» ¾´ ¹æ¹ý. # find . -mtime -1 -type f -exec tar rvf "$1.tar" '{}' \; # ´Ù¸¥ À¯´Ð½º¿¡¼µµ ¾µ ¼ö ÀÖÁö¸¸ ´õ ´À¸° ¹æ¹ý. exit 0 |
°æ°í | |
ÆÄÀϸíÀÌ -·Î ½ÃÀÛÇÏ´Â ÆÄÀÏÀÌ - ÀçÁöÇâ ¿¬»êÀÚ¿Í °°ÀÌ ¾²ÀÌ¸é ¹®Á¦°¡ »ý±æ ¼öµµ ÀÖ½À´Ï´Ù. ½ºÅ©¸³Æ® ³»¿¡¼ ÀÌ·± »çÇ×À» È®ÀÎÇÑ ´ÙÀ½¿¡ ./-FILENAMEÀ̳ª $PWD/-FILENAMEµîÀ¸·Î ¹Ù²ã¼ ó¸®ÇØ Áà¾ß ÇÕ´Ï´Ù. ¶ÇÇÑ, º¯¼öÀÇ °ªÀÌ -·Î ½ÃÀÛÇÒ °æ¿ì¿¡µµ ºñ½ÁÇÑ ¹®Á¦°¡ »ý±æ ¼ö ÀÖ½À´Ï´Ù.
|
¹Ù·Î Àü ÀÛ¾÷ µð·ºÅ丮. [´ë½¬] cd - ¶ó°í Çϸé $OLDPWD ȯ°æ º¯¼ö¸¦ ÀÌ¿ëÇؼ ¹Ù·Î Àü ÀÛ¾÷ µð·ºÅ丮·Î ¿Å°Ü°©´Ï´Ù.
°æ°í |
¹æ±Ý À§¿¡¼ ¼³¸íÇÑ ÀçÁöÇâ ¿¬»êÀÚÀÎ "-"¿Í Çò°¥¸®¸é ¾È µË´Ï´Ù. "-"´Â ¹®¸Æ¿¡ µû¶ó ¾Ë¸Â°Ô Çؼ®µË´Ï´Ù. |
»©±â. »ê¼ú ¿¬»ê¿¡¼ ¾²ÀÌ´Â »©±â ºÎÈ£.
Equals. ÇÒ´ç ¿¬»êÀÚ
a=28 echo $a # 28 |
"="°¡ ´Ù¸¥ ¹®¸Æ¿¡¼ ¾²ÀÌ¸é ¹®ÀÚ¿ ºñ±³ ¿¬»êÀÚÀÔ´Ï´Ù.
´õÇϱâ. µ¡¼À »ê¼ú ¿¬»êÀÚ.
+°¡ ´Ù¸¥ ¹®¸Æ¿¡¼ ¾²À̸é Á¤±Ô Ç¥Çö½Ä ¿¬»êÀÚÀÔ´Ï´Ù.
³ª¸ÓÁö(modulo). ³ª´°¼ÀÀÇ ³ª¸ÓÁö »ê¼ú ¿¬»êÀÚ.
Ȩ µð·ºÅ丮. [Æ¿µå] ÀÌ ¹®ÀÚ´Â $HOME ³»ºÎ º¯¼ö¿¡ ÇØ´çÇÕ´Ï´Ù. ~bozo ´Â bozoÀÇ È¨ µð·ºÅ丮¸¦ ³ªÅ¸³»°í ls ~bozo ´Â ±× Ȩ µð·ºÅ丮ÀÇ ³»¿ëÀ» º¸¿©ÁÝ´Ï´Ù. ~/ Àº ÇöÀç »ç¿ëÀÚÀÇ È¨ µð·ºÅ丮¸¦ ³ªÅ¸³»°í, ls ~/ ´Â ±× Ȩ µð·ºÅ丮ÀÇ ³»¿ëÀ» º¸¿©ÁÝ´Ï´Ù.
bash$ echo ~bozo /home/bozo bash$ echo ~ /home/bozo bash$ echo ~/ /home/bozo/ bash$ echo ~: /home/bozo: bash$ echo ~nonexistent-user ~nonexistent-user |
ÇöÀç ÀÛ¾÷ µð·ºÅ丮. ÀÌ ¹®ÀÚ´Â $PWD ³»ºÎ º¯¼ö¿¡ ÇØ´çÇÕ´Ï´Ù.
¹Ù·Î Àü ÀÛ¾÷ µð·ºÅ丮. ÀÌ ¹®ÀÚ´Â $OLDPWD ³»ºÎ º¯¼ö¿¡ ÇØ´çÇÕ´Ï´Ù.
Å͹̳ÎÀ̳ª ÅؽºÆ® µð½ºÇ÷¹ÀÌÀÇ µ¿ÀÛÀ» º¯°æ. Á¦¾î ¹®ÀÚ´Â CONTROL + key Á¶ÇÕÀ¸·Î ³ªÅ¸³¾ ¼ö ÀÖ½À´Ï´Ù.
Ctl-C
Æ÷±×¶ó¿îµå ÀÛ¾÷À» ³¡³¿.
Ctl-D
½©¿¡¼ ·Î±× ¾Æ¿ô(exit¿Í ºñ½ÁÇÔ).
"EOF" (ÆÄÀϳ¡, end of file). Ç¥ÁØÀԷ¿¡¼ µé¾î¿À´Â ÀÔ·ÂÀ» ³¡³¿.
Ctl-G
"º§(BEL)"(»à ¼Ò¸®).
Ctl-H
¹é½ºÆäÀ̽º(backspace).
Ctl-J
ij¸®Áö ¸®ÅÏ(carriage return).
Ctl-L
ÆûÇǵå(formfeed, Å͹̳ΠȸéÀ» û¼Ò). clear ¸í·É¾î¿Í ¶È°°Àº È¿°ú.
Ctl-M
´º¶óÀÎ(Newline).
Ctl-U
ÀÔ·ÂÁÙÀ» Áö¿ò.
Ctl-Z
Æ÷±×¶ó¿îµå ÀÛ¾÷À» Àá½Ã ¸ØÃã.
¸í·É¾î³ª º¯¼öÀÇ ±¸ºÐÀÚ ¿ªÇÒ. °ø¹é¹®ÀÚ´Â ºóÄ, ÅÇ, ºóÁÙµéÀÇ ¾î¶°ÇÑ Á¶ÇÕµé·Î ÀÌ·ç¾îÁ® ÀÖ½À´Ï´Ù. º¯¼ö ÇÒ´ç°°Àº »óȲ¿¡¼ °ø¹é¹®ÀÚ¸¦ ¾²¸é ¹®¹ý ¿¡·¯°¡ ³³´Ï´Ù.
ºóÁÙÀº ½ºÅ©¸³Æ® µ¿ÀÛ¿¡ ¾Æ¹« ¿µÇâµµ ÁÖÁö ¾Ê±â ¶§¹®¿¡ ±â´Éº°·Î ±¸ºÐ½ÃÄѼ º¸±â ÁÁ°Ô Çϴµ¥ ¾µ ¼ö ÀÖ½À´Ï´Ù.
Ư¼ö º¯¼öÀÎ $IFS´Â ¾î¶² ¸í·É¾îÀÇ ÀÔ·Â Çʵ带 ±¸ºÐÇØ Áִµ¥ ÀÌ º¯¼öÀÇ µðÆúÆ®°ªÀº °ø¹é¹®ÀÚÀÔ´Ï´Ù.
[1] | ½©Àº Áß°ýÈ£ È®ÀåÀ» ½ÃµµÇÒ °ÍÀÌ°í, ¸í·É¾î´Â È®ÀåµÈ °á°ú¿¡ µû¶ó µ¿ÀÛÇÕ´Ï´Ù. | |
[2] | ¿¹¿Ü: Áß°ýÈ£·Î ¹ÀÎ ÄÚµå ºí·°ÀÌ ÆÄÀÌÇÁÀÇ ÀϺκÐÀ¸·Î µ·´Ù¸é ¼ºê½©·Î µ¹ ¼öµµ ÀÖ½À´Ï´Ù.
|