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

You are not allowed to 'diff'


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




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