· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Docbook Sgml/Shell_Programming-TRANS

You are not allowed to 'fullsearch'


Shell ÇÁ·Î±×·¡¹ÖÀÇ ±âº»

ÀÌ ¹®¼­´Â Linux focus ÀÇ 2001 ³â 9 ~ 10 ¿ù ±â»çÀÇ "point Shell Programming" À» ¹ø¿ªÇÑ°ÍÀÌ´Ù. ¿ÀŸ ¹× Å»ÀÚ ¿ë¾îÀÇ »ç¿ë¿¡ À־ ±×¸® ÁÖÀǸ¦ ±â¿ïÀÌÁö ¾ÊÀº °ü°è·Î ¹®¼­°¡ ¸Å²ô·´Áö ¾Ê°Ô ÁøÇàµÉ¼ö ÀÖÀ½À» ¹Ì¸® ¹àÈ÷¸ç, ÀÌ·¯ÇÑ ¹ö±×´Â Â÷ÈÄ ¾÷±×·¹À̵å? ¹öÁ¯¿¡¼­ ¼öÁ¤ÇÒ°ÍÀÓÀ» ¾à¼Ó? ÇÑ´Ù. ±×¸®°í ¿øº»¿¡ Æ÷ÇԵǾî ÀÖÁö ¾Ê´Â ³»¿ëµéµµ »ó´ç¼ö µé¾î°¡ ÀÖ´Ù.

¸®´ª½º¸¦ À§ÇÑ ´Ù¾çÇÑ ±×·¡ÇÈÀÎÅÍÆäÀ̽º¸¦ Áö¿øÇÏ´Â ÇÁ·Î±×·¥µéÀÌ ÀÖÀ½¿¡µµ ºÒ±¸ÇÏ°í ½©½ºÅ©¸³Æ®´Â ¿©ÀüÈ÷ ¸¹Àº »ç¶û?À» ¹ÞÀ¸¸ç ´Ù¾çÇÑ ºÎºÐ¿¡¼­ ÇʼöÀûÀÎ µµ±¸·Î »ç¿ëµÇ°í ÀÖ´Ù. ¾ð¶æ º¸±â¿¡ ±×·¡ÇÈÀÎÅÍÆäÀ̽ºÀÇ ´Ù¸¥ µµ±¸µé¿¡ ºñÇؼ­ »ç¿ëÇϱ⠾î·Á¿ö º¸ÀÌ°í ´ÙºÐÈ÷ ¿ø½ÃÀûÀ¸·Î º¸ÀÌÁö¸¸, ½© ÇÁ·Î±×·¡¹ÖÀ» ÅëÇÏ¿©, ¸¹Àº ³ëµ¿ÀÌ ÇÊ¿äÇÑ ÀÛ¾÷µéÀ» ´Ü¼øÈ­ ½Ãų¼ö ÀÖÀ¸¸ç, ÈǸ¢ÇÑ ½Ã½ºÅÛ °ü¸® µµ±¸·Î »ç¿ëÇÒ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¶ÇÇÑ ´ë±Ô¸ðÇÁ·ÎÁ§Æ®¸¦ ½ÃÀÛÇϱâ Àü¿¡ °£´ÜÇÑ ÇÁ·ÎÅäŸÀÔÀ» ¸¸µé¼ö ÀÖµµ·Ï ÇØÁÖ¸ç, ÀüüÀûÀ¸·Î ¾î¶² ÀÏÀ» ¼öÇàÇϴµ¥ À־ ½Ã°£°ú ³ë·ÂÀ» Àý¾àÇϵµ·Ï µµ¿ÍÁØ´Ù. ÀÌ·¸°Ô Àý¾àµÈ ½Ã°£À» Á»´õ »ý»êÀûÀÎÀÏ(µð¾Æºí·Î¸¦ Çϰųª, Ä¿ÇǸ¦ ¸¶½Ã´Â) ¿¡ÅõÀÚÇÒ¼ö ÀÖµµ·Ï µµ¿ÍÁØ´Ù. ÀÌ ¹®¼­¸¦ ÅëÇؼ­ ¿ì¸®´Â ÀÌ·¯ÇÑ ½© ½ºÅ©¸³Æ®ÀÇ »ç¿ë¹ý¿¡ ´ëÇؼ­ ¹è¿ì°Ô µÉ°ÍÀÌ´Ù. ¹®¼­ÀÇ ¼³¸íÀº ±ÛÀ»Àд ¿©·¯ºÐÀÌ ¾ÆÁÖ ±âº»ÀûÀÎ ÇÁ·Î±×·¡¹ÖÀ» Çغ»ÀûÀÌ ÀÖ°í Unix/Linux ȯ°æÀ» ÇѹøÀÌ¶óµµ Á¢ÇغÃÀ» °Å¶ó´Â °¡Á¤ÇÏ¿¡ ÀÌ·ç¾îÁú °ÍÀÌ´Ù.

ÀÌ ¹®¼­´Â GNU Free Documentation License ¸¦ °¡Áý´Ï´Ù.


1. µé¾î°¡±âÀü¿¡

1.1. ÇÊ¿äÇÑ °Íµé

¸®´ª½º°¡ ±ò·ÁÀÖ´Â ÄÄÅÍ ÇѴ븸 ÀÖÀ¸¸é µÈ´Ù. ¶Ç´Â ¿ø°Ý ¸®´ª½º °èÁ¤À» °¡Áö°í ÀÖÀ¸¸é µÈ´Ù. bash ½©ÀÌ ÇÊ¿äÇÏ°ÚÁö¸¸, ´ëºÎºÐÀÇ ¸®´ª½º ¹Ú½º¿¡ °ÅÀÇ 100% ±ò·ÁÀÖ´Ù°í º¸¸é µÇ´Ï °ÆÁ¤ÇÒ ÇÊ¿ä ¾øÀ» °ÍÀÌ´Ù. ¸®´ª½º¹Ú½º¿¡ ·Î±×ÀÎ ÇÑ´ÙÀ½¿¡ "bash" ¶ó°í ¸í·ÉÀ» ³»·Áº¸ÀÚ, Á¦´ë·Î ½ÇÇàµÈ´Ù¸é bash ½©ÀÌ ±ò·Á ÀÖ´Â °ÍÀÌ´Ù. ÀÚ½ÅÀÇ ½Ã½ºÅÛÀÌ ¾Æ´Ò°æ¿ì ±âº»½©·Î bash ¿ÜÀÇ csh ³ª tcsh µîÀÇ ½©ÀÌ ±âº»½©·Î ÁöÁ¤µÇ¾î ÀÖÀ»¼öµµ ÀÖ´Ù. ÀÌ·²°æ¿ì °ü¸®ÀÚ¿¡°Ô ±âº»½©ÀÇ º¯°æÀ» ¿äûÇØ¾ß ÇÑ´Ù (¹°·Ð ·Î±×ÀδÙÀ½¿¡ ÇÁ·ÒÇÁÆ® »ó¿¡¼­ "/bin/bash" ¸í·ÉÀ» ½ÇÇàÇÔÀ¸·Î½á º£½¬ ½© ȯ°æÀ¸·Î µé¾î°¥¼öµµ ÀÖÁö¸¸) ÀÚ½ÅÀÇ ±âº» ½© ȯ°æÀ» ¾Ë¾Æº¸°í ½Í´Ù¸é "/etc/passwd" ÆÄÀÏÀ» º¸¸é µÈ´Ù. Âü°í·Î ÇÊÀÚÀÇ °æ¿ì "yundream:x:500:500::/home/yundream:/bin/bash" ·Î µÇ¾î ÀÖ´Ù.


1.2. ½©À̶õ ¹«¾ùÀΰ¡

½©Àº ´Ù¸¥¸»·Î ¸í·É¾î Çؼ®±â¶ó°í ºÒ¸®¿î´Ù. Àΰ£ÀÇ ¸í·É¾î¸¦ Çؼ®ÇÏ¿©(ÁÖ·Î ÀÚÆÇÀ» ÅëÇÏ¿© ¸í·ÉÇÔ), ½Ã½ºÅÛ(Ä¿³Î)¿¡ Àü´ÞÇÏ´Â ÀÏÀ» ÇÑ´Ù. ¸í·É¾î¸¦ Çؼ®ÇÏ´Â ¹æ¹ý¿¡ µû¶ó¼­ csh, tcsh, ksh, bash µîÀÇ ´Ù¾çÇÑ ½©ÀÌ Á¸ÀçÇÑ´Ù. À̸¦Å×¸é »ç¿ëÀÚ¿Í Ä¿³Î°£ÀÇ ¿øÇÒÇÑ Åë½ÅÀ» °¡´ÉÇϵµ·Ï µµ¿ÍÁÖ´Â Å뿪»ç Á¤µµ·Î »ý°¢ÇÏ¸é µÉ°ÍÀÌ´Ù. ¾î¶² À̸§ÀÇ ½©ÀÌ°Ç ±âº»ÀûÀ¸·Î ÇÏ´Â ÀÏÀº °°´Ù. ´Ù¸¸ º¯¼öÀÇ »ç¿ë¹æ¹ý, »ç¿ëµÇ¾îÁö´Â ¹®¹ý, ±×¹ÛÀÇ Ãß°¡ÀûÀÎ ±â´Éµé¿¡ À־ Â÷ÀÌ°¡ ÀÖÀ» »ÓÀÌ´Ù. ±×·¯ÇÑ ÀÌÀ¯·Î ÇϳªÀÇ ½©À» »ç¿ëÇÒ¼ö ÀÖ´Ù¸é, ´Ù¸¥ ½©µµ ±×¸® ¾î·ÆÁö ¾Ê°Ô »ç¿ë°¡´ÉÇÏ´Ù.


2. ½ºÅ©¸³Æ®¸¦ ¸¸µéÀÚ

¸®´ª½º¿¡´Â ¸Å¿ì´Ù¾çÇÑ ¿©·¯ Á¾·ùÀÇ ½©ÀÌ Á¸ÀçÇϴµ¥, ÀÌ ¹®¼­¿¡¼­´Â bash(bourne again shell)À» »ç¿ëÇϵµ·Ï ÇÏ°Ú´Ù. ÀÌÀ¯´Â °¡Àå ³Î¸® »ç¿ëµÇ¸ç, ¹è¿ì±â ½±°í ¶ÇÇÑ ÇÊÀÚ°¡ »ç¿ëÇÏ´Â ½©À̱⠶§¹®ÀÌ´Ù. ¶§¹®¿¡ ÀÌ ¹®¼­¿¡ ÀÖ´Â ¸ðµç ½î¾²¿ª½Ã bash¸¦ ±âÁØÀ¸·Î ÀÛ¼ºµÇ¾î ÀÖ´Ù. ½© ÇÁ·Î±×·¡¹ÖÀ» Çϱâ À§Çؼ­´Â nedit, kedit, emasc, vi µîÀÇ ¹®ÀÚ ÆíÁý±â°¡ ÇÊ¿äÇÏ´Ù. ¸¶À½¿¡ µå´Â ¾Æ¹« ÆíÁý±â³ª »ç¿ëÇϵµ·Ï ÇÏÀÚ. ½© ÇÁ·Î±×·¥ÀÇ Ã¹¹ø° ¶óÀÎÀº ¾Æ·¡¿Í °°Àº ¶óÀÎÀ» Æ÷ÇÔÇØ¾ß ÇÑ´Ù.

	#!/bin/sh
	
#! Àº ½©¿¡°Ô ÀÌ ÇÁ·Î±×·¥À» ½ÇÇàÇϱâ À§Çؼ­ #! ´ÙÀ½¿¡ ¿À´Â ¾Æ±Ô¸ÕÆ®¸¦ ½ÇÇàÇÁ·Î±×·¥À¸·Î »ç¿ëÇÑ´Ù´Â °ÍÀ» ¾Ë·ÁÁÖ±â À§Çؼ­ »ç¿ëµÈ´Ù. À§ÀÇ °æ¿ì¿¡´Â /bin/sh ¸¦ »ç¿ëÇ϶ó°í µÇ¾îÀÖ´Ù. ÀÏ´Ü À§ÀÇ Çü½ÄÀ¸·Î ÇÁ·Î±×·¥À» ¸¸µé°í À̸¦ ÀúÀåÇÏ¿´´Ù¸é, À̸¦ ½ÇÇà°¡´ÉÇÑ ÆÄÀÏ·Î ¸¸µé¾îÁà¾ß ÇÑ´Ù. ¸®´ª½º(Unix Æ÷ÇÔ) Àº À©µµ¿Í ´Þ¸® ÆÄÀÏÀÇ È®ÀåÀÚ¸í(.exe .com µî)À¸·Î ½ÇÇàÆÄÀÏ À¯¹«¸¦ °áÁ¤ÇÏÁö ¾ÊÀ¸¸ç, ÆÄÀϱÇÇÑ ¼³Á¤ÀÇ º¯°æÀ» ÅëÇÏ¿© ½ÇÇàÆÄÀÏ·Î °áÁ¤ÇÑ´Ù. ½ÇÇàÆÄÀÏ·Î ¸¸µé±â À§Çؼ­´Â ¾Æ·¡¿Í °°ÀÌ ÇÏ¸é µÇ´Ù.
	chmod +x filename
	
À§¿Í °°ÀÌ ÇÏ°í³ª¼­ ./filename ¸í·ÉÀ» ³»¸®¸é ÀÛ¼ºÇÑ ½© ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÈ´Ù.


3. ÁÖ¼®

ÁÖ¼®Àº "#" À» ÀÌ¿ëÇϸç "#" ¿¡¼­ºÎÅÍ ¶óÀÎÀÇ ¸¶Áö¸· ±îÁö°¡ ÁÖ¼®À¸·Î 󸮵ȴÙ. ÁÖ¼®ºÎºÐÀº ½©ÀÌ ½ÇÇàµÉ¶§ ¹«½ÃµÈ´Ù. ÁÖ¼®Àº ÇÁ·Î±×·¥¿¡ ´ëÇÑ ÀÌÇظ¦ ½±°Ô Çϱâ À§ÇÑ ¹æ¾ÈÀ¸·Î »ç¿ëµÈ´Ù.

	#!/bin/sh
	# ¸¸µçÀÌ : yundream
	# ÇÏ´ÂÀÏ : hello world ¸¦ Ãâ·ÂÇÑ´Ù.

	echo "hello world"   # ¹®ÀÚ¿­À» Ãâ·ÂÇÑ´Ù.
	


4. º¯¼ö

º¯¼ö´Â ¸ðµç ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ °¡Àå ±âº»ÀÌ µÇ´Â ¿ä¼ÒÀÌ´Ù. "º¯¼ö" ¶ó°íºÎ¸£°í´Â ÀÖÁö¸¸, ¾î¶² µ¥ÀÌŸ¸¦ ÀúÀåÇϱâ À§ÇÑ "Àӽðø°£" À̶ó°í ¸»ÇÏ´Â°Ô ´õ¿í Á¤È®ÇÑ Ç¥ÇöÀÏµí ½Í´Ù. Àΰ£ µÎ³ú·Î ÇÏÀÚ¸é, ´ë³úÇÇÁúÀÇ Çѱ¸¿ªÂë µÉ±î? ½©¿¡ÀÇ º¯¼öÀÇ µ¥ÀÌŸ ŸÀÔÀº string(¹®ÀÚ¿­) ¸¸À» °¡Áö¸ç, C ¾ð¾î¿Í °°Àº º¯¼ö ¼±¾ðÀ» ÇÊ¿ä·Î ÇÏÁö ¾Ê´Â´Ù. ÀÌ´Â perl, python, php ¿ª½Ã ¸¶Âù°¡Áö ÀÌ´Ù. º¯¼ö¿¡ °ªÀ» ³Ö±â À§Çؼ­´Â ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù.

	varname=value
	
º¯¼öÀÇ »ç¿ëÀ» À§Çؼ­´Â º¯¼ö¸í ¾Õ¿¡ $ ¸¦ ºÙ¿©ÁÖ¸é µÈ´Ù. º¯¼ö¿¡ µ¥ÀÌŸ¸¦ ÀúÀåÇϱâ À§Çؼ­´Â ´ëÀÔ¿¬»êÀÚ"=" ¸¦ »ç¿ëÇÑ´Ù. ´ëÀÔ¿¬»êÀÚ¿Í, ÇÇ¿¬»êÀÚ/¿¬»êÀÚ »çÀÌ¿¡´Â °ø¹éÀÌ Á¸ÀçÇÏ¸é ¾ÈµÈ´Ù.
	#!/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" ¶ó´Â Ãâ·Â¹°À» ¾ò°Ô µÈ´Ù.


5. ´ëÈ­¸ðµå

½©½ºÅ©¸³Æ®¸¦ Á¦ÀÛÇϴµ¥ À־ À§¿¡¼­¿Í °°ÀÌ ÆÄÀÏ·Î ÀúÀåÇÑ´ÙÀ½¿¡ À̸¦ ½ÇÇà±ÇÇÑÀ» Á־ ½ÇÇàÇÏ´Â ¹æ¹ýµµ ÀÖÁö¸¸, °£´ÜÇÏ°Ô ÀÛ¾÷À» ¼öÇàÇØ¾ß ÇÒ°æ¿ì ÆÄÀÏÀ» ¸¸µéÁö ¾Ê°í, ½©»ó¿¡¼­ Á÷Á¢ ½ÇÇà½ÃÅ°´Â ¹æ¹ýµµ ÀÖ´Ù.

	[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)
		


6. ½©¸í·É°ú Á¦¾î±¸Á¶

À̹øÀå¿¡¼­´Â ½©½ºÅ©¸³Æ®¸¦ ´Ù·ç´Âµ¥ ÇÊ¿äÇÑ 3°¡Áö ºÎ¼öÀûÀÎ ÁÖÁ¦¸¦ ¼³¸íÇÏ°Ô µÉ°ÍÀÌ´Ù.


6.1. À¯´Ð½º ¸í·É¾îµé

½©½ºÅ©¸³Æ®´Â À¯´Ð½º ¸í·É¾îµéÀÇ ÁýÇÕÀ̹ǷÎ, À¯´Ð½º ¸í·É¾î¿¡ ´ëÇؼ­ ¾î´ÀÁ¤µµÀÇ ¼÷Áö°¡ ÇÊ¿äÇÏ´Ù. ÀÌ·¯ÇÑ ¸í·É¾îµéÀº ÁÖ·Î ÆÄÀÏ°ú ¹®ÀÚ¿­À» ÆíÁýÇϱâ À§Çؼ­ ¾²¿©Áø´Ù. ÀÌ·¯ÇÑ ¸í·É¾îµéÁß ÀÚÁÖ ¾²ÀÌ´Â ¸í·É¾îµéÀ» Á¤¸®Çß´Ù.

표 1. ÀÚÁÖ »ç¿ëµÇ´Â À¯´Ð½º ¸í·É¾îµé

echo "some text"some text ¸¦ È­¸é¿¡ Ãâ·ÂÇÑ´Ù
wc -l fileÆÄÀÏÀÇ ¶óÀμö
cp sourcefile destfilesourcefile À» destfile ·Î º¹»ç
mv oldname newnameÆÄÀÏÀ̸§À» ¹Ù²Ù°Å³ª ÆÄÀÏÀÇ À̵¿
rm fileÆÄÀÏ Áö¿ì±â
grep 'pattern' fileÆÄÀÏ¿¡¼­ patternÀÇ ¹®ÀÚ¿­À» ã±â
cub -b colnum fileÆÄÀÏ¿¡¼­ ¹®ÀÚ¿­À» Ä÷³´ÜÀ§·Î Àß¶ó¼­ º¸¿©ÁÜ
cat file.txtfile.txt ¸¦ Ç¥ÁØÃâ·Â(stdout) ½ÃÅ´
file somefilesomefile ÀÇ ÆÄÀÏŸÀÔ ¾Ë¾Æ³»±â
read varÀԷ°ªÀ» º¯¼ö¸ívar ¿¡ ´ëÀÔ
sort file.txtfile.txt ¸¦ ¶óÀδÜÀ§·Î Á¤·Ä
uniqÆÄÀÏ¿¡¼­ Áߺ¹µÇ´Â ¹®ÀÚ¿­À» Á¦°Å
teeÇ¥ÁØÃâ·ÂµÇ´Â Á¤º¸¸¦ ÆÄÀÏ·Î ¾²±â
basename fileµð·ºÅ丮¸íÀ» Á¦¿ÜÇÑ ÆÄÀÏÀÇ ½ÇÁ¦À̸§À» µ¹·ÁÁÜ
dirname fileÆÄÀÏÀ̸§À» Á¦¿ÜÇÑ µð·ºÅ丮ÀÇ À̸§À» µ¹·ÁÁÜ
head fileÆÄÀÏÀÇ Ã³À½ ¸î¶óÀÎÀ» Ãâ·ÂÇÔ
tail fileÆÄÀÏÀÇ ¸¶Áö¸· ¸î¶óÀÎÀ» Ãâ·ÂÇÔ
sedÁ¤±ÔÇ¥Çö¿¡ ÀÇÇÑ ¹®ÀÚ¿­ÀÇ °Ë»ö¹× ġȯ¿¡ »ç¿ëµÊ


6.2. pipes(ÆÄÀÌÇÁ), redirection(ÀçÁöÇâ)

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 ¿¡ ÀúÀåÇÏ´Â ÀÏÀ» ¼öÇàÇÑ´Ù.


6.3. Á¦¾î±¸Á¶

"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 ÀÇ °ªÀ» Å×½ºÆ® ÇÔÀ¸·Î½á »ç¿ëÀÚ°¡ ¾î¶² ½©À» »ç¿ëÇÏ´ÂÁö ¾Ë¾Æ³»´Â ÀÏÀ» ÇÑ´Ù.


6.4. °£´ÜÇÏ°Ô Ç¥ÇöÇϱâ

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 ...
	do
		...
	done
			

´ÙÀ½Àº 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
			
À§ÀÇ ½ºÅ©¸³Æ®¸¦ º¸¸é $* À̶ó´Â º¯¼ö°¡ º¸ÀÏ°ÍÀÌ´Ù. $*´Â ¸ðµç ¾Æ±Ô¸ÕÆ®¸¦ ÀúÀåÇÏ´Â º¯¼öÀÌ´Ù.


6.5. Quoting

	#!/bin/sh
	echo $SHELL
	echo "$SHELL"
	echo '$SHELL'
			
À§ÀÇ ½ºÅ©¸³Æ®¿¡¼­ 1¹ø°¿Í 2¹ø°ÀÇ °æ¿ì ÀÚ½ÅÀÌ »ç¿ëÇÏ´Â ½©À» Ãâ·ÂÇÏÁö¸¸ (¾Æ¸¶µµ /bin/bash) 3¹ø°ÀÇ °æ¿ì $SHELL ÀÚü¸¦ Ãâ·ÂÇÏ´Â°É º¼¼ö ÀÖÀ»°ÍÀÌ´Ù. ' ¸¦ »ç¿ëÇÏ¸é ½©ÀÌ »ç¿ëÇϴ Ư¼ö¹®ÀÚ(keyword)¸¦ ÀϹÝÈ­ ½ÃÄѼ­ »ç¿ëÇÒ¼ö ÀÖ´Ù. ¶ÇÇÑ ¹é½½·¯½¬¸¦ »ç¿ëÇؼ­ ¿ÍÀϵåÄ«µå³ª º¯¼ö±âÈ£¿Í °°Àº Ư¼öÇÑ ¹®ÀÚ¸¦ ÀϹÝÈ­ ½Ãų¼öµµ ÀÖ´Ù.
	echo \$SHELL
			
À§¿¡¼­ ¹é½½·¯½¬¸¦ »ç¿ëÇÔÀ¸·Î½á $ ÀÇ Æ¯º°ÇÑ Àǹ̸¦ Á¦°Å½ÃÄÑ ¹ö¸²À¸·Î½á $SHELL À̶õ ¹®ÀÚ¿­À» Ãâ·ÂÇϵµ·Ï ¸¸µç´Ù. ¿¹¸¦ µé¾î¼­ $1,000 ¸¦ È­¸é¿¡ Ãâ·Â ½ÃÅ°·Á°í ÇÑ´Ù°í °¡Á¤ÇÏÀÚ ÀÌ·²¶§ ¾Æ·¡¿Í °°ÀÌ ½á¹ö¸®¸é
	echo $1000	
			
¾Æ¹«·± °ªµµ Ãâ·ÂµÇÁö ¾ÊÀ½À» ¾Ë¼ö ÀÖ´Ù. ¿Ö³Ä¸é ½©Àº 1000 ¾Õ¿¡ $ °¡ ÀÖÀ½À¸·Î À̸¦ º¯¼ö¸íÀ¸·Î »ý°¢ÇÏ°í ÀÌ º¯¼ö¸í¿¡ ÀúÀåµÈ °ªÀ» echo ÇÏ·Á°í ÇÒ°ÍÀ̱⠶§¹®ÀÌ´Ù. ¿ì¸®°¡ ¿øÇÏ´Â °ªÀ» ¾òÀ»·Á¸é ¾Æ·¡¿Í °°ÀÌ Äڵ带 ¼öÁ¤ÇØ¾ß ÇÑ´Ù.
	echo \$1000
			


6.6. ÇÔ¼ö

¿©·¯ºÐÀÌ Á»´õ º¹ÀâÇÑ ÇÁ·Î±×·¥À» ¸¸µé´Ùº¸¸é ÇÔ¼öÀÇ Çʿ伺À» ´À³¢°Ô µÉ°ÍÀÌ´Ù. ÇÔ¼ö¸¦ »ç¿ëÇÔÀ¸·Î½á, Á»´õ ÀÌÇØÇϱ⠽±°í ´Ü¼øÇÑ ÇÁ·Î±×·¥À» ¸¸µé¼ö ÀÖÀ¸¸ç, Àç»ç¿ëÀ» ¿ëÀÌÇϵµ·Ï ¸¸µé¼ö ÀÕ´Ù. ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÑ´Ù.

	functionname()
	{
		body
	}
			
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
			


6.7. ¸í·ÉÇà ÀÎÀÚ(argument)

°¢ ¸í·ÉÇà ÀÎÀÚ´Â $* °ú $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 ¸¦ ÀÌ¿ëÇؼ­ ÇÊ¿äÇÑ ¸¸Å­ ¾Æ±Ô¸ÕÆ®¸¦ À̵¿½ÃŲ´Ù.


7. ¿¹Á¦

7.1. ÀϹÝÀûÀÎ ½©ÇÁ·Î±×·¥ÀÇ ±¸Á¶

À̹øÀå¿¡¼­´Â ±×µ¿¾È ¹è¿ü´ø ±âº»ÀûÀÎ ³»¿ëµéÀ» Åä´ë·Î, ½ÇÁúÀûÀÎ ½©ÇÁ·Î±×·¥À» ¸¸µéµµ·Ï Çغ¸ÀÚ. ¸ðµç Á¾·ùÀÇ ÈǸ¢ÇÑ ½©½ºÅ©¸³Æ®´Â µµ¿ò¸»À» °¡Áö°í ÀÖÀ¸¸ç, ¾Æ±Ô¸ÕÆ®¿É¼ÇÀ» ÆĽÌÇÏ´Â ÀϹÝÀûÀÎ ·çƾÀ» °¡Áö°í ÀÖ´Ù. À̹ø¿¡ »õ·Î¸¸µé ½ºÅ©¸³Æ®´Â ÀÌ·¯ÇÑ ÁÁÀº ½ºÅ©¸³ Æ®°¡ °¡Áö´Â ·çƾµéÀ» Æ÷ÇÔÇÏ°Ô µÉ°ÍÀÌ´Ù.


7.2. ¹ÙÀ̳ʸ®¸¦ 10Áø¼ö·Î ¹Ù²ãÁÖ´Â

ÀÌ ½ºÅ©¸³Æ®´Â ¹ÙÀ̳ʸ®¸¦ ¼ýÀÚ·Î ¹Ù²ãÁÖ´Â ÀÏÀ»ÇÑ´Ù. °£´ÜÇÑ »ê¼ö °Ô»êÀ» À§Çؼ­ 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
		
À§ ÇÁ·Î±×·¥ÀÇ ºÐ¼®Àº ¿©·¯ºÐ °¢ÀÚ¿¡°Ô ¸Ã±â°Ú´Ù.


7.3. µð¹ö±ë

µð¹ö±ëÀ» À§ÇÑ °¡Àå°£´ÜÇÑ ¹æ¹ýÀº echo ¸í·ÉÀ» ÀÌ¿ëÇؼ­ °á°ú°ªÀ» Ãâ·ÂÇغ¸´Â ¹æ¹ýÀÌ´Ù. - À̹æ¹ýÀº ´Ù¸¥ ¸ðµç ¾ð¾î¿¡µµ °øÅëÀûÀ¸·Î Àû¿ëµÈ´Ù. C´Â printf, PerlÀº print µîÀÌ µÉ°ÍÀÌ´Ù - ´ç½ÅÀº echo ¸¦ ÀÌ¿ëÇؼ­ º¯¼ö°ªÀ» ¾Ë¾Æº½À¸·Î½á, ¾î´ÀºÎºÐ¿¡¼­ ½Ç¼ö¸¦ Çß´ÂÁö¸¦ ¾Ë¼ö ÀÖ´Ù. ¾Æ¸¶µµ ´ëºÎºÐÀÇ ½© ÇÁ·Î±×·¡¸Ó´Â ÀÌ·¯ÇÑ ½Ç¼ö¸¦ ã´Âµ¥ Àüü ÇÁ·Î±×·¥À» Â¥´Â ½Ã°£ÀÇ 80% Á¤µµ¸¦ º¸³¾°ÍÀÌ´Ù. ½©½ºÅ©¸³Æ®ÀÇ ÀÕÁ¡Àº ÀÌ·¯ÇÑ Å×½ºÆ®¸¦ À§Çؼ­ echo ¹®À» »ç¿ëÇϴµ¥, ´Ù½Ã ÄÄÆÄÀÏÇÒ ÇÊ¿ä°¡ ¾ø¾î¼­, ½Ã°£À» Àý¾àÇÒ¼ö ÀÖ´Ù¶ó´Â °ÍÀÌ´Ù.

½©½ºÅ©¸³Æ®¸¦ µð¹ö±ë ¸ðµå·Î µ¹¸®°í ½Í´Ù¸é ¾Æ·¡¿Í °°ÀÌ ÇÏ¸é µÈ´Ù. µð¹ö±ë ÇÏ°íÀÚ ÇÏ´Â ½©½ºÅ©¸³Æ®ÀÇ À̸§Àº strangescript ¶ó°í ÇÏÀÚ.

	sh -x strangescript
			
À§¿Í °°ÀÌ ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇϸé, ½©ÀÌ ½ÇÇàµÇ´Â µ¿¾È¿¡ »ç¿ëµÈ º¯¼öÀÇ ¸ðµç °ªÀ» È­¸é»ó¿¡ Ãâ·Â½ÃÄÑÁØ´Ù. ±×·³À¸·Î ¾î´À °÷¿¡¼­ ½Ç¼ö¸¦ Çß´ÂÁö ½±°Ô ãÀ»¼ö ÀÖ´Ù.

	sh -n strangescript
			
À§¿Í °°ÀÌ "-n" ¿É¼ÇÀ» ÀÌ¿ëÇϸé syntax ¿À·ù¸¦ ã¾Æ³¾¼ö ÀÖ´Ù. À§ÀÇ ¿É¼Ç¿¡¼­´Â syntax ¿À·ù ¿ÜÀÇ ´Ù¸¥ °ªµéÀº º¸¿©ÁÖÁö ¾Ê´Â´Ù.


8. È¿À²ÀûÀÎ ÀÛ¾÷À» À§Çؼ­

´Ù¸¥ ¿©·¯°¡Áö ÈǸ¢ÇÑ ¾ð¾î(C, Perl, Python)°¡ ÀÖÀ½¿¡µµ ºÒ±¸ÇÏ°í ¿©ÀüÈ÷ ½©À» »ç¿ëÇÏ´Â ÀÌÀ¯´Â È¿À²ÀûÀÎ ÀÛ¾÷À» À§Çؼ­ ÀÏ°ÍÀÌ´Ù. bash ´Â »ç¿ëÀÚ°¡ Áߺ¹½Ã°£À» ÁÙÀÌ°í, ÀÛ¾÷À» ºü¸£°í È¿À²ÀûÀ¸·Î ÇÒ¼ö ÀÖµµ·Ï Çϱâ À§Çؼ­ history, ¸í·É¾îġȯ °ú °°Àº ¿©·¯°¡Áö ±â´ÉµéÀ» Á¦°øÇÑ´Ù.


8.1. ȯ°æº¯¼ö

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 ¸í·ÉÀ» ÀÌ¿ëÇÏ¸é µÈ´Ù. ÀÌ·¸°Ô Çؼ­ ¼³Á¤µÈ ȯ°æº¯¼ö´Â ÇöÀç ½©¿¡¼­ ½ÇÇàµÇ´Â ¸ðµç ÀÚ½Ä ÇÁ·Î¼¼½º¿¡ »ó¼Ó µÇ°Ô µÈ´Ù.


8.2. history

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
			


8.3. ÃÖ±Ù¸í·É¾î ġȯ

¾Æ·¡¿Í °°Àº »óȲÀ» °¡Á¤Çغ¸ÀÚ

	[root@localhost /]# vp file1 file2
	bash: vp: command not found
			
»ç½ÇÀº file1 À» file2 ·Î º¹»çÇÏ´Â ÀÛ¾÷À» ÇÏ±æ ¿øÇßÀ¸³ª, cp ¸¦ vp ·Î Ä¡´Â ¿À·ù¸¦ ¹üÇß´Ù. À̸¦ Á¤Á¤Çϱâ À§Çؼ­´Â óÀ½ºÎÅÍ ´Ù½ÃÄ¡°Å³ª, ÀÚÆÇÀ» "v" ±îÁö ¿òÁ÷ ¿©¼­ À̸¦ "c"·Î ±³Ã¼ ÇØ¾ß ÇÒ°ÍÀÌ´Ù. ÀÌ·²°æ¿ì "^"¸¦ »ç¿ëÇϸé ÀÛ¾÷À» Á»´õ »¡¸® ÇÒ¼ö ÀÖ´Ù.
	[root@localhost /]# ^v^c
	cp file1 file2
			
"^[¿øº»¹®ÀÚ¿­]^[¹Ù²ð¹®ÀÚ¿­]" ÀÇ Çü½ÄÀ¸·Î »ç¿ëÇϸé, °¡Àå ÃÖ±ÙÀÇ ¸í·É¿¡¼­ ¿øº»¹®ÀÚ¿­À» ¹Ù²ð¹®ÀÚ¿­·Î ġȯÇÏ¿© ¸í·ÉÀ» ´Ù½Ã ½ÇÇàÇÏ°Ô µÈ´Ù.


8.4. Prompt

Prompt ¶õ ½©ÀÌ »ç¿ëÀÚÀÇ ÀÔ·ÂÀ» ±â´Ù¸®°í ÀÖÀ½À» À¯Àú¿¡°Ô ¾Ë·ÁÁÖ±â À§Çؼ­ »ç¿ëÇÑ´Ù. Prompt ¸¦ Àß »ç¿ëÇÏ°Ô µÇ¸é ¿©·¯ºÐÀÌ ¾î¶² È£½ºÆ® ¿¡¼­ ÀÛ¾÷À» ÇÏ´ÂÁö, ȤÀº ¸î½ÃÀÎÁö, ¾î¶² µð·ºÅ丮¿¡¼­ ÀÛ¾÷ÇÏ°í ÀÖ´ÂÁö µîÀÇ ÀÛ¾÷Á¤º¸µîÀ» ¾òÀ»¼ö ÀÖ´Ù.

ÇÁ·ÒÇÁÆ® Á¤º¸´Â ȯ°æº¯¼ö PS1 ¿¡ ÀúÀåµÈ´Ù. echo $PS1 ÇØ º¸¸é ÇöÀç ¼³Á¤µÈ ÇÁ·ÒÇÁÆ® Á¤º¸¸¦ º¼¼ö ÀÖ´Ù. bash ´Â È¿À²ÀûÀÎ ÇÁ·ÒÇÁÆ® Á¤º¸¸¦ º¸¿©ÁÖ±â À§Çؼ­ ¸î°³ÀÇ Æ¯¼ö ¹®ÀÚ µéÀ» Á¦°øÇÏ°í ÀÖ´Ù.

표 2. Prompt ¿¹¾à¾î

\tÇöÀç ½Ã°£À» HH:MM:SS Çü½ÄÀ¸·Î º¸¿©ÁØ´Ù.
\d³¯ÀÚ¸¦ "¿äÀÏ ¿ù ÀÏ" Çü½ÄÀ¸·Î º¸¿©ÁØ´Ù.
\s½©ÀÇ À̸§À» º¸¿©ÁØ´Ù.
\wÇöÀç ÀÛ¾÷µð·ºÅ丮¸¦ ¿ÏÀü°æ·Î·Î º¸¿©ÁØ´Ù.
\WÇöÀç ÀÛ¾÷µð·ºÅ丮ÀÇ À̸§À» º¸¿©ÁØ´Ù.
\uÇöÀç »ç¿ëÀÚÀÇ »ç¿ëÀÚ¸í
\hÈ£½ºÆ®À̸§
\!ÀÌ ¸í·ÉÀÇ È÷½ºÅ丮 ¹øÈ£
\nnn8Áø¼ö nnn¿¡ ÇØ´çÇÏ´Â ¹®ÀÚ
\[ºñÃâ·Â¹®ÀÚÀÇ ½ÃÄö½º¸¦ ½ÃÀÛÇÑ´Ù.
\]ºñÃâ·Â¹®ÀÚÀÇ ½ÃÄö½º¸¦ ¸¶Ä£´Ù.
°£´ÜÇÑ ¿¹¸¦ µé¾îº¸ÀÚ. ¿ì¸®´Â Prompt »ó¿¡ ÇöÀç ½Ã°£°ú, ÀÛ¾÷µð·ºÅ丮 Á¤º¸¸¦ º¸¿©ÁÖ±æ ¿øÇÑ´Ù. ÀÌ·²¶§´Â ¾Æ·¡¿Í °°ÀÌ ÇÏ¸é µÈ´Ù.
	[root@localhost httpd]# export PS1="[\t \W]# "
	[17:40:37 html]# echo "¼º°øÀûÀ¸·Î ¹Ù²¼±º¿ä" 
			


8.5. Prompt Àü¿¡ ¸í·É ½ÇÇà½ÃÅ°±â

ÀÌ·¸°Ô Çؼ­ ÇÁ·ÒÇÁÆ®¸¦ º¯°æ½ÃÅ°´Â¹æ¹ýÀ» ¾Ë¾Ò´Ù. ±×·±µ¥, ¾î¶² ÇÑÅÒ ÀÇ °æ¿ì ÇÑÅÒÀÇ Å¸ÀÌƲ¹Ù Á¦¸ñÀÌ ½Ã½Ã°¢°¢ ¹Ù²î´Â°ÍÀ» º»ÀûÀÌ ÀÖÀ» °ÍÀÌ´Ù. ÀÌ°Ç ¾î¶»°Ô Çϴ°ÍÀϱî. ?

ÀÌ°Ç 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 ¸¦ ÀÀ¿ëÇϸé Á»´õ ´Ù¾çÇÑ ÀϵéÀ» ÇÒ¼ö ÀÖ´Ù. ´ÙÀ½Àå¿¡¼­ ÀÌ¿¡ ´ëÇؼ­ °£´ÜÇÏÁö¸¸ À¯¿ëÇÑ ÇÑ°¡Áö ¿¹¸¦ µé¾î º¸µµ·Ï ÇÏ°Ú´Ù.


8.6. 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"
			
¹°·Ð À§ÀÇ ÇÁ·Î±×·¥¿¡´Â ¿©·¯°¡Áö ºÎÁ·ÇÑÁ¡ÀÌ ¸¹´Ù. ¸¶Áö¸· ¸í·ÉÀÌ È­ÀÏ·Î ÀúÀåµÇ¸ç, ¶ÇÇÑ »ç¿ëÀÚ°¡ ½©ÀÇ Æ¯¼ºÀ» À߾˰í ÀÖ°í, ¿©±â¿¡ ÁÖÀǸ¦ ±â¿ïÀδٸé ȯ°æº¯¼ö¸¦ ºÐ¼®Çؼ­ À̸¦ Á¶ÀÛÇÒ¼ö ÀÖ´Ù. ÀÌ´Â ¿©·¯°¡Áö ¹æ¹ýÀ» ÅëÇؼ­ ÇØ°áÇÒ¼ö ÀÖÁö¸¸, ÀÌ´Â ½©½ºÅ©¸³ÆÃÀÇ ¹üÀ§¸¦ ¹þ¾î³ª´Â °ÍÀÓÀ¸·Î, °£´ÜÈ÷ ÀÌ·¯ÇÑ ÀÏÀ» ÇÒ¼öµµ ÀÖ´Ù¶ó´Â °Í¸¸ ÀÌÇØÇØ µÎ±â·Î ÇÏÀÚ. ÀÌ ±ÛÀ» Àд ¿©·¯ºÐÀÌ ÁÁÀº ¹æ¹ýÀ» »ý°¢ÇØ º¸±â ¹Ù¶õ´Ù. (¹°·Ð °¡Àå ÁÁÀº ¹æ¹ýÀº ½© ½î¾²¸¦ ¼öÁ¤ÇÏ´Â °Å´Ù. »ý°¢¸¸Å­ º¹ÀâÇÏÁö ¾ÊÀ¸´Ï ¿¬±¸ÇØ º¸½Ã±æ..)


ID
Password
Join
You can do very well in speculation where land or anything to do with earth is concerned.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2003-09-24 16:27:52
Processing time 0.0014 sec