Shell ÇÁ·Î±×·¡¹ÖÀÇ ±âº» ÀÌ ¹®¼´Â Linux focus ÀÇ 2001 ³â 9 ~ 10 ¿ù ±â»çÀÇ
"point Shell Programming" À» ¹ø¿ªÇÑ°ÍÀÌ´Ù.
¿ÀŸ ¹× Å»ÀÚ ¿ë¾îÀÇ »ç¿ë¿¡ ÀÖ¾î¼ ±×¸® ÁÖÀǸ¦ ±â¿ïÀÌÁö ¾ÊÀº °ü°è·Î
¹®¼°¡ ¸Å²ô·´Áö ¾Ê°Ô ÁøÇàµÉ¼ö ÀÖÀ½À» ¹Ì¸® ¹àÈ÷¸ç,
ÀÌ·¯ÇÑ ¹ö±×´Â Â÷ÈÄ ¾÷±×·¹À̵å? ¹öÁ¯¿¡¼ ¼öÁ¤ÇÒ°ÍÀÓÀ» ¾à¼Ó? ÇÑ´Ù.
±×¸®°í ¿øº»¿¡ Æ÷ÇԵǾî ÀÖÁö ¾Ê´Â ³»¿ëµéµµ »ó´ç¼ö µé¾î°¡ ÀÖ´Ù.
¸®´ª½º¸¦ À§ÇÑ ´Ù¾çÇÑ ±×·¡ÇÈÀÎÅÍÆäÀ̽º¸¦ Áö¿øÇÏ´Â ÇÁ·Î±×·¥µéÀÌ ÀÖÀ½¿¡µµ
ºÒ±¸ÇÏ°í ½©½ºÅ©¸³Æ®´Â ¿©ÀüÈ÷ ¸¹Àº »ç¶û?À» ¹ÞÀ¸¸ç ´Ù¾çÇÑ ºÎºÐ¿¡¼
ÇʼöÀûÀÎ µµ±¸·Î »ç¿ëµÇ°í ÀÖ´Ù.
¾ð¶æ º¸±â¿¡ ±×·¡ÇÈÀÎÅÍÆäÀ̽ºÀÇ ´Ù¸¥ µµ±¸µé¿¡ ºñÇؼ »ç¿ëÇϱ⠾î·Á¿ö
º¸ÀÌ°í ´ÙºÐÈ÷ ¿ø½ÃÀûÀ¸·Î º¸ÀÌÁö¸¸, ½© ÇÁ·Î±×·¡¹ÖÀ» ÅëÇÏ¿©,
¸¹Àº ³ëµ¿ÀÌ ÇÊ¿äÇÑ ÀÛ¾÷µéÀ» ´Ü¼øÈ ½Ãų¼ö ÀÖÀ¸¸ç, ÈǸ¢ÇÑ ½Ã½ºÅÛ °ü¸®
µµ±¸·Î »ç¿ëÇÒ¼ö Àֱ⠶§¹®ÀÌ´Ù.
¶ÇÇÑ ´ë±Ô¸ðÇÁ·ÎÁ§Æ®¸¦ ½ÃÀÛÇϱâ Àü¿¡ °£´ÜÇÑ ÇÁ·ÎÅäŸÀÔÀ» ¸¸µé¼ö ÀÖµµ·Ï
ÇØÁÖ¸ç, ÀüüÀûÀ¸·Î ¾î¶² ÀÏÀ» ¼öÇàÇϴµ¥ ÀÖ¾î¼ ½Ã°£°ú ³ë·ÂÀ» Àý¾àÇϵµ·Ï
µµ¿ÍÁØ´Ù.
ÀÌ·¸°Ô Àý¾àµÈ ½Ã°£À» Á»´õ »ý»êÀûÀÎÀÏ(µð¾Æºí·Î¸¦ Çϰųª, Ä¿ÇǸ¦ ¸¶½Ã´Â)
¿¡ÅõÀÚÇÒ¼ö ÀÖµµ·Ï µµ¿ÍÁØ´Ù.
ÀÌ ¹®¼¸¦ ÅëÇؼ ¿ì¸®´Â ÀÌ·¯ÇÑ ½© ½ºÅ©¸³Æ®ÀÇ »ç¿ë¹ý¿¡ ´ëÇؼ ¹è¿ì°Ô
µÉ°ÍÀÌ´Ù. ¹®¼ÀÇ ¼³¸íÀº ±ÛÀ»Àд ¿©·¯ºÐÀÌ ¾ÆÁÖ ±âº»ÀûÀÎ ÇÁ·Î±×·¡¹ÖÀ»
Çغ»ÀûÀÌ ÀÖ°í Unix/Linux ȯ°æÀ» ÇѹøÀÌ¶óµµ Á¢ÇغÃÀ» °Å¶ó´Â
°¡Á¤ÇÏ¿¡ ÀÌ·ç¾îÁú °ÍÀÌ´Ù.
ÀÌ ¹®¼´Â GNU Free Documentation License ¸¦ °¡Áý´Ï´Ù.
¸®´ª½º°¡ ±ò·ÁÀÖ´Â ÄÄÅÍ ÇѴ븸 ÀÖÀ¸¸é µÈ´Ù. ¶Ç´Â ¿ø°Ý ¸®´ª½º °èÁ¤À»
°¡Áö°í ÀÖÀ¸¸é µÈ´Ù.
bash ½©ÀÌ ÇÊ¿äÇÏ°ÚÁö¸¸, ´ëºÎºÐÀÇ ¸®´ª½º ¹Ú½º¿¡ °ÅÀÇ 100% ±ò·ÁÀÖ´Ù°í º¸¸é
µÇ´Ï °ÆÁ¤ÇÒ ÇÊ¿ä ¾øÀ» °ÍÀÌ´Ù.
¸®´ª½º¹Ú½º¿¡ ·Î±×ÀÎ ÇÑ´ÙÀ½¿¡ "bash" ¶ó°í ¸í·ÉÀ» ³»·Áº¸ÀÚ, Á¦´ë·Î ½ÇÇàµÈ´Ù¸é
bash ½©ÀÌ ±ò·Á ÀÖ´Â °ÍÀÌ´Ù.
ÀÚ½ÅÀÇ ½Ã½ºÅÛÀÌ ¾Æ´Ò°æ¿ì ±âº»½©·Î bash ¿ÜÀÇ csh ³ª tcsh µîÀÇ ½©ÀÌ ±âº»½©·Î
ÁöÁ¤µÇ¾î ÀÖÀ»¼öµµ ÀÖ´Ù. ÀÌ·²°æ¿ì °ü¸®ÀÚ¿¡°Ô ±âº»½©ÀÇ º¯°æÀ» ¿äûÇØ¾ß ÇÑ´Ù
(¹°·Ð ·Î±×ÀδÙÀ½¿¡ ÇÁ·ÒÇÁÆ® »ó¿¡¼ "/bin/bash" ¸í·ÉÀ» ½ÇÇàÇÔÀ¸·Î½á º£½¬
½© ȯ°æÀ¸·Î µé¾î°¥¼öµµ ÀÖÁö¸¸)
ÀÚ½ÅÀÇ ±âº» ½© ȯ°æÀ» ¾Ë¾Æº¸°í ½Í´Ù¸é "/etc/passwd" ÆÄÀÏÀ» º¸¸é µÈ´Ù.
Âü°í·Î ÇÊÀÚÀÇ °æ¿ì "yundream:x:500:500::/home/yundream:/bin/bash" ·Î
µÇ¾î ÀÖ´Ù.
½©Àº ´Ù¸¥¸»·Î ¸í·É¾î Çؼ®±â¶ó°í ºÒ¸®¿î´Ù. Àΰ£ÀÇ ¸í·É¾î¸¦
Çؼ®ÇÏ¿©(ÁÖ·Î ÀÚÆÇÀ» ÅëÇÏ¿© ¸í·ÉÇÔ), ½Ã½ºÅÛ(Ä¿³Î)¿¡ Àü´ÞÇÏ´Â ÀÏÀ»
ÇÑ´Ù. ¸í·É¾î¸¦ Çؼ®ÇÏ´Â ¹æ¹ý¿¡ µû¶ó¼ csh, tcsh, ksh, bash µîÀÇ
´Ù¾çÇÑ ½©ÀÌ Á¸ÀçÇÑ´Ù.
À̸¦Å×¸é »ç¿ëÀÚ¿Í Ä¿³Î°£ÀÇ ¿øÇÒÇÑ Åë½ÅÀ» °¡´ÉÇϵµ·Ï µµ¿ÍÁÖ´Â
Å뿪»ç Á¤µµ·Î »ý°¢ÇÏ¸é µÉ°ÍÀÌ´Ù.
¾î¶² À̸§ÀÇ ½©ÀÌ°Ç ±âº»ÀûÀ¸·Î ÇÏ´Â ÀÏÀº °°´Ù. ´Ù¸¸ º¯¼öÀÇ »ç¿ë¹æ¹ý,
»ç¿ëµÇ¾îÁö´Â ¹®¹ý, ±×¹ÛÀÇ Ãß°¡ÀûÀÎ ±â´Éµé¿¡ ÀÖ¾î¼ Â÷ÀÌ°¡ ÀÖÀ»
»ÓÀÌ´Ù. ±×·¯ÇÑ ÀÌÀ¯·Î ÇϳªÀÇ ½©À» »ç¿ëÇÒ¼ö ÀÖ´Ù¸é, ´Ù¸¥ ½©µµ
±×¸® ¾î·ÆÁö ¾Ê°Ô »ç¿ë°¡´ÉÇÏ´Ù.
¸®´ª½º¿¡´Â ¸Å¿ì´Ù¾çÇÑ ¿©·¯ Á¾·ùÀÇ ½©ÀÌ Á¸ÀçÇϴµ¥, ÀÌ ¹®¼¿¡¼´Â
bash(bourne again shell)À» »ç¿ëÇϵµ·Ï ÇÏ°Ú´Ù.
ÀÌÀ¯´Â °¡Àå ³Î¸® »ç¿ëµÇ¸ç, ¹è¿ì±â ½±°í ¶ÇÇÑ ÇÊÀÚ°¡ »ç¿ëÇÏ´Â ½©À̱â
¶§¹®ÀÌ´Ù.
¶§¹®¿¡ ÀÌ ¹®¼¿¡ ÀÖ´Â ¸ðµç ½î¾²¿ª½Ã bash¸¦ ±âÁØÀ¸·Î ÀÛ¼ºµÇ¾î ÀÖ´Ù.
½© ÇÁ·Î±×·¡¹ÖÀ» Çϱâ À§Çؼ´Â nedit, kedit, emasc, vi µîÀÇ ¹®ÀÚ
ÆíÁý±â°¡ ÇÊ¿äÇÏ´Ù. ¸¶À½¿¡ µå´Â ¾Æ¹« ÆíÁý±â³ª »ç¿ëÇϵµ·Ï ÇÏÀÚ.
½© ÇÁ·Î±×·¥ÀÇ Ã¹¹ø° ¶óÀÎÀº ¾Æ·¡¿Í °°Àº ¶óÀÎÀ» Æ÷ÇÔÇØ¾ß ÇÑ´Ù.
#! Àº ½©¿¡°Ô ÀÌ ÇÁ·Î±×·¥À» ½ÇÇàÇϱâ À§Çؼ #! ´ÙÀ½¿¡ ¿À´Â ¾Æ±Ô¸ÕÆ®¸¦
½ÇÇàÇÁ·Î±×·¥À¸·Î »ç¿ëÇÑ´Ù´Â °ÍÀ» ¾Ë·ÁÁÖ±â À§Çؼ »ç¿ëµÈ´Ù.
À§ÀÇ °æ¿ì¿¡´Â /bin/sh ¸¦ »ç¿ëÇ϶ó°í µÇ¾îÀÖ´Ù.
ÀÏ´Ü À§ÀÇ Çü½ÄÀ¸·Î ÇÁ·Î±×·¥À» ¸¸µé°í À̸¦ ÀúÀåÇÏ¿´´Ù¸é, À̸¦ ½ÇÇà°¡´ÉÇÑ
ÆÄÀÏ·Î ¸¸µé¾îÁà¾ß ÇÑ´Ù.
¸®´ª½º(Unix Æ÷ÇÔ) Àº À©µµ¿Í ´Þ¸® ÆÄÀÏÀÇ È®ÀåÀÚ¸í(.exe .com µî)À¸·Î
½ÇÇàÆÄÀÏ À¯¹«¸¦ °áÁ¤ÇÏÁö ¾ÊÀ¸¸ç, ÆÄÀϱÇÇÑ ¼³Á¤ÀÇ º¯°æÀ» ÅëÇÏ¿©
½ÇÇàÆÄÀÏ·Î °áÁ¤ÇÑ´Ù.
½ÇÇàÆÄÀÏ·Î ¸¸µé±â À§Çؼ´Â ¾Æ·¡¿Í °°ÀÌ ÇÏ¸é µÇ´Ù.
À§¿Í °°ÀÌ ÇÏ°í³ª¼ ./filename ¸í·ÉÀ» ³»¸®¸é ÀÛ¼ºÇÑ ½© ÇÁ·Î±×·¥ÀÌ
½ÇÇàµÈ´Ù.
ÁÖ¼®Àº "#" À» ÀÌ¿ëÇϸç "#" ¿¡¼ºÎÅÍ ¶óÀÎÀÇ ¸¶Áö¸· ±îÁö°¡ ÁÖ¼®À¸·Î
󸮵ȴÙ.
ÁÖ¼®ºÎºÐÀº ½©ÀÌ ½ÇÇàµÉ¶§ ¹«½ÃµÈ´Ù.
ÁÖ¼®Àº ÇÁ·Î±×·¥¿¡ ´ëÇÑ ÀÌÇظ¦ ½±°Ô Çϱâ
À§ÇÑ ¹æ¾ÈÀ¸·Î »ç¿ëµÈ´Ù.
#!/bin/sh
# ¸¸µçÀÌ : yundream
# ÇÏ´ÂÀÏ : hello world ¸¦ Ãâ·ÂÇÑ´Ù.
echo "hello world" # ¹®ÀÚ¿À» Ãâ·ÂÇÑ´Ù.
|
º¯¼ö´Â ¸ðµç ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ °¡Àå ±âº»ÀÌ µÇ´Â ¿ä¼ÒÀÌ´Ù.
"º¯¼ö" ¶ó°íºÎ¸£°í´Â ÀÖÁö¸¸, ¾î¶² µ¥ÀÌŸ¸¦ ÀúÀåÇϱâ À§ÇÑ
"Àӽðø°£" À̶ó°í ¸»ÇÏ´Â°Ô ´õ¿í Á¤È®ÇÑ Ç¥ÇöÀÏµí ½Í´Ù.
Àΰ£ µÎ³ú·Î ÇÏÀÚ¸é, ´ë³úÇÇÁúÀÇ Çѱ¸¿ªÂë µÉ±î?
½©¿¡ÀÇ º¯¼öÀÇ µ¥ÀÌŸ ŸÀÔÀº string(¹®ÀÚ¿) ¸¸À» °¡Áö¸ç, C ¾ð¾î¿Í °°Àº
º¯¼ö ¼±¾ðÀ» ÇÊ¿ä·Î ÇÏÁö ¾Ê´Â´Ù. ÀÌ´Â perl, python, php ¿ª½Ã ¸¶Âù°¡Áö
ÀÌ´Ù. º¯¼ö¿¡ °ªÀ» ³Ö±â À§Çؼ´Â ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù.
º¯¼öÀÇ »ç¿ëÀ» À§Çؼ´Â º¯¼ö¸í ¾Õ¿¡ $ ¸¦ ºÙ¿©ÁÖ¸é µÈ´Ù.
º¯¼ö¿¡ µ¥ÀÌŸ¸¦ ÀúÀåÇϱâ À§Çؼ´Â ´ëÀÔ¿¬»êÀÚ"=" ¸¦ »ç¿ëÇÑ´Ù.
´ëÀÔ¿¬»êÀÚ¿Í, ÇÇ¿¬»êÀÚ/¿¬»êÀÚ »çÀÌ¿¡´Â °ø¹éÀÌ Á¸ÀçÇÏ¸é ¾ÈµÈ´Ù.
#!/bin/sh
# º¯¼ö¿¡ °ªÀ» ÇÒ´çÇÑ´Ù.
a="hello world"
# ÀÌÁ¦ a¶ó´Â º¯¼ö¿¡ µî·ÏµÈ °ªÀ» ȸ鿡 Ãâ·ÂÇÑ´Ù.
echo "a is : $a"
|
À§ÀÇ ³»¿ëÀ¸·Î ÆÄÀÏÀ» ¸¸µç´ÙÀ½ ÀúÀåÇÏ°í, ½ÇÇàÆÄÀÏ·Î ¸¸µé¾î¼ ½ÇÇàÇϸé
´ÙÀ½°ú °°Àº °á°ú¹°ÀÌ È¸é¿¡ Ãâ·ÂµÉ °ÍÀÌ´Ù.
[yundream@localhost /home]# ./test.sh
A is : hello world
|
¾Æ·¡¿Í °°ÀÌ ÇÁ·Î±×·¥À» ¸¸µé¾î º¸ÀÚ
num=2
echo "this is the $numnd"
|
¿ì¸®°¡ ¿øÇÏ´Â °ªÀº "this is the 2nd" ÀÌ´Ù.
±×·¯³ª ¿ì¸®°¡ ¿øÇÏ´Â °ª´ë½Å "this is the " ¶ó´Â ¹®ÀÚ¿ÀÌ Ãâ·ÂµÈ´Ù.
¿Ö³Ä¸é ½©Àº "numnd"¸¦ ÇϳªÀÇ º¯¼ö¸íÀ¸·Î »ý°¢ÇÏ°í Àֱ⠶§¹®ÀÌ´Ù.
ÀÌ·Ä°æ¿ì¾Ö´Â ¾Æ·¡¿Í °°ÀÌ ÄÚµùÇÏ¸é µÈ´Ù.
num=2
echo "this is the ${num}nd"
|
À§ÀÇ ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°¸é ¿ì¸®°¡ ¿øÇÏ´Â °ªÀÎ "this is the 2nd" ¶ó´Â
Ãâ·Â¹°À» ¾ò°Ô µÈ´Ù.
½©½ºÅ©¸³Æ®¸¦ Á¦ÀÛÇϴµ¥ ÀÖ¾î¼ À§¿¡¼¿Í °°ÀÌ ÆÄÀÏ·Î ÀúÀåÇÑ´ÙÀ½¿¡
À̸¦ ½ÇÇà±ÇÇÑÀ» ÁÖ¾î¼ ½ÇÇàÇÏ´Â ¹æ¹ýµµ ÀÖÁö¸¸,
°£´ÜÇÏ°Ô ÀÛ¾÷À» ¼öÇàÇØ¾ß ÇÒ°æ¿ì ÆÄÀÏÀ» ¸¸µéÁö ¾Ê°í, ½©»ó¿¡¼ Á÷Á¢
½ÇÇà½ÃÅ°´Â ¹æ¹ýµµ ÀÖ´Ù.
[root@localhost /root]# test="hello world"
[root@localhost /root]# echo $test
hello world
|
¾Æ·¡´Â Á»´õ º¹ÀâÇÑ ¿¹Á¦ÀÌ´Ù.
[root@localhost /root]# if [ "$SHELL" = "/bin/bash" ]
> then
> echo "your login shell is the bash (bourne again shell)"
> else
> echo "your login shell is not bash but $SHELL"
> fi
your login shell is the bash (bourne again shell)
|
À̹øÀå¿¡¼´Â ½©½ºÅ©¸³Æ®¸¦ ´Ù·ç´Âµ¥ ÇÊ¿äÇÑ 3°¡Áö ºÎ¼öÀûÀÎ ÁÖÁ¦¸¦
¼³¸íÇÏ°Ô µÉ°ÍÀÌ´Ù.
½©½ºÅ©¸³Æ®´Â À¯´Ð½º ¸í·É¾îµéÀÇ ÁýÇÕÀ̹ǷÎ, À¯´Ð½º ¸í·É¾î¿¡ ´ëÇؼ
¾î´ÀÁ¤µµÀÇ ¼÷Áö°¡ ÇÊ¿äÇÏ´Ù. ÀÌ·¯ÇÑ ¸í·É¾îµéÀº ÁÖ·Î ÆÄÀÏ°ú ¹®ÀÚ¿À»
ÆíÁýÇϱâ À§Çؼ ¾²¿©Áø´Ù.
ÀÌ·¯ÇÑ ¸í·É¾îµéÁß ÀÚÁÖ ¾²ÀÌ´Â ¸í·É¾îµéÀ» Á¤¸®Çß´Ù.
표 1. ÀÚÁÖ »ç¿ëµÇ´Â À¯´Ð½º ¸í·É¾îµé echo "some text" | some text ¸¦ ȸ鿡 Ãâ·ÂÇÑ´Ù | wc -l file | ÆÄÀÏÀÇ ¶óÀμö | cp sourcefile destfile | sourcefile À» destfile ·Î º¹»ç | mv oldname newname | ÆÄÀÏÀ̸§À» ¹Ù²Ù°Å³ª ÆÄÀÏÀÇ À̵¿ | rm file | ÆÄÀÏ Áö¿ì±â | grep 'pattern' file | ÆÄÀÏ¿¡¼ patternÀÇ ¹®ÀÚ¿À» ã±â | cub -b colnum file | ÆÄÀÏ¿¡¼ ¹®ÀÚ¿À» Ä÷³´ÜÀ§·Î Àß¶ó¼ º¸¿©ÁÜ | cat file.txt | file.txt ¸¦ Ç¥ÁØÃâ·Â(stdout) ½ÃÅ´ | file somefile | somefile ÀÇ ÆÄÀÏŸÀÔ ¾Ë¾Æ³»±â | read var | ÀԷ°ªÀ» º¯¼ö¸ívar ¿¡ ´ëÀÔ | sort file.txt | file.txt ¸¦ ¶óÀδÜÀ§·Î Á¤·Ä | uniq | ÆÄÀÏ¿¡¼ Áߺ¹µÇ´Â ¹®ÀÚ¿À» Á¦°Å | tee | Ç¥ÁØÃâ·ÂµÇ´Â Á¤º¸¸¦ ÆÄÀÏ·Î ¾²±â | basename file | µð·ºÅ丮¸íÀ» Á¦¿ÜÇÑ ÆÄÀÏÀÇ ½ÇÁ¦À̸§À» µ¹·ÁÁÜ | dirname file | ÆÄÀÏÀ̸§À» Á¦¿ÜÇÑ µð·ºÅ丮ÀÇ À̸§À» µ¹·ÁÁÜ | head file | ÆÄÀÏÀÇ Ã³À½ ¸î¶óÀÎÀ» Ãâ·ÂÇÔ | tail file | ÆÄÀÏÀÇ ¸¶Áö¸· ¸î¶óÀÎÀ» Ãâ·ÂÇÔ | sed | Á¤±ÔÇ¥Çö¿¡ ÀÇÇÑ ¹®ÀÚ¿ÀÇ °Ë»ö¹× ġȯ¿¡ »ç¿ëµÊ |
Pipes(|) ´Â ÇϳªÀÇ ÇÁ·Î±×·¥À» ½ÇÇà½ÃÄѼ ¹ß»ýµÈ Ç¥ÁØÃâ·Â µ¥ÀÌŸ¸¦
´Ù¸¥ ÇÁ·Î±×·¥¿¡ Ç¥ÁØÀÔ·Â ½ÃÅ°°íÀÚ ÇÒ¶§ »ç¿ëµÈ´Ù.
Áï ÇÁ·Î¼¼½º°£ µ¥ÀÌŸ Åë½ÅÀ» À§ÇÑ ÇϳªÀÇ ¹æ¹ýÀ¸·Î »ç¿ëµÈ´Ù.
grep "hello" file.txt | wc -l
|
À§ÀÇ ½ºÅ©¸³Æ®´Â file.txt ¿¡¼ hello¹®ÀÚ¿À» Æ÷ÇÔÇÑ ¶óÀÎÀ»
ã¾Æ¼(grep), ¸î°³ÀÇ ¶óÀÎÀÌ hello ¸¦ Æ÷ÇÔÇÏ°í ÀÖ´ÂÁöÀÇ ¶óÀμö¸¦
µ¹·ÁÁØ´Ù.
redirection Àº "ÀçÁöÇâ" À̶ó°í ºÒ¸®¿öÁø´Ù. ¿ì¸®³ª¶ó ¸»·Î Ç¥ÇöÇÏÀÚ¸é
"´Ù½Ã ÇâÇÏ°Ô ÇÏ´Ù" À̸ç, ¾î¶² ÇÁ·Î±×·¥ÀÇ Ãâ·Â Á¤º¸¸¦
´Ù¸¥°÷À¸·Î ´Ù½Ã ÇâÇÏ°Ô
ÇÒ¶§ ¾²ÀδÙ. ¿©±â¿¡¼ ´Ù¸¥°÷À̶õ ÁÖ·Î ÆÄÀÏÀ» ¶æÇÑ´Ù.
ÀçÁöÇâÀ» À§Çؼ´Â ">" °ú ">>" À» ¾´´Ù. ">"À» »ç¿ëÇÏ°Ô µÇ¸é
»õ·Î¿î ÆÄÀÏÀ» ¸¸µé°Ô µÈ´Ù. ±âÁ¸¿¡ °°Àº À̸§ÀÇ ÆÄÀÏÀÌ ÀÖ¾ú´Ù¸é,
±× ÆÄÀÏÀº Áö¿öÁö°Ô µÈ´Ù. ">>" À» ¾²°Ô µÇ¸é ±âÁ¸¿¡ °°Àº À̸§ÀÇ
ÆÄÀÏÀÌ ÀÖ´Ù¸é ±× ÆÄÀÏÀÇ ¸¶Áö¸·ºÎºÐ¿¡ µ¡ ºÙ¿©Áö°Ô µÈ´Ù.
°°Àº À̸§ÀÇ ÆÄÀÏÀÌ ¾ø´Ù¸é ¹°·Ð »õ·Î¿î ÆÄÀÏÀ» ¸¸µé°Ô µÈ´Ù.
[root@localhost /root]# cat address.txt | grep "seoul" > seoul_add.txt
|
address.txt ¿¡´Â ÁÖ¼ÒÁ¤º¸°¡ ´ã°Ü ÀÖ´Ù. À§ÀÇ ½ºÅ©¸³Æ®´Â ÀÌÁß
ÁÖ¼ÒÁö°¡ "seoul" ÀÎ Á¤º¸¸¸À» µû·Î »Ì¾Æ¼
seoul_add.txt ¿¡ ÀúÀåÇÏ´Â ÀÏÀ» ¼öÇàÇÑ´Ù.
"if"´Â ÂüÀÎÁö °ÅÁþÀÎÁö ÆÇ´ÜÇÒ¶§ »ç¿ëÇÑ´Ù. ÂüÀ̶ó¸é then ºÎºÐÀ» ½ÇÇàÇÏ°í
±×·¸Áö ¾Ê´Ù¸é else ºÎºÐÀ» ½ÇÇàÇÑ´Ù.
if .....
then
....
else
....
fi
|
if ÀÇ °¡Àå À¯¿ëÇÑ »ç¿ëó´Â "»óÅÂ" ¸¦ Å×½ºÆ®(test) Çϴµ¥ ÀÖ´Ù.
Áï ¹®ÀÚºñ±³,
ÆÄÀÏÀÌ Á¸ÀçÇÏ´ÂÁö, ÆÄÀÏÀÌ ½ÇÇàÆÄÀÏÀÎÁö, µð·ºÅ丮ÀÎÁö, ÀÐÀ»¼ö ÀÖ´ÂÁö ...
µî¿¡ À¯¿ëÇÏ°Ô »ç¿ëÇÒ¼ö ÀÖÀ¸¸ç, ÀÌ·¯ÇÑ ÀÛ¾÷ÀÇ Á¦¾î¸¦ À§ÇÑ Æ¯¼öÇÑ ¸í·É¾î
µéÀ» Á¦°øÇÑ´Ù.
ÀÌ·¯ÇÑ "test" Á¶°ÇµéÀº "[ ]" »çÀÌ¿¡ ¾²¸éµÈ´Ù.
"[" °ú "]" »çÀÌ¿¡´Â ¹Ýµå½Ã °ø¹é¹®ÀÚ°¡ µé¾î°¡¾ß µÈ´Ù´Â °ÍÀ» ÁÖÀÇÇÏÀÚ.
[ -f "somefile" ] : somefile ÀÌ ÆÄÀÏÀÎÁö¸¦ Å×½ºÆ® ÇÑ´Ù.
[ -x "/bin/ls" ] : /bin/ls °¡ ½ÇÇàÆÄÀÏÀÎÁö¸¦ °Ë»çÇÑ´Ù.
[ -n "$var" ] : $var º¯¼ö¿¡ ¾î¶² °ªÀÌ ´ëÀԵǾî ÀÖ´ÂÁö¸¦ °Ë»çÇÑ´Ù.
[ "$a" = "$b" ] : $a ¿Í $b °¡ °°ÀºÁö °Ë»çÇÑ´Ù.
["$a" = "$b"] : "[" °ú "]" »çÀÌ¿¡ °ø¹éÀÌ ¿ÀÁö ¾Ê¾ÒÀ½À¸·Î À߸øµÈ ¹®ÀåÀÌ´Ù.
|
"man test" ¸¦ ÀÌ¿ëÇؼ ¾î¶°ÇÑ test operator ÀÌ ÀÖ´ÂÁö È®ÀÎ ÇÒ¼ö ÀÖ´Ù.
#!/bin/sh
if [ "$SHELL" = "/bin/bash" ]
then
echo "your login shell is the bash (bourne again shell)"
else
echo "your login shell is not bash but $SHELL"
fi
|
$SHELL Àº ȯ°æº¯¼ö·Î½á »ç¿ëÀÚÀÇ ·Î±×ÀÎ ½©ÀÇ À̸§À» °¡Áö°í ÀÖ´Ù.
À§ÀÇ ½ºÅ©¸³Æ®´Â $SHELL ÀÇ °ªÀ» Å×½ºÆ® ÇÔÀ¸·Î½á »ç¿ëÀÚ°¡ ¾î¶² ½©À»
»ç¿ëÇÏ´ÂÁö ¾Ë¾Æ³»´Â ÀÏÀ» ÇÑ´Ù.
C ¾ð¾î¸¦ ÀÚÁÖ »ç¿ëÇØ º»»ç¶÷Àº ¾Æ·¡¿Í °°Àº ¹®Àå¿¡ Àͼ÷ÇÒ °ÍÀÌ´Ù.
[ -f "/etc/shadow" ] && echo "This computer uses shadow passwords"
|
À§ÀÇ ¹®Àå¿¡¼´Â && À» »ç¿ëÇؼ if ¹®À» °£´ÜÇÏ°Ô Ç¥ÇöÇÏ°í ÀÖ´Ù.
¿ÞÂÊ ¹®ÀåÀÌ ÂüÀÌ¸é ¿À¸¥ÂÊÀ» ½ÇÇàÇ϶ó´Â °ÍÀ¸·Î, /etc/shadow ¶ó´Â
ÆÄÀÏÀÌ Á¸ÀçÇÑ´Ù¸é ½¦µµ¿ì Æнº¿öµå¸¦ »ç¿ëÇÑ´Ù°í À¯Àú¿¡°Ô ¾Ë·ÁÁÖ´Â
ÀÏÀ»ÇÑ´Ù. || ¸¦ »ç¿ëÇÏ¸é ±×¹Ý´ëÀÇ °æ¿ìÀÌ´Ù. °£´ÜÇÑ »ç¿ë¿¹¸¦ µé¾î
º¸°Ú´Ù.
#!/bin/sh
mailfolder=/var/spool/mail/james
[ -r "$mailfolder" ] || { echo "Can not read $mailfolder; exit 1;}
echo "$mailfolder has mail from : "
grep "^From " $mailfolder
|
À§ÀÇ ÇÁ·Î±×·¥Àº james °èÁ¤»ç¿ëÀÚÀÇ ¸ÞÀÏÆÄÀÏÀ» °Ë»çÇؼ ¸ÞÀÏ ÆÄÀÏÀ» ÀÐÀ»¼ö
¾øÀ¸¸é ¿¡·¯¸Þ½ÃÁö¿Í ÇÔ²² Á¾·á ÇÏ°í ±×·¸Áö ¾ÊÀ¸¸é grep À» ½á¼ ´©±¸¿¡°Ô·Î
ºÎÅÍ ¸ÞÀÏÀÌ ¿Ô´ÂÁö¸¦ °èÁ¤ »ç¿ëÀÚ¿¡°Ô ¾Ë·ÁÁÖ´Â ÀÏÀ»ÇÑ´Ù.
case ´Â if elif else ¸¦ Á»´õ ÀϹÝÈ ½ÃŲ Á¦¾î±¸Á¶ÀÌ´Ù. if ¹®À» ¾²´õ¶óµµ
¿©·¯¹øÀÇ Á¶°Ç¿¡ ´ëÇؼ °Ë»çÇÒ¼öÀÖÁö¸¸ ±×·²°æ¿ì if elif °¡ ¾îÁö·´°Ô Áßø
µÇ´Â °á°ú¸¦ º¸¿©ÁÙ°ÍÀÌ´Ù.
ÀÌ·²¶§ case ¸¦ »ç¿ëÇϸé Á»´õ °¡µ¶¼º°ú À¯Áö°¡ ¿ëÀÌÇÑ Äڵ带 ¸¸µé¾î ³¾¼ö
ÀÖ´Ù. Áï if elsif ¸¦ °£´ÜÇÏ°Ô Ç¥ÇöÇÒ¼ö ÀÖ´Ù.
ÀÌÇظ¦ ½±°Ô Çϱâ À§Çؼ ƯÁ¤ÆÄÀÏÀÌ ¾î¶°ÇÑ Æ÷¸äÀÇ ¾ÐÃàÆÄÀÏÀÎÁö¸¦ ¾Ë¾Æ³»´Â
½ºÅ©¸³Æ®¸¦ ¸¸µé¾î º¸µµ·Ï ÇÏÀÚ. ÆÄÀÏÀÇ Á¾·ù¸¦ ¾Ë±â À§Çؼ´Â file À̶õ
¸í·ÉÀ» ¾²¸é µÈ´Ù.
¾Æ·¡ÀÇ ¿¹Á¦¸¦ smartzip À̶õ ÆÄÀÏ·Î ÀúÀåÇϵµ·Ï ÇÏÀÚ.
#!/bin/sh
ftype=`file "$1"`
case "$ftype" in
"$1: gzip compressed"*)
echo "gzip ¾ÐÃà";;
"$1: Zip archive"*)
echo "Zip ¾ÐÃà";;
*)
echo "FLE $1 can not be uncompressed with smartzip";;
esac
|
$1 º¯¼ö´Â ÇÁ·Î±×·¥ÀÇ Ã¹¹ø° ¾Æ±Ô¸ÕÆ®¸¦ ÀúÀåÇÏ°í ÀÖ´Â º¯¼ö´Ù.
ivmdemo.tar.gz ÀÇ ¾ÐÃàÆ÷¸ËÀ» ¾Ë°í ½Í´Ù¸é,
smartzip ivmdemo.tar.gz À̶ó°í ¸í·ÉÀ» ³»¸®¸é µÈ´Ù.
Àú ÀÀå¿¡¼ ´Ù·éÀûÀÌ ÀÖ´Â µ¡¼À ½ºÅ©¸³Æ®¸¦ case ¸¦ ÀÌ¿ëÇÏ¿© »çÄ¢¿¬»êÀ»
¼öÇàÇϵµ·Ï È®Àå½ÃÄѺ¸ÀÚ. ¹°·Ð ¾Æ·¡ÀÇ°æ¿ì ±»ÀÌ ½ºÅ©¸³Æ®¸¦ ¸¸µéÇÊ¿ä ¾øÀÌ
expr ¸¸À» »ç¿ëÇصµ µ¿ÀÏÇÑ ÀÛ¾÷ÀÌ °¡´ÉÇÏÁö¸¸, ¾îµð±îÁö³ª case ÀÇ È°¿ë¹ý
¿¡ ´ëÇÑ ÀÌÇظ¦ À§ÁÖ·ÎÇÔÀÌ´Ï È¿À²¼º, °¡¿ë¼º ±âŸµîµîÀº ¹«½ÃÇÏ°í
³Ñ¾î°¡±â·Î ÇÏÀÚ.
#!/bin/sh
add()
{
result=`expr $1 + $2`
echo "$1 + $2 = $result"
}
min()
{
result=`expr $1 - $2`
echo "$1 - $2 = $result"
}
div()
{
result=`expr $1 / $2`
echo "$1 / $2 = $result"
}
mul()
{
result=`expr $1 \* $2`
echo "$1 * $2 = $result"
}
#echo "$1, $2"
case $1 in
"-") min $2 $3 ;;
"+") add $2 $3 ;;
"/") div $2 $3 ;;
"*") mul $2 $3 ;;
esac
|
À§ÀÇ ½ºÅ©¸³Æ®´Â ù¹ø° ¾Æ±Ô¸ÕÆ®·Î ¿¬»êÀÚ¸¦ ¹Þ¾ÆµéÀÌ°í µÎ¹ø° ¼¼¹ø° ¾Æ±Ô
¸ÕÆ®·Î °è»êÇÏ°íÀÚ ÇÏ´Â ¼ýÀÚ¸¦ ÀÔ·ÂÇÑ´Ù.
"add - 1 3" ÀÌ·±½ÄÀ¸·Î »ç¿ëÇÏ¸é µÈ´Ù. ÁÖÀÇÇÒ Á¡Àº °ö¼À(*) ¿¬»êÀ» »ç¿ëÇÒ
°æ¿ì "\" µîÀ» »ç¿ëÇؼ "add \* 1 3" Çü½ÄÀ¸·Î ½á¾ßÇÑ´Ù´Â Á¡ÀÌ´Ù.
½©»ó¿¡¼ * ´Â ¿ÍÀϵåÄ«µå È®ÀåÀ» ½ÇÇàÇϱ⠶§¹®ÀÌ´Ù.
À̹ø¿¡´Â select Á¦¾î¹®¿¡ ´ëÇؼ ¾Ë¾Æº¸ÀÚ
select ´Â interactive(´ëÈÇü) ¸Þ´º ÇÁ·Î±×·¥À» Â¥´Âµ¥ ¸Å¿ì °£´ÜÇÑ ¹æ¹ýÀ»
Á¦°øÇØÁØ´Ù.
»ç¿ëÀÚ°¡ ¾î¶² OS¸¦ °¡Àå ¼±È£ÇÏ´ÂÁö ¸Þ´º¸¦ º¸°í ±×Áß Çϳª¸¦ ¼±ÅÃÇÏ´Â
ÇÁ·Î±×·¥À» ¸¸µé¾î º¸µµ·Ï ÇÏÀÚ.
#!/bin/sh
echo "What is your favourite OS ?"
select var in "Linux" "Free BSD" "Windows" "Solaris" "Other"
do
break
done
echo "You have selected $var"
|
À§ÀÇ ½ºÅ©¸³Æ®¸¦ ½ÇÇà½ÃÅ°¸é ¾Æ·¡¿Í °°Àº ¸Þ´º°¡ ¶ß°í »ç¿ëÀÚÀÇ ÀÔ·ÂÀ» ¿ä±¸ÇÏ´Â
ÇÁ·ÒÇÁÆ®°¡ ´ë±â ÇÏ°Ô µÉ°ÍÀÌ´Ù.
What is your favourite OS ?
1) Linux
2) Free BSD
3) Windows
4) Solaris
|
¿øÇÏ´Â ¿î¿µÃ¼Á¦ÀÇ ¹øÈ£(1 - 4) ¸¦ ¼±ÅÃÇÏ¸é ¼±ÅÃµÈ ¹øÈ£ÀÇ ¹®ÀÚ¿ÀÌ var º¯¼ö¿¡
ÀúÀåµÈ´Ù. 1 À» ÀÔ·ÂÇÏ¿´´Ù¸é var º¯¼ö¿£ Linux °¡ ÀúÀå µÈ´Ù.
while Àº Á¶°ÇÀÌ ¸¸Á·ÇÏ´Â µ¿¾È ·çÇÁ¸¦ ¹Ýº¹ÇÑ´Ù.
´ÙÀ½Àº while ¸¦ »ç¿ëÇؼ 1ºÎÅÍ 10±îÁö Ãâ·ÂÇÏ´Â °£´ÜÇÑ ÇÁ·Î±×·¥ÀÌ´Ù.
#!/bin/sh
a=0
while [ $a -lt 10 ]
do
a=`expr $a + 1`
echo $a
done
|
bashsehll ¿¡¼ÀÇ for ¹®Àº CÀÇ for ¹®°ú´Â »ç¿ë¿¡ ÀÖ¾î¼ Â÷ÀÌ°¡ ³´Ù.
sehll ¿¡À־ in ´ÙÀ½ÀÇ °ªµéÀ» Â÷·Ê´ë·Î º¯¼ö¿¡ ÀÔ·ÂÇÏ´Â ÀÏÀ» ÇÑ´Ù.
#!/bin/sh
for var in A B C
do
echo "var is $var"
done
|
for ¹®À» ÀÌ¿ëÇÑ Á»´õ À¯¿ëÇÑ ½ºÅ©¸³Æ®¸¦ ¸¸µé¾î º¸µµ·Ï ÇÏÀÚ.
¾Æ·¡ÀÇ ½ºÅ©¸³Æ®´Â ¹èÆ÷ÆÇ CD¿¡ ÇØ´ç rpmÀÌ ÀÖ´ÂÁö¸¦ È®ÀÎÇÏ°í,
ÀÖ´Ù¸é rpm ÆÐÅ°ÁöÀÇ Á¤º¸¸¦ º¸¿©ÁÖ´Â ÀÏÀ» ÇÑ´Ù.
¾Æ·¡ÀÇ ³»¿ëÀ» showrpm À¸·Î ÀúÀåÇϵµ·Ï ÇÏÀÚ.
#!/bin/sh
for rpmpackage in $*
do
if [ -r "$rpmpackage" ]
then
echo "================ $rpmpackage ============="
rpm -qi -p $rpmpackage
else
echo "ERROR: cannot read file $rpmpackage"
fi
done
|
À§ÀÇ ½ºÅ©¸³Æ®¸¦ º¸¸é $* À̶ó´Â º¯¼ö°¡ º¸ÀÏ°ÍÀÌ´Ù.
$*´Â ¸ðµç ¾Æ±Ô¸ÕÆ®¸¦ ÀúÀåÇÏ´Â º¯¼öÀÌ´Ù.
#!/bin/sh
echo $SHELL
echo "$SHELL"
echo '$SHELL'
|
À§ÀÇ ½ºÅ©¸³Æ®¿¡¼ 1¹ø°¿Í 2¹ø°ÀÇ °æ¿ì ÀÚ½ÅÀÌ »ç¿ëÇÏ´Â ½©À»
Ãâ·ÂÇÏÁö¸¸ (¾Æ¸¶µµ /bin/bash) 3¹ø°ÀÇ °æ¿ì $SHELL ÀÚü¸¦
Ãâ·ÂÇÏ´Â°É º¼¼ö ÀÖÀ»°ÍÀÌ´Ù. ' ¸¦ »ç¿ëÇϸé
½©ÀÌ »ç¿ëÇϴ Ư¼ö¹®ÀÚ(keyword)¸¦ ÀϹÝÈ ½ÃÄѼ »ç¿ëÇÒ¼ö
ÀÖ´Ù.
¶ÇÇÑ ¹é½½·¯½¬¸¦ »ç¿ëÇؼ ¿ÍÀϵåÄ«µå³ª º¯¼ö±âÈ£¿Í °°Àº
Ư¼öÇÑ ¹®ÀÚ¸¦ ÀϹÝÈ ½Ãų¼öµµ ÀÖ´Ù.
À§¿¡¼ ¹é½½·¯½¬¸¦ »ç¿ëÇÔÀ¸·Î½á $ ÀÇ Æ¯º°ÇÑ Àǹ̸¦
Á¦°Å½ÃÄÑ ¹ö¸²À¸·Î½á $SHELL À̶õ ¹®ÀÚ¿À» Ãâ·ÂÇϵµ·Ï ¸¸µç´Ù.
¿¹¸¦ µé¾î¼ $1,000 ¸¦ ȸ鿡 Ãâ·Â
½ÃÅ°·Á°í ÇÑ´Ù°í °¡Á¤ÇÏÀÚ ÀÌ·²¶§ ¾Æ·¡¿Í °°ÀÌ ½á¹ö¸®¸é
¾Æ¹«·± °ªµµ Ãâ·ÂµÇÁö ¾ÊÀ½À» ¾Ë¼ö ÀÖ´Ù.
¿Ö³Ä¸é ½©Àº 1000 ¾Õ¿¡ $ °¡ ÀÖÀ½À¸·Î À̸¦
º¯¼ö¸íÀ¸·Î »ý°¢ÇÏ°í ÀÌ º¯¼ö¸í¿¡
ÀúÀåµÈ °ªÀ» echo ÇÏ·Á°í ÇÒ°ÍÀ̱⠶§¹®ÀÌ´Ù.
¿ì¸®°¡ ¿øÇÏ´Â °ªÀ» ¾òÀ»·Á¸é ¾Æ·¡¿Í °°ÀÌ Äڵ带 ¼öÁ¤ÇØ¾ß ÇÑ´Ù.
¿©·¯ºÐÀÌ Á»´õ º¹ÀâÇÑ ÇÁ·Î±×·¥À» ¸¸µé´Ùº¸¸é ÇÔ¼öÀÇ
Çʿ伺À» ´À³¢°Ô µÉ°ÍÀÌ´Ù.
ÇÔ¼ö¸¦ »ç¿ëÇÔÀ¸·Î½á, Á»´õ ÀÌÇØÇϱ⠽±°í
´Ü¼øÇÑ ÇÁ·Î±×·¥À» ¸¸µé¼ö ÀÖÀ¸¸ç,
Àç»ç¿ëÀ» ¿ëÀÌÇϵµ·Ï ¸¸µé¼ö ÀÕ´Ù.
ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÑ´Ù.
sehll Àº ½ºÅ©¸³Æ® ¾ð¾îÀÌ°í ¼øÂ÷ÀûÀ¸·Î ½ÇÇàÀÌ µÇ¹Ç·Î
ÇÔ¼ö¸¦ »ç¿ëÇϱâ Àü¿¡ ¸ÕÀú ¼±¾ðÀ» ÇØÁÖ¾î¾ß¸¸ ÇÑ´Ù.
#!/bin/sh
help()
{
cat << HELP
xtitle bar -- change the name of an xterm, gnome-teminal or kde konsole
Usage: xtitlebar [-h] "string_for_titlebar"
OPTIONS: -h help text
EXAMPLE: xtitlebar "cvs"
HELP
exit 0
}
[ -z "$1" ] && help
[ "$1" = "-h" ] && help
|
ÇÔ¼ö¸¦ ÀÌ¿ëÇÑ °£´ÜÇÑ µ¡¼À ½ºÅ©¸³Æ®¸¦ ¸¸µé¾î º¸ÀÚ.
2°³ÀÇ ÀÎÀÚ¸¦ ¹Þ¾ÆµéÀÌ°í À̸¦ ´õÇÑÈÄ Ãâ·ÂÇÏ´Â ÀÏÀ» ÇÑ´Ù.
#!/bin/sh
add()
{
result=`expr $1 + $2`
echo "$1 + $2 = $result"
}
add $1 $2
|
°¢ ¸í·ÉÇà ÀÎÀÚ´Â $* °ú $1, $2, $3, ... µîÀÇ º¯¼ö¸¦ ÅëÇؼ
°¡Á®¿Ã¼ö ÀÖ´Ù.
±×·¯³ª ÀÌ·¯ÇÑ ¸í·ÉÇà ÀÎÀÚµéÀ» ´Ü¼øÈ÷ ÀоîµéÀÌ´Â
°Í¸¸À¸·Î´Â -h ¿Í °°Àº ¸í·ÉÇà ¿É¼Ç¿¡
´ëÇÑ ³»¿ëÀº ´Ù·ê¼ö ¾ø´Ù. ¿Ö³Ä¸é shell ¿¡¼´Â -h ¸¦
¿É¼ÇÀÌ ¾Æ´Ñ ÀÎÀÚ·Î Ãë±ÞÇϱâ
¶§¹®ÀÌ´Ù. À̸¦ ó¸®Çϱâ À§Çؼ´Â ¾à°°ÀÇ ±â¼úÀÌ ÇÊ¿äÇÏ´Ù.
º¸Åë C¿¡¼´Â getopt()¿Í
°°Àº ÇÔ¼ö¸¦ ÀÌ¿ëÇؼ ¿É¼ÇÀ» ó¸®ÇÑ´Ù.
¾Æ·¡´Â ¸í·ÉÇà ÀÎÀÚ¸¦ ºÐ¼®ÇÏ´Â ½©ÇÁ·Î±×·¥ÀÌ´Ù. ÇÁ·Î±×·¥ÀÇ À̸§Àº
cmdparser ·Î ÇÏÀÚ
#!/bin/sh
help()
{
cat << HELP
This is a generic command line parser demo.
Usage Example : cmdparser -l hello -f somefile1 somefile2
HELP
exit 0
}
while [ -n "$1" ]
do
case $1 in
-h) help; shift1;;
-f) opt_f=1;shift 1;;
-l) opt_l=$2;shift 2;;
--) shift;break;;
-*) echo "error : no such option $1. -h for help"; exit 1;;
*) break;
esac
done
echo "opt_f is $opt_f"
echo "opt_l is $opt_1"
echo "first arg is $1"
echo "2nd arg is $2"
|
shift ¶õ »õ·Î¿î ½©¸í·ÉÀÌ ³ª¿Ô´Âµ¥,
¾Æ±Ô¸ÕÆ®¸¦ Çϳª¾¿ À̵¿½ÃÅ°´Â ÀÏÀ»ÇÑ´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº
man bash ¸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù.
À§ÀÇ ½ºÅ©¸³Æ®¸¦ cmdparser -l hello -f -- -somefile1 somefiel2 ·Î
½ÇÇà½ÃÄѺ¸¸é ¾Æ·¡¿Í °°Àº °á°ú°¡ ³ª¿Ã°ÍÀÌ´Ù.
opt_f is 1
opt_l is hello
first arg is -somefile1
2nd arg is somefile2
|
À§ÀÇ ÇÁ·Î±×·¥ÀÌ ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö ¾Ë¾Æº¸ÀÚ, À§ÀÇ ·çÇÁ´Â ¾Æ±Ô¸ÕÆ®°¡
°Ë»öµÉ¶§±îÁö °è¼ÓÇؼ ¼øȯÇϵµ·Ï µÇ¾î ÀÖÀ¸¸ç case ¸¦ ÀÌ¿ëÇؼ
¾Æ±Ô¸ÕÆ®¿Í ´ëÀÀµÇ´Â °ªÀ» ¸ÅĪ½ÃŲ´Ù. ¸¸¾à¿¡ ¸ÅĪµÈ °ªÀ» ã¾Ò´Ù¸é,
ÇØ´ç ¸í·É¾î³ª ÇÔ¼ö¸¦ ½ÇÇàÇÏ°í shift ¸¦ ÀÌ¿ëÇؼ ÇÊ¿äÇÑ ¸¸Å ¾Æ±Ô¸ÕÆ®¸¦
À̵¿½ÃŲ´Ù.
À̹øÀå¿¡¼´Â ±×µ¿¾È ¹è¿ü´ø ±âº»ÀûÀÎ ³»¿ëµéÀ» Åä´ë·Î, ½ÇÁúÀûÀÎ
½©ÇÁ·Î±×·¥À» ¸¸µéµµ·Ï Çغ¸ÀÚ. ¸ðµç Á¾·ùÀÇ ÈǸ¢ÇÑ ½©½ºÅ©¸³Æ®´Â
µµ¿ò¸»À» °¡Áö°í ÀÖÀ¸¸ç, ¾Æ±Ô¸ÕÆ®¿É¼ÇÀ» ÆĽÌÇÏ´Â ÀϹÝÀûÀÎ
·çƾÀ» °¡Áö°í ÀÖ´Ù. À̹ø¿¡ »õ·Î¸¸µé ½ºÅ©¸³Æ®´Â ÀÌ·¯ÇÑ ÁÁÀº ½ºÅ©¸³
Æ®°¡ °¡Áö´Â ·çƾµéÀ» Æ÷ÇÔÇÏ°Ô µÉ°ÍÀÌ´Ù.
ÀÌ ½ºÅ©¸³Æ®´Â ¹ÙÀ̳ʸ®¸¦ ¼ýÀÚ·Î ¹Ù²ãÁÖ´Â ÀÏÀ»ÇÑ´Ù.
°£´ÜÇÑ »ê¼ö °Ô»êÀ» À§Çؼ expr À» »ç¿ëÇϵµ·Ï ÇÑ´Ù.
#!/bin/sh
help()
{
cat << HELP
b2h -- convert binary to decimal
USAGE: b2h [-h] binarynum
OPTIONS: -h help text
EXAMPLE: b2h 111010
whill return 58
HELP
exit 0
}
error()
{
# print an error and exit
echo "$1"
exit 1
}
lastchar()
{
#return the last character of a string in $rval
if [ -z "$1" ]
then
rval=""
return
fi
numofchar=`echo -n "$1" | wc -c | sed 's/ //g'`
rval=`echo -n "$1" | cut -b $numofchar`
}
chop()
{
# remove the last character in string and return it in $rval
if [ -z "$1" ]
then
# empty string
rval=""
return
fi
# wc puts some space behind the output this is why we need sed:
numofchar=`echo -n "$1" | wc -c | sed 's/ //g' `
if [ "$numofchar" = "1" ]
then
# only one char in string
rval=""
return
fi
numofcharminus1=`expr $numofchar "-" 1`
# now cut all but the last char:
rval=`echo -n "$1" | cut -b 0-${numofcharminus1}`
}
while [ -n "$1" ]
do
case $1 in
-h) help;shift 1;; # function help is called
--) shift;break;; # end of options
-*) error "error: no such option $1. -h for help";;
*) break;;
esac
done
# The main program
sum=0
weight=1
# one arg must be given:
[ -z "$1" ] && help
binnum="$1"
binnumorig="$1"
while [ -n "$binnum" ]; do
lastchar "$binnum"
if [ "$rval" = "1" ]
then
sum=`expr "$weight" "+" "$sum"`
fi
# remove the last position in $binnum
chop "$binnum"
binnum="$rval"
weight=`expr "$weight" "*" 2`
done
echo "binary $binnumorig is decimal $sum"
|
À§ÀÇ ÇÁ·Î±×·¥Àº À̸¥¹Ù 2Áø¼ö¸¦ 10Áø¼ö·Î ¹Ù²Ù¾îÁÖ´Â ÇÁ·Î±×·¥ÀÌ´Ù.
¸¸¾à¿¡ À§ÀÇ ½ºÅ©¸³Æ®·Î ÁÖ¾îÁø ¾Æ±Ô¸ÕÆ®°¡ 1101 À̶ó¸é, 2Áø¼ö¸¦
10Áø¼ö·Î ¹Ù²Ù´Â °è»ê¹ý¿¡ ÀÇÇؼ ¾Æ·¡¿Í °°Àº °á°ú°¡ ³ª¿À°Ô µÉ°ÍÀÌ´Ù.
1*2^3 + 1*2^2 + 0*2 + 1 = 6
|
À§ ÇÁ·Î±×·¥ÀÇ ºÐ¼®Àº ¿©·¯ºÐ °¢ÀÚ¿¡°Ô ¸Ã±â°Ú´Ù.
µð¹ö±ëÀ» À§ÇÑ °¡Àå°£´ÜÇÑ ¹æ¹ýÀº echo ¸í·ÉÀ» ÀÌ¿ëÇؼ °á°ú°ªÀ»
Ãâ·ÂÇغ¸´Â ¹æ¹ýÀÌ´Ù. - À̹æ¹ýÀº ´Ù¸¥ ¸ðµç ¾ð¾î¿¡µµ °øÅëÀûÀ¸·Î
Àû¿ëµÈ´Ù. C´Â printf, PerlÀº print µîÀÌ µÉ°ÍÀÌ´Ù -
´ç½ÅÀº echo ¸¦ ÀÌ¿ëÇؼ º¯¼ö°ªÀ» ¾Ë¾Æº½À¸·Î½á, ¾î´ÀºÎºÐ¿¡¼
½Ç¼ö¸¦ Çß´ÂÁö¸¦ ¾Ë¼ö ÀÖ´Ù. ¾Æ¸¶µµ ´ëºÎºÐÀÇ ½© ÇÁ·Î±×·¡¸Ó´Â ÀÌ·¯ÇÑ
½Ç¼ö¸¦ ã´Âµ¥ Àüü ÇÁ·Î±×·¥À» Â¥´Â ½Ã°£ÀÇ 80% Á¤µµ¸¦ º¸³¾°ÍÀÌ´Ù.
½©½ºÅ©¸³Æ®ÀÇ ÀÕÁ¡Àº ÀÌ·¯ÇÑ Å×½ºÆ®¸¦ À§Çؼ echo ¹®À» »ç¿ëÇϴµ¥,
´Ù½Ã ÄÄÆÄÀÏÇÒ ÇÊ¿ä°¡ ¾ø¾î¼, ½Ã°£À» Àý¾àÇÒ¼ö ÀÖ´Ù¶ó´Â °ÍÀÌ´Ù.
½©½ºÅ©¸³Æ®¸¦ µð¹ö±ë ¸ðµå·Î µ¹¸®°í ½Í´Ù¸é ¾Æ·¡¿Í °°ÀÌ ÇÏ¸é µÈ´Ù.
µð¹ö±ë ÇÏ°íÀÚ ÇÏ´Â ½©½ºÅ©¸³Æ®ÀÇ À̸§Àº strangescript ¶ó°í ÇÏÀÚ.
À§¿Í °°ÀÌ ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇϸé, ½©ÀÌ ½ÇÇàµÇ´Â µ¿¾È¿¡ »ç¿ëµÈ º¯¼öÀÇ
¸ðµç °ªÀ» ȸé»ó¿¡ Ãâ·Â½ÃÄÑÁØ´Ù. ±×·³À¸·Î ¾î´À °÷¿¡¼ ½Ç¼ö¸¦ Çß´ÂÁö
½±°Ô ãÀ»¼ö ÀÖ´Ù.
À§¿Í °°ÀÌ "-n" ¿É¼ÇÀ» ÀÌ¿ëÇϸé syntax ¿À·ù¸¦ ã¾Æ³¾¼ö ÀÖ´Ù.
À§ÀÇ ¿É¼Ç¿¡¼´Â syntax ¿À·ù ¿ÜÀÇ ´Ù¸¥ °ªµéÀº º¸¿©ÁÖÁö ¾Ê´Â´Ù.
´Ù¸¥ ¿©·¯°¡Áö ÈǸ¢ÇÑ ¾ð¾î(C, Perl, Python)°¡ ÀÖÀ½¿¡µµ
ºÒ±¸ÇÏ°í ¿©ÀüÈ÷ ½©À» »ç¿ëÇÏ´Â ÀÌÀ¯´Â È¿À²ÀûÀÎ ÀÛ¾÷À» À§Çؼ ÀÏ°ÍÀÌ´Ù.
bash ´Â »ç¿ëÀÚ°¡ Áߺ¹½Ã°£À» ÁÙÀÌ°í, ÀÛ¾÷À» ºü¸£°í È¿À²ÀûÀ¸·Î ÇÒ¼ö ÀÖµµ·Ï
Çϱâ À§Çؼ history, ¸í·É¾îġȯ °ú °°Àº ¿©·¯°¡Áö ±â´ÉµéÀ» Á¦°øÇÑ´Ù.
bash(´Ù¸¥ ½©µµ ¸¶Âù°¡Áö)Àº ȯ°æº¯¼ö¶ó´Â°É »ç¿ëÇÑ´Ù. ȯ°æº¯¼ö´Â
½©ÀÌ ¿î¿ëµÇ´Âµ¥ ÇÊ¿äÇÑ ¿©·¯°¡Áö °ªµéÀ» °¡Áö°í ÀÖ´Ù.
´ëÇ¥ÀûÀÎ ¿¹·Î SHELL º¯¼ö°¡ ÀÖ´Ù. À̺¯¼ö¿¡´Â ÇöÀç ·Î±×ÀÎ À¯Àú°¡ »ç¿ëÇÏ°í
ÀÖ´Â ½©ÀÌ ¾î¶²°ÇÁö¿¡ ´ëÇÑ Á¤º¸¸¦ °¡Áö°í ÀÖ´Ù. ¿©·¯ºÐÀÌ ÇöÀç »ç¿ëÇÏ´Â ½©ÀÌ
¾î¶²°ÇÁö ¾Ë°í ½Í´Ù¸é ´ÙÀ½°ú °°ÀÌ ÇϸéµÈ´Ù.
[yundream@localhost yundream]$ echo $SHELL
/bin/bash
|
À̹ۿ¡µµ PATH, USER, TERM, PWD µî°ú °°Àº ¸¹Àº ȯ°æº¯¼ö¸¦ °¡Áö°í ÀÖ´Ù.
ȯ°æº¯¼ö¸¦ ¼¼ÆÃÇϱâ À§Çؼ´Â export ¶ó´Â ½© ¸í·É¾î¸¦ »ç¿ëÇÑ´Ù.
[yundream@localhost yundream]$ export MY_NAME="yundream"
[yundream@localhost yundream]$ echo $MY_NAME
yundream
|
ÇöÀç ¼³Á¤µÇ¾î ÀÖ´Â ¸ðµç ȯ°æº¯¼ö¸¦ º¸±â À§Çؼ´Â set ¸í·ÉÀ» ÀÌ¿ëÇÏ¸é µÈ´Ù.
ÀÌ·¸°Ô Çؼ ¼³Á¤µÈ ȯ°æº¯¼ö´Â ÇöÀç ½©¿¡¼ ½ÇÇàµÇ´Â ¸ðµç ÀÚ½Ä ÇÁ·Î¼¼½º¿¡ »ó¼Ó
µÇ°Ô µÈ´Ù.
history ´Â ÀÌÀü¿¡ ³»·È´ø ¸í·ÉÀ» ±â¾ïÇؼ ´Ù½Ã ½á¸ÔÀ¸·Á°í ÇÒ¶§ À¯¿ëÇÏ´Ù.
Å͹̳ο¡¼ history ¸í·ÉÀ» ³»¸²À¸·Î½á ÀÌÀü¿¡ ½ÇÇàÇß´ø ¸í·É¾îÀÇ ¸ñ·ÏÀ»
È®ÀÎÇÒ¼ö ÀÖ´Ù.
[yundream@localhost yundream]$ history
1 micq
2 exit
3 make clean
...
454 vi /home/httpd/cont/httpd.conf
455 history
|
È÷½ºÅ丮°¡ ÀúÀåµÇ´Â Å©±â´Â ȯ°æº¯¼öÀÎ HISTSIZE ¿¡ ÀúÀåµÈ´Ù. º¸ÅëÀº
1000 ¶óÀÎÁ¤µµ·Î ¼¼ÆõǾî ÀÖ´Ù.
È÷½ºÅ丮¿¡¼ ¿øÇÏ´Â ¸í·ÉÀ» »ç¿ëÇÏ°í ½ÍÀ»¶§´Â "!n" À» »ç¿ëÇÏ¸é µÈ´Ù.
"n" Àº È÷½ºÅ丮 ¹øÈ£ÀÌ´Ù. Áï make clean À» ´Ù½Ã ½ÇÇàÇÏ°í ½Í´Ù¸é
"!3" ÇÏ¸é µÈ´Ù.
"!" ´Â È÷½ºÅ丮 ±â´ÉÀ» »ç¿ëÇϱâ À§ÇÑ ½© ¿¹¾à¾îÀÌ´Ù. ÀÌ°É »ç¿ëÇϸé ÀÛ¾÷À»
ÆíÇÏ°Ô ÇÒ¼ö ÀÖ´Ù.
"!(¹®ÀÚ¿)" ÇÏ°Ô µÇ¸é, È÷½ºÅ丮 ¸ñ·ÏÁß¿¡¼
(¹®ÀÚ¿)·Î ½ÃÀ۵Ǵ °¡Àå ÃÖ±Ù¿¡
½ÇÇàµÈ È÷½ºÅ丮ÀÇ ¸í·É¾î¸¦ ºÒ·¯¿Í¼ ½ÇÇàÇÏ°Ô µÈ´Ù.
À§¿¡¼ 454 ¹øÀÇ ¸í·ÉÀ» ´Ù½Ã ½ÇÇàÇÏ°í ½Í´Ù¸é,
!vi ÇÏ¸é µÈ´Ù. ¹°·Ð !v Çصµ °ü°è¾ø´Ù.
È÷½ºÅ丮´Â grep °ú Á¶ÇÕµÇ¾î¼ ÀÚÁÖ »ç¿ëÇÑ´Ù.
[root@localhost /root]# history | grep configure
8 ./configure --with-apache=../apache-1.3.22
13 ./configure
14 ./configure i686-linux
15 ./configure --help
[root@localhost /root]# !8
./configure --with-apache=../apache-1.3.22
|
¾Æ·¡¿Í °°Àº »óȲÀ» °¡Á¤Çغ¸ÀÚ
[root@localhost /]# vp file1 file2
bash: vp: command not found
|
»ç½ÇÀº file1 À» file2 ·Î º¹»çÇÏ´Â ÀÛ¾÷À» ÇÏ±æ ¿øÇßÀ¸³ª, cp ¸¦
vp ·Î Ä¡´Â ¿À·ù¸¦ ¹üÇß´Ù.
À̸¦ Á¤Á¤Çϱâ À§Çؼ´Â óÀ½ºÎÅÍ ´Ù½ÃÄ¡°Å³ª, ÀÚÆÇÀ» "v" ±îÁö ¿òÁ÷
¿©¼ À̸¦ "c"·Î ±³Ã¼ ÇØ¾ß ÇÒ°ÍÀÌ´Ù. ÀÌ·²°æ¿ì "^"¸¦ »ç¿ëÇϸé
ÀÛ¾÷À» Á»´õ »¡¸® ÇÒ¼ö ÀÖ´Ù.
[root@localhost /]# ^v^c
cp file1 file2
|
"^[¿øº»¹®ÀÚ¿]^[¹Ù²ð¹®ÀÚ¿]" ÀÇ Çü½ÄÀ¸·Î »ç¿ëÇϸé, °¡Àå ÃÖ±ÙÀÇ
¸í·É¿¡¼ ¿øº»¹®ÀÚ¿À» ¹Ù²ð¹®ÀÚ¿·Î ġȯÇÏ¿© ¸í·ÉÀ» ´Ù½Ã ½ÇÇàÇÏ°Ô
µÈ´Ù.
Prompt ¶õ ½©ÀÌ »ç¿ëÀÚÀÇ ÀÔ·ÂÀ» ±â´Ù¸®°í ÀÖÀ½À» À¯Àú¿¡°Ô ¾Ë·ÁÁÖ±â
À§Çؼ »ç¿ëÇÑ´Ù. Prompt ¸¦ Àß »ç¿ëÇÏ°Ô µÇ¸é ¿©·¯ºÐÀÌ ¾î¶² È£½ºÆ®
¿¡¼ ÀÛ¾÷À» ÇÏ´ÂÁö, ȤÀº ¸î½ÃÀÎÁö, ¾î¶² µð·ºÅ丮¿¡¼ ÀÛ¾÷ÇÏ°í
ÀÖ´ÂÁö µîÀÇ ÀÛ¾÷Á¤º¸µîÀ» ¾òÀ»¼ö ÀÖ´Ù.
ÇÁ·ÒÇÁÆ® Á¤º¸´Â ȯ°æº¯¼ö PS1 ¿¡ ÀúÀåµÈ´Ù. echo $PS1 ÇØ º¸¸é ÇöÀç
¼³Á¤µÈ ÇÁ·ÒÇÁÆ® Á¤º¸¸¦ º¼¼ö ÀÖ´Ù.
bash ´Â È¿À²ÀûÀÎ ÇÁ·ÒÇÁÆ® Á¤º¸¸¦ º¸¿©ÁÖ±â À§Çؼ ¸î°³ÀÇ Æ¯¼ö ¹®ÀÚ
µéÀ» Á¦°øÇÏ°í ÀÖ´Ù.
표 2. Prompt ¿¹¾à¾î \t | ÇöÀç ½Ã°£À» HH:MM:SS Çü½ÄÀ¸·Î º¸¿©ÁØ´Ù. | \d | ³¯ÀÚ¸¦ "¿äÀÏ ¿ù ÀÏ" Çü½ÄÀ¸·Î º¸¿©ÁØ´Ù. | \s | ½©ÀÇ À̸§À» º¸¿©ÁØ´Ù. | \w | ÇöÀç ÀÛ¾÷µð·ºÅ丮¸¦ ¿ÏÀü°æ·Î·Î º¸¿©ÁØ´Ù. | \W | ÇöÀç ÀÛ¾÷µð·ºÅ丮ÀÇ À̸§À» º¸¿©ÁØ´Ù. | \u | ÇöÀç »ç¿ëÀÚÀÇ »ç¿ëÀÚ¸í | \h | È£½ºÆ®À̸§ | \! | ÀÌ ¸í·ÉÀÇ È÷½ºÅ丮 ¹øÈ£ | \nnn | 8Áø¼ö nnn¿¡ ÇØ´çÇÏ´Â ¹®ÀÚ | \[ | ºñÃâ·Â¹®ÀÚÀÇ ½ÃÄö½º¸¦ ½ÃÀÛÇÑ´Ù. | \] | ºñÃâ·Â¹®ÀÚÀÇ ½ÃÄö½º¸¦ ¸¶Ä£´Ù. |
°£´ÜÇÑ ¿¹¸¦ µé¾îº¸ÀÚ. ¿ì¸®´Â Prompt »ó¿¡ ÇöÀç ½Ã°£°ú, ÀÛ¾÷µð·ºÅ丮
Á¤º¸¸¦ º¸¿©ÁÖ±æ ¿øÇÑ´Ù. ÀÌ·²¶§´Â ¾Æ·¡¿Í °°ÀÌ ÇÏ¸é µÈ´Ù.
[root@localhost httpd]# export PS1="[\t \W]# "
[17:40:37 html]# echo "¼º°øÀûÀ¸·Î ¹Ù²¼±º¿ä"
|
ÀÌ·¸°Ô Çؼ ÇÁ·ÒÇÁÆ®¸¦ º¯°æ½ÃÅ°´Â¹æ¹ýÀ» ¾Ë¾Ò´Ù. ±×·±µ¥, ¾î¶² ÇÑÅÒ
ÀÇ °æ¿ì ÇÑÅÒÀÇ Å¸ÀÌƲ¹Ù Á¦¸ñÀÌ ½Ã½Ã°¢°¢ ¹Ù²î´Â°ÍÀ» º»ÀûÀÌ ÀÖÀ»
°ÍÀÌ´Ù. ÀÌ°Ç ¾î¶»°Ô Çϴ°ÍÀϱî. ?
ÀÌ°Ç bash ½©ÀÇ È¯°æº¯¼öÀÎ PROMPT_COMMAND ¸¦ »ç¿ëÇÏ¿© °¡´ÉÇÏ´Ù.
PROMPT_COMMAND ¿¡´Â ƯÁ¤ ¸í·É¾î(½ºÆ®¸³Æ® ȤÀº ½ÇÇàÆÄÀÏ)°¡ °ªÀ¸·Î
µé¾î°¡ Àִµ¥, »ç¿ëÀÚ¿¡°Ô ÇÁ·ÒÇÁÆ®°¡ ¶³¾îÁö±â Àü¿¡ º¯¼ö¿¡ ÀÖ´Â
¸í·ÉÀÌ ½ÇÇàµÈ´Ù.
[root@localhost /root]# export PROMPT_COMMAND="date"
¿ù 11¿ù 19 17:51:03 KST 2001
[root@localhost /root]# echo "hello world"
hello world
¿ù 11¿ù 19 17:51:19 KST 2001
[root@localhost /root]#
|
À§ÀÇ ¿¹¿¡¼ º¸´Ù½ÃÇÇ »ç¿ëÀÚ ÇÁ·ÒÇÁÆ®°¡ ¶³¾îÁú¶§ ¸¶´Ù, ±×Àü¿¡ "date"
¸í·ÉÀÌ ½ÇÇàµÊÀ» ¾Ë¼ö ÀÖ´Ù.
ÀÌ ¸í·ÉÀ» ¾à°£ º¯°æÇϸé ŸÀÌƲ¹Ù°¡ ±×¶§±×¶§ ¹Ù²îµµ·Ï ¼³Á¤
ÇÒ¼ö ÀÖ´Ù.
[root@localhost /home]# export PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
|
À§ÀÇ °æ¿ì µð·ºÅ丮°¡ º¯°æµÉ¶§ ¸¶´Ù ÀÛ¾÷µð·ºÅ丮°¡ ŸÀÌƲ¹Ù¿¡ Ç¥½Ã
°¡µÈ´Ù.
À§ÀÇ ³»¿ëÀ» /etc/bashrc Á¤µµ¿¡ ÀÔ·ÂÇØ ³õÀ¸¸é âÀ» ¶ç¿ï¶§ ¸¶´Ù
ȯ°æº¯¼öÀÇ ³»¿ëÀÌ Àû¿ëµÉ°ÍÀÌ´Ù.
ÇÏÁö¸¸ ´Ü¼øÈ÷ »ç¿ëÀÚ¿¡°Ô ½Ã°¢ÀûÀ¸·Î ±×·²µíÇÏ°Ô º¸¿©ÁÖ´Â°Í ¿Ü¿¡µµ
PROMPT_COMMAND ¸¦ ÀÀ¿ëÇϸé Á»´õ ´Ù¾çÇÑ ÀϵéÀ» ÇÒ¼ö ÀÖ´Ù.
´ÙÀ½Àå¿¡¼ ÀÌ¿¡ ´ëÇؼ °£´ÜÇÏÁö¸¸ À¯¿ëÇÑ ÇÑ°¡Áö ¿¹¸¦ µé¾î º¸µµ·Ï
ÇÏ°Ú´Ù.
¿äÁò ÄÄÅ;÷°è ÃÖ´ëÀÇ ÈµÎ´Â "º¸¾È"ÀÌ´Ù. ÀÌ·± ´ë¼¼¿¡ ¸ÂÃß¾î¼
»ç¿ëÀÚ°¡ ÇöÀç ¹«½¼ ¸í·ÉÀ» »ç¿ëÁß¿¡ ÀÖ´ÂÁö ½Ç½Ã°£À¸·Î È®ÀÎÇÒ¼ö
ÀÖ´Â °£´ÜÇÑ º¸¾È ÇÁ·Î±×·¥? À» ÀÛ¼ºÇغ¸µµ·Ï ÇÏ°Ú´Ù.
º¸Åë ÀÌ·¯ÇÑ »ç¿ëÀÚ ¸í·ÉÀ» ½Ç½Ã°£À¸·Î ÃßÀûÇÏ´Â ÇÁ·Î±×·¥À» º¸¾È½©
À̶ó°í ÇÑ´Ù. - ¹°·Ð ½ÇÁö º¸¾È½©¿¡´Â ÀÌ¿Ü¿¡µµ, ÆÄÀϺ¸¾È, µð·ºÅ丮
º¸¾È, ÇÁ·Î¼¼½ºº¸¾È µî°ú °°Àº ´Ù¾çÇÑ ±â´ÉÀÌ µé¾î°¡Áö¸¸ ¿©±â¼´Â
»ç¿ëÀÚÀÇ ÀÛ¾÷³»¿ëÀ» ½Ç½Ã°£À¸·Î È®ÀÎÇÒ¼ö ÀÖ´Â ±â´É¸¸ ±¸ÇöÇÏ°Ú´Ù -
º¸Åë º¸¾È½©À» ¸¸µå´Âµ¥´Â ¸¹Àº ½Ã°£°ú Àγ»½ÉÀÌ ÇÊ¿äÇÏÁö¸¸,
½©ÀÇ Æ¯Â¡À» Á¶±Ý¸¸ ¾Ë°í ÀÖ´Ù¸é, ½Ã°£°ú ³ë·ÂÀ» ´ÜÃà½Ãų¼ö°¡ ÀÖ´Ù.
PROMPT_COMMAND ¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ýÀº ¸Å¿ì °£´ÜÇÏ´Ù.
»ç¿ëÀÚÀÇ ÇÁ·ÒÇÁÆ®°¡ ¶³¾îÁ³À»¶§, »ç¿ëÀÚÀÇ À̸§, »ç¿ëÀÚÀÇ °¡Àå
ÃÖ±ÙÀÇ ¸í·É¾îµîÀ» °¡Á®¿Í¼ À̸¦ ÆÄÀÏ·Î ¸¸µé°Å³ª ¼ÒÄÏÀ» ÅëÇؼ,
°ü¸®ÀÚ¿¡°Ô Å뺸Çϵµ·Ï ÇÏ¸é µÈ´Ù.
½©¿¡¼´Â ¹°·Ð history¶ó´Â°É Á¦°øÇϱä ÇÏÁö¸¸, history ´Â ½Ç½Ã°£ÀÌ
¾Æ´Ï´Ù. ÀÏ´ÜÀº ½©ÀÇ ¸Þ¸ð¸®¿¡¼ °ü¸®ÇÏ°í ÀÖ´Ù°¡, ·Î±×¾Æ¿ô Çϸé
±×¶§ ÆÄÀÏ·Î ÀúÀåÀÌ µÈ´Ù. Áï ·Î±×¾Æ¿ô Çϱâ Àü±îÁö´Â ¹«½¼ÀÏÀ»
ÇÏ´ÂÁö Åë ¾Ë¼ö°¡ ¾ø°Ô µÈ´Ù. ±×¸®°í history ¸í·ÉÀ» ÀÌ¿ëÇؼ ÆíÁý
°¡´ÉÇÏ´Ù.
´ÙÀ½°ú °°ÀºÀ̸§À¸·Î moniter.sh ¶õ °£´ÜÇÑ ½ºÅ©¸³Æ® ÆÄÀÏÀ»
ÀÛ¼ºÇÑ´Ù.
LAST_COMMAND=`tail -1 /root/dump`
CURRENT_COMMAND=`history 1`
if [ "$LAST_COMMAND" != "$CURRENT_COMMAND" ]
then
echo "$CURRENT_COMMAND" >> /root/dump
fi
|
À§ÀÇ ½ºÅ©¸³Æ®¸¦ Àû´çÇÑ µð·ºÅ丮¿¡ º¹»çÇÑ´ÙÀ½¿¡, °¢ »ç¿ëÀÚ°¡
·Î±×ÀÎÇÒ¶§ ȯ°æº¯¼ö·Î ÃʱâÈ ½ÃÅ°¸é µÈ´Ù.
export PROMPT_COMMAND="/usr/bin/moniter.sh"
|
¹°·Ð À§ÀÇ ÇÁ·Î±×·¥¿¡´Â ¿©·¯°¡Áö ºÎÁ·ÇÑÁ¡ÀÌ ¸¹´Ù.
¸¶Áö¸· ¸í·ÉÀÌ ÈÀÏ·Î ÀúÀåµÇ¸ç, ¶ÇÇÑ »ç¿ëÀÚ°¡
½©ÀÇ Æ¯¼ºÀ» À߾˰í ÀÖ°í, ¿©±â¿¡ ÁÖÀǸ¦ ±â¿ïÀδٸé
ȯ°æº¯¼ö¸¦ ºÐ¼®Çؼ À̸¦ Á¶ÀÛÇÒ¼ö ÀÖ´Ù.
ÀÌ´Â ¿©·¯°¡Áö ¹æ¹ýÀ» ÅëÇؼ ÇØ°áÇÒ¼ö ÀÖÁö¸¸, ÀÌ´Â ½©½ºÅ©¸³ÆÃÀÇ
¹üÀ§¸¦ ¹þ¾î³ª´Â °ÍÀÓÀ¸·Î, °£´ÜÈ÷ ÀÌ·¯ÇÑ ÀÏÀ» ÇÒ¼öµµ ÀÖ´Ù¶ó´Â °Í¸¸
ÀÌÇØÇØ µÎ±â·Î ÇÏÀÚ.
ÀÌ ±ÛÀ» Àд ¿©·¯ºÐÀÌ ÁÁÀº ¹æ¹ýÀ» »ý°¢ÇØ º¸±â ¹Ù¶õ´Ù.
(¹°·Ð °¡Àå ÁÁÀº ¹æ¹ýÀº ½© ½î¾²¸¦ ¼öÁ¤ÇÏ´Â °Å´Ù. »ý°¢¸¸Å
º¹ÀâÇÏÁö ¾ÊÀ¸´Ï ¿¬±¸ÇØ º¸½Ã±æ..)
|
|