¿ø¹®: http://www.linuxnewbie.org/nhf/intel/programming/introbashscript.html
³¯Â¥: ?
ÀúÀÚ: X_console shellscope@yahoo.com
Á¦¸ñ: BASH ½© ½ºÅ©¸³Æà ÀÔ¹®: ¹öÀü 1.2
¸®´ª½º¿¡¼ ¾µ ¼ö ÀÖ´Â ¸ðµç ½©µéó·³, BASH(Bourne Again Shell)Àº
¶Ù¾î³ ¸í·É ¶óÀÎ ½©À̸é¼, ±× ÀÚü·Îµµ ÇϳªÀÇ ½ºÅ©¸³Æà ¾ð¾îÀÌ´Ù. ´ç½ÅÀº ½© ½ºÅ©¸³ÆÃÀ» ÀÌ¿ëÇؼ ½©ÀÌ °¡Áø ´É·ÂÀ» ÃæºÐÈ÷ È°¿ëÇÒ ¼ö ÀÖÀ¸¸ç,
½© ½ºÅ©¸³ÆÃÀÌ ¾Æ´Ï¾úÀ¸¸é ¼ö¸¹Àº ¸í·ÉÀ» ÇÊ¿ä·Î ÇßÀ» ¸¹Àº ÀϵéÀ»
ÀÚµ¿ÀûÀ¸·Î ó¸®ÇÒ ¼öµµ ÀÖ´Ù. ´ç½ÅÀÇ ¸®´ª½º ¹Ú½º¿¡ ³õ¿© ÀÖ´Â ¸¹Àº ÇÁ·Î±×·¥µéÀº ½© ½ºÅ©¸³Æ®µéÀÌ´Ù. ¸¸ÀÏ ½© ½ºÅ©¸³Æ®°¡ ¾î¶»°Ô ÀÛµ¿ÇÏ´ÂÁö ¹è¿ì°í
½Í°Å³ª ´ç½ÅÀÌ °¡Áö°í ÀÖ´Â ½© ½ºÅ©¸³Æ®¸¦ ¼öÁ¤ÇÏ°í ½Í´Ù¸é, bash ¹®¹ýÀ» ÀÌÇØÇÏ´Â °ÍÀº ÇʼöÀûÀÌ´Ù. °Ô´Ù°¡, bash ¾ð¾î¸¦ ÀÌÇØÇϸé Á¤È®È÷
´ç½ÅÀÌ ¿øÇÏ´Â ¹æ½ÄÀ¸·Î ÀÏÀ» ÇÏ´Â ´ç½Å ÀÚ½ÅÀÇ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù.
ÇÁ·Î±×·¡¹Ö
¶Ç´Â
½ºÅ©¸³ÆÃ?
ÇÁ·Î±×·¡¹ÖÀ» óÀ½ ÇÏ´Â »ç¶÷µéÀº ´ë°³ ÇÁ·Î±×·¡¹Ö ¾ð¾î¿Í ½ºÅ©¸³Æà ¾ð¾î »çÀÌÀÇ Â÷À̸¦ È¥µ¿ÇÑ´Ù. ÇÁ·Î±×·¡¹Ö ¾ð¾î´Â ÀϹÝÀûÀ¸·Î ½ºÅ©¸³Æà ¾ð¾î¿¡ ºñÇØ º¸´Ù °·ÂÇÏ°í º¸´Ù ºü¸£´Ù. ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ ¿¹·Î´Â C, C++, Java°¡ ÀÖ´Ù. ÇÁ·Î±×·¡¹Ö ¾ð¾î´Â ´ë°³ ¼Ò½º ÄÚµå(ÃÖÁ¾ ÇÁ·Î±×·¥ÀÌ ¾î¶»°Ô ½ÇÇàµÉ °ÍÀΰ¡¿¡ ´ëÇÑ Áö½Ã¹®À» ´ã°í ÀÖ´Â ÅؽºÆ® ÆÄÀÏ)¿¡¼ ½ÃÀÛÇؼ ÄÄÆÄÀÏ °úÁ¤À» ÅëÇØ ½ÇÇà °¡´É ÆÄÀÏ·Î ¸¸µé¾î Áø´Ù(built). ÀÌ·¸°Ô Çؼ ¸¸µé¾îÁø ½ÇÇà °¡´É ÆÄÀÏÀº ´Ù¸¥ ¿î¿µ üÁ¦·Î ½±°Ô À̽ĵǾîÁöÁö ¾Ê´Â´Ù. ¿¹¸¦ µé¾î, ´ç½ÅÀÌ ¸®´ª½º¿¡¼ C ÇÁ·Î±×·¥À» ÀÛ¼ºÇß´Ù¸é, Windows 98½Ã½ºÅÛ¿¡¼´Â ±× ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ¾øÀ» °ÍÀÌ´Ù. ÇÁ·Î±×·¥À» ½ÇÇàÇϱâ À§Çؼ´Â, Windows 98 ½Ã½ºÅÛ ÇÏ¿¡¼ ¼Ò½º Äڵ带 ´Ù½Ã ÄÄÆÄÀÏÇؾ߸¸ ÇÑ´Ù. ½ºÅ©¸³Æà ¾ð¾î ¿ª½Ã ¼Ò½º Äڵ忡¼ ½ÃÀÛÀ» ÇÏÁö¸¸, ½ÇÇà °¡´É ÆÄÀÏ·Î ¸¸µé±â À§ÇÑ ÄÄÆÄÀÏ °úÁ¤ÀÌ ¾ø´Ù. ´ë½Å, ¹ø¿ª±â(interpreter)°¡ ¼Ò½º ÆÄÀÏ¿¡¼ Áö½Ã¹®À» ÀÐ°í °¢ Áö½Ã¹®À» ½ÇÇà½ÃŲ´Ù. ºÒÇàÈ÷µµ, ¹ø¿ª±â°¡ °¢ Áö½Ã¹®À» Çϳª Çϳª Àоî¾ß¸¸ Çϱ⠶§¹®¿¡, ÀϹÝÀûÀ¸·Î ¹ø¿ª±â¸¦ ÅëÇØ ½ÇÇàµÇ´Â ÇÁ·Î±×·¥Àº ÄÄÆÄÀÏµÈ ÇÁ·Î±×·¥º¸´Ù ´À¸®´Ù. ½ºÅ©¸³Æà ¾ð¾îÀÇ °¡Àå Å« ÀåÁ¡Àº ¼Ò½º ÆÄÀÏÀ» ¾î¶² ¿î¿µ üÁ¦¿¡³ª ½±°Ô À̽ÄÇÒ ¼ö ÀÖÀ¸¸ç ¹Ù·Î ±× ÀÚ¸®¿¡¼ ¹ø¿ª±â¸¦ ÅëÇØ ½ÇÇàÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ÀÌ·± Á¡Àº ÀÛÀº ÇÁ·Î±×·¥¿¡¼´Â ÀåÁ¡À¸·Î ¿©°ÜÁú ¼ö ÀÖÁö¸¸, Å« ±Ô¸ðÀÇ ¾îÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇÒ °ÍÀ» °èȹÇÏ°í ÀÖ´Ù¸é ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ »ç¿ëÇÏ´Â ÆíÀÌ ¾Ë¸Â´Ù. ½ºÅ©¸³Æà ¾ð¾îÀÇ ¿¹·Î´Â Perl, Lisp, TclÀÌ ÀÖ´Ù.
¹«¾ùÀ»
¾Ë¾Æ¾ß
Çϴ°¡?
´ç½Å ÀÚ½ÅÀÇ ½© ½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇϱâ À§Çؼ´Â ¸ÅÀÏ »ç¿ëÇÏ´Â ±âº»ÀûÀÎ ¸®´ª½º ¸í·É¾î¸¦ ¾Ë¾Æ¾ß ÇÑ´Ù. ¿¹¸¦ µé¸é, ¾î¶»°Ô ÆÄÀÏÀ» º¹»ç, À̵¿ÇÏ°í »õ·Î¿î ÆÄÀÏÀ» ¸¸µå´ÂÁö ÇÏ´Â °ÍµéÀ» ¾Ë¾Æ¾ß¸¸ ÇÑ´Ù. ¹Ýµå½Ã ¾Ë¾ÆµÎ¾î¾ß ÇÒ ¶Ç ÇÑ °¡Áö´Â ÅؽºÆ® ÆíÁý±â¸¦ ¾²´Â ¹æ¹ýÀÌ´Ù. ¸®´ª½ºÀÇ ´ëÇ¥ÀûÀÎ ¼¼ °¡Áö ÅؽºÆ® ÆíÁý±â´Â vi, emacs, picoÀÌ´Ù. ¸¸ÀÏ vi³ª emacs¸¦ »ç¿ëÇϴµ¥ Àͼ÷ÇÏÁö ¾Ê´Ù¸é, pico³ª »ç¿ëÇϱ⠽¬¿î ´Ù¸¥ ÅؽºÆ® ÆíÁý±â¸¦ ÀÌ¿ëÇ϶ó.
ÁÖÀÇ!!!
·çÆ® »ç¿ëÀÚÀÎ »óÅ¿¡¼´Â Àý´ë·Î ½ºÅ©¸³ÆÃÀ» ¿¬½ÀÇÏÁö ¾Êµµ·Ï Ç϶ó! ¾î¶² ÀÏÀÌ ÀϾ Áö ¸ð¸¥´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ÄÚµùÀ» ÇÏ´Â µµÁß ¿ì¿¬È÷ ½Ç¼ö¸¦ Çؼ ½Ã½ºÅÛÀ» ¸ÁÃÆ´Ù Çصµ ³ª´Â Ã¥ÀÓÁú ¼ö ¾ø´Ù. ·çÆ® ±ÇÇÑÀÌ ¾ø´Â ÀÏ¹Ý »ç¿ëÀÚ °èÁ¤À» »ç¿ëÇ϶ó. ´ç½ÅÀº ½ºÅ©¸³Æà ¿¬½ÀÀ» Çϱâ À§ÇÑ »õ·Î¿î »ç¿ëÀÚ¸¦ ¸¸µé±â¸¦ ¿øÇÒ Áöµµ ¸ð¸¥´Ù. ÀÌ °æ¿ì, ÀϾ ¼ö ÀÖ´Â °¡Àå ³ª»Û ÀÏÀº »õ·Î ¸¸µç »ç¿ëÀÚ µð·ºÅ丮°¡ ¾ø¾îÁö´Â °Í¿¡ ºÒ°úÇÏ´Ù.
ù¹ø°
BASH ÇÁ·Î±×·¥
¿ì¸®ÀÇ Ã¹¹ø° ÇÁ·Î±×·¥Àº °íÀüÀûÀÎ "Hello World" ÇÁ·Î±×·¥ÀÌ µÉ °ÍÀÌ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ÀÌÀü¿¡ ÇÁ·Î±×·¥À» Çغ» °æÇèÀÌ ÀÖ´Ù¸é, Áö±Ý±îÁö ¼ö¸¹Àº "Hello World" ÇÁ·Î±×·¥À» ºÁ¿ÔÀ» °ÍÀÌ´Ù. ÇÏÁö¸¸, ÀÌ°ÍÀº ÀüÅëÀÌ°í, ´©°¡ ±× ÀüÅëÀ» ¹Ù²Ù°Ú´Â°¡? ÀÌ "Hello World" ÇÁ·Î±×·¥Àº ´Ü¼øÈ÷ "Hello World"¶õ ¹®±¸¸¦ ȸ鿡 ÇÁ¸°Æ®ÇÏ´Â °ÍÀÌ´Ù. ±×·³ ¿ì¼± ÅؽºÆ® ÆíÁý±â¸¦ ½ÃÀÛÇؼ, ±× ¾È¿¡ ´ÙÀ½ÀÇ ³»¿ëÀ» ÀÔ·ÂÇ϶ó:
#!/bin/bash
echo "Hello World"
ù¹ø° ¶óÀÎÀº ¸®´ª½º¿¡°Ô ÀÌ ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇϱâ À§Çؼ bash ¹ø¿ª±â¸¦ »ç¿ëÇ϶ó°í ¾Ë·ÁÁØ´Ù. ÀÌ °æ¿ì¿¡´Â, bash´Â /bin µð·ºÅ丮¿¡ ÀÖ´Ù. ¸¸ÀÏ bash°¡ ½Ã½ºÅÛÀÇ ´Ù¸¥ µð·ºÅ丮¿¡ ÀÖ´Ù¸é, ±× À§Ä¡¸¦ ù¹ø° ¶óÀο¡ ½áÁÖ¾î¶ó. ½ºÅ©¸³Æ® ¾È¿¡ ÀÖ´Â Áö½Ã¹®À» ½ÇÇàÇÒ ¶§ ¾î¶² ÀÎÅÍÇÁ¸®Å͸¦ »ç¿ëÇÒ °ÍÀÎÁö ¸®´ª½º¿¡°Ô ¾Ë·ÁÁÖ´Â °ÍÀ̹ǷΠ¹ø¿ª±â¸¦ Á¤È®ÇÏ°Ô ¸í½ÃÇÏ´Â °ÍÀº ¸Å¿ì Áß¿äÇÏ´Ù. ´ÙÀ½¿£ ½ºÅ©¸³Æ®¸¦ hello.sh¶õ À̸§À¸·Î ÀúÀåÇÏÀÚ. ¸ðµÎ ´Ù µÇ¾úÀ¸¸é, ½ºÅ©¸³Æ®¸¦ ½ÇÇà °¡´ÉÇϵµ·Ï ÇÑ´Ù:
xconsole$
chmod 700 ./hello.sh
ÆÄÀÏÀÇ Æ۹̼ÇÀ» ¾î¶»°Ô ¹Ù²Ù´ÂÁö ¸ð¸¥´Ù¸é chmod¿¡ ´ëÇÑ ¸Å´º¾ó ÆäÀÌÁö¸¦ ÂüÁ¶Ç϶ó. ÀÏ´Ü À§ÀÇ ¸í·ÉÀ» ½ÇÇàÇÏ¸é ´ÜÁö ÆÄÀÏ À̸§À» ŸÀÌÇÎÇÏ´Â °Í¸¸À¸·Î ´ç½ÅÀÇ ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ÀÖ´Ù:
xconsole$
./hello.sh
Hello
World
µÆ´Ù!
´ç½ÅÀÇ Ã¹¹ø° ÇÁ·Î±×·¥ÀÌ´Ù! ±× ÀÚü·Î´Â Áö·çÇÏ°í ¾µ¸ð¾øÁö¸¸, ¸ðµç »ç¶÷ÀÌ ÀÌ·± ½ÄÀ¸·Î ÇÁ·Î±×·¡¹ÖÀ» ½ÃÀÛÇÑ´Ù. ù¹ø° ÇÁ·Î±×·¥À» ½ÇÇàÇϱâ±îÁöÀÇ °úÁ¤À» µÇ»õ°Ü º¸ÀÚ. Äڵ带 ÀÛ¼ºÇÏ°í, ÆÄÀÏÀ» ÀúÀåÇÏ°í, chmod ¸í·ÉÀ¸·Î ½ÇÇà °¡´ÉÇϵµ·Ï ¸¸µé¾ú´Ù.
¸í·Éµé,
¸í·Éµé,
¸í·Éµé
´ç½ÅÀÇ Ã¹¹ø° ÇÁ·Î±×·¥ÀÌ ÇÑ ÀÏÀº Á¤È®È÷ ¹«¾ùÀΰ¡? ±× ÇÁ·Î±×·¥Àº ȸ鿡 "Hello
World"¶õ ¹®±¸¸¦ ÇÁ¸°Æ®Çß´Ù. ÇÏÁö¸¸ ¾î¶»°Ô ±×·¸°Ô ÇÑ °ÍÀϱî? ÇÁ·Î±×·¥Àº ¸í·ÉÀ» »ç¿ëÇß´Ù. ÇÁ·Î±×·¥ »ó¿¡¼ ´ç½ÅÀÌ ½è´ø µü ÇÑ ÁÙÀÇ ÄÚµå´Â echo "Hello
World"
¿´´Ù. ±×·¸´Ù¸é, ¾î¶² °ÍÀÌ ¸í·ÉÀΰ¡? ¹Ù·Î echo
ÀÌ´Ù. echo ÇÁ·Î±×·¥Àº ÇϳªÀÇ ÀÎÀÚ¸¦ ÃëÇؼ ±× ÀÎÀÚ¸¦ ȸ鿡 ÇÁ¸°Æ®ÇÑ´Ù.
ÀÎÀÚ(argument)´Â ÇÁ·Î±×·¥ À̸§À» ÀÔ·ÂÇÑ ´ÙÀ½¿¡ µû¶ó¿Â´Ù. ù¹ø° ¿¹Á¦¿¡¼ ´ç½ÅÀÌecho¿¡ ³Ñ°Ü ÁØ ÀÎÀÚ´Â "Hello World"
ÀÌ´Ù
. ´ç½ÅÀÌ ls /home/root
¶õ ¸í·ÉÀ» ÀÔ·ÂÇÒ ¶§, ls¿¡ ´ëÇÑ ÀÎÀÚ´Â /home/root
ÀÌ´Ù. ±×·¸´Ù¸é ÀÌ ¸ðµç °ÍÀÌ ¶æÇÏ´Â °ÍÀº ¹«¾ùÀΰ¡? ¸¸ÀÏ ´ç½ÅÀÌ ÀÎÀÚ Çϳª¸¦ ÃëÇؼ ȸ鿡 ÇÁ¸°Æ®ÇÏ´Â ÇÁ·Î±×·¥À» °¡Áö°í ÀÖ´Ù¸é, ±× ÇÁ·Î±×·¥ ´ë½Å¿¡ echo¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ¿ì¸®°¡ foo¶ó°í ÇÏ´Â ÇÁ·Î±×·¥À» °¡Áö°í ÀÖ´Ù°í °¡Á¤ÇÏÀÚ. ÀÌ ÇÁ·Î±×·¥Àº ¹®ÀÚ¿ Çϳª¸¦ ÀÎÀÚ·Î °¡Á®¼ ȸ鿡 Ãâ·ÂÇÑ´Ù. ¿ì¸®´Â À§ÀÇ ¿¹Á¦¸¦ ´ÙÀ½°ú °°ÀÌ ´Ù½Ã ¾µ ¼ö ÀÖ´Ù:
#!/bin/bash
foo "Hello World"
ÀÌ ³»¿ëÀ» ÀúÀåÇÏ°í chmod
·Î ½ÇÇà °¡´ÉÇϵµ·Ï ÇÏ¿© ½ÇÇàÇÏÀÚ:
xconsole$
./hello
Hello
World
°á°ú´Â Á¤È®ÇÏ°Ô ¶È°°´Ù. ÇÁ·Î±×·¥ À̸§À» Á¦¿ÜÇÏ°í ¾î´À ÇÑ °÷ÀÌ¶óµµ ´Ù¸¥ °÷ÀÌ Àִ°¡? ÀüÇô ¾ø´Ù. ½ÇÁ¦·Î ¹«¾ùÀΰ¡ ÀÛ¼ºÇÑ °ÍÀÌ Àִ°¡? ´ç½ÅÀÌ echo ÇÁ·Î±×·¥À» ÀÛ¼ºÇß´Ù¸é ¸ð¸£Áö¸¸ ±×·¸Áö ¾Ê´Ù¸é ÀüÇô ÀÛ¼ºÇÑ °ÍÀÌ ¾ø´Ù. ´ç½ÅÀÌ ÇÑ °ÍÀ̶ó°í´Â ÀÌ¹Ì ÁÖ¾îÁø ÀÎÀÚ¿Í ÇÔ²² echo ÇÁ·Î±×·¥À» ´ç½ÅÀÇ ½© ÇÁ·Î±×·¥¿¡ »ç¿ëÇÑ °Í »ÓÀÌ´Ù. ½ÇÁ¦·Î echo ¸í·É ´ë½Å ¾µ ¼ö ÀÖ´Â ¸í·ÉÀº printf °¡ ÀÖ´Ù. ƯÈ÷ C ÇÁ·Î±×·¡¹Ö¿¡ ´ÉÇÑ »ç¶÷ÀÇ °æ¿ì¿¡´ÂprintfÀÇ ¿©·¯ ±â´ÉÀ» ÀÌ¿ëÇؼ º¸´Ù ´Ù¾çÇÑ °á°ú¸¦ ³¾ ¼ö ÀÖ´Ù. »ç½Ç, ½© ÇÁ·Î±×·¥À» ¸¸µéÁö ¾Ê°íµµ À§ÀÇ ¿¹Á¦¿Í ²À °°Àº °á°ú¸¦ ¾òÀ» ¼ö ÀÖ´Ù:
xconsole$
echo "Hello World"
Hello
World
bash
½© ½ºÅ©¸³ÆÃÀº ´Ù¾çÇÑ Á¦¾î¸¦ °¡´ÉÇÏ°Ô ÇÏ¸ç ¶ÇÇÑ ¹è¿ì±â ½±´Ù. ¹æ±Ý º¸¾ÒµíÀÌ, ½© ÇÁ·Î±×·¥¿¡ ¸®´ª½º ¸í·ÉÀ» ÇÔ²² ¾µ ¼ö ÀÖ´Ù. ½© ÇÁ·Î±×·¥Àº ƯÁ¤ÇÑ ÀÏÀ» Çϱâ À§ÇØ Æ¯º°È÷ Á¶¸³µÈ ¿©·¯ ÇÁ·Î±×·¥ÀÇ ÁýÇÕüÀÌ´Ù.
º¸´Ù
À¯¿ëÇÑ
ÇÁ·Î±×·¥
ÀÌÁ¦ ¿ì¸®´Â ¸ðµç ÆÄÀÏÀ» ÇϳªÀÇ µð·ºÅ丮·Î ¿Å±â°í, ±× µð·ºÅ丮¸¦ ³»¿ë¹° ¸ðµÎ¿Í ÇÔ²² Áö¿î µÚ, ´Ù½Ã ±× µð·ºÅ丮¸¦ ¸¸µå´Â ÇÁ·Î±×·¥À» ¸¸µé °ÍÀÌ´Ù. ÀÌ ÀÛ¾÷Àº ´ÙÀ½ÀÇ ¸í·ÉµéÀ» ÅëÇØ ÀÌ·ç¾îÁú ¼ö ÀÖ´Ù:
xconsole$
mkdir trash
xconsole$
mv * trash
xconsole$
rm -rf trash
xconsole$
mkdir trash
À§ÀÇ ¸í·ÉÀ» ½© »ó¿¡¼ ´ëȽÄÀ¸·Î ÀÔ·ÂÇÏ´Â ´ë½Å, ½© ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏÀÚ:
#!/bin/bash
mkdir trash
mv * trash
rm -rf trash
mkdir trash
echo "Deleted all files!"
À§ÀÇ ³»¿ëÀ» clean.sh
À¸·Î ÀúÀåÇÏÀÚ. ÀÌÁ¦ ´ç½ÅÀÌ ÇØ¾ß ÇÒ ÀÏÀº clean.sh
¸¦ ½ÇÇàÇÏ´Â °Í»ÓÀÌ´Ù. clean.sh
°¡ ¸ðµç ÆÄÀÏÀ» trashµð·ºÅ丮·Î ¿Å±â°í, trash µð·ºÅ丮¸¦ »èÁ¦ÇÏ°í´Â ´Ù½Ã ¸¸µç ÈÄ, ¸ðµç ÆÄÀÏÀÌ ¼º°øÀûÀ¸·Î »èÁ¦µÇ¾ú´Ù´Â ¸Þ½ÃÁö±îÁö Ãâ·ÂÇÑ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ¸í·ÉÀ» ÀÔ·ÂÇÏ°í ±â´Ù·È´Ù°¡ ´Ù½Ã ÀÔ·ÂÇØ¾ß ÇÏ´Â ÀÏÀ» ÇØ¾ß ÇÑ´Ù¸é, ½© ÇÁ·Î±×·¥À¸·Î ÀÚµ¿ÈÇÏ´Â ¹æ¹ýÀ» °í·ÁÇ϶ó.
ÁÖ¼®
ÁÖ¼®À» ´Þ¸é ÄÚµå ÀбⰡ º¸´Ù ½¬¿öÁø´Ù. ÁÖ¼®À» ´Ü´Ù°í Çؼ ÇÁ·Î±×·¥ÀÇ Ãâ·Â¿¡ ¿µÇâÀ» ÁÖÁö ¾Ê´Â´Ù. Äڵ带 Àд »ç¶÷À» À§ÇØ ÁÖ¼®Àº Ưº°È÷ ¸¸µé¾îÁ³´Ù. bash¿¡¼ ù¹ø° ¶óÀÎ(#!/bin/bash
)À» Á¦¿ÜÇÑ ¸ðµç ÁÖ¼®Àº Çؽ¬ ½É¹ú("#
")·Î ½ÃÀÛÇÑ´Ù. ù¹ø° ¶óÀÎÀº ÁÖ¼®ÀÌ ¾Æ´Ï´Ù. ù¹ø° ¶óÀÎ ´ÙÀ½¿¡ ¿À´Â "#
"À¸·Î ½ÃÀÛÇÏ´Â ¸ðµç ¶óÀÎÀº ÁÖ¼®ÀÌ´Ù. ´ÙÀ½ÀÇ Äڵ带 º¸ÀÚ:
#!/bin/bash
#
ÀÌ
ÇÁ·Î±×·¥Àº
1
ºÎÅÍ
10
±îÁö
Ä«¿îÆ®ÇÑ´Ù
:
for i in 1 2 3 4 5 6 7 8 9 10; do
echo $i
done
¸¸ÀÏ ´ç½ÅÀÌ bash ½ºÅ©¸³ÆÃÀ» ¸ð¸¥´Ù°í Çصµ, ÁÖ¼® ¶§¹®¿¡ À§ÀÇ ÇÁ·Î±×·¥ÀÌ ¹«¾ùÀ» ÇÏ´ÂÁö ¹Ù·Î ¾Ë ¼ö ÀÖ´Ù. ÁÖ¼®À» ÀûÀýÇÏ°Ô ÀÌ¿ëÇÏ´Â °ÍÀº ÁÁÀº ½À°üÀÌ´Ù. ¸¸ÀÏ Èʳ¯ ´ç½ÅÀÇ ÇÁ·Î±×·¥À» À¯Áö º¸¼öÇÒ ÇÊ¿ä°¡ ÀÖ´Ù¸é, ÁÖ¼®À» ´Þ¾Æ ³õ´Â °ÍÀÌ ÀÏÀ» ¾ó¸¶³ª ÆíÇÏ°Ô ¸¸µå´ÂÁö ¾Ë°Ô µÉ °ÍÀÌ´Ù.
º¯¼ö
º¯¼ö´Â ±âº»ÀûÀ¸·Î °ªµéÀ» ´ã°í ÀÖ´Â "»óÀÚ"ÀÌ´Ù. ´ç½ÅÀº ¸¹Àº ÀÌÀ¯·Î ÀÎÇØ º¯¼öµéÀ» ¸¸µé°í ½Í¾îÇÒ °ÍÀÌ´Ù. »ç¿ëÀÚ ÀÔ·Â, ÀÎÀÚµé, ¶Ç´Â ¼öÄ¡ °ªÀ» º¸°üÇϱâ À§ÇØ º¯¼öµéÀÌ ÇÊ¿äÇÏ´Ù. ´ÙÀ½ ªÀº Äڵ带 ¿¹·Î µéÀÚ:
#!/bin/bash
x=12
echo "The value of variable x is $x"
¿©±â¼ ÇÑ ÀÏÀº, xÀÇ °ªÀ» 12·Î Á¤ÇÑ °ÍÀÌ´Ù. echo
"The value of variable x is $x"
À̶ó´Â ¶óÀÎÀº xÀÇ ÇöÀç °ªÀ» ÇÁ¸°Æ®ÇÑ´Ù. º¯¼ö¸¦ Á¤ÀÇÇÒ ¶§, ÇÒ´ç ¿¬»êÀÚ "=
" »çÀÌ¿¡´Â °ø¹é ¹®ÀÚ°¡ ÀÖÀ¸¸é ¾È µÈ´Ù. ¿©±â ÇÒ´ç ¿¬»êÀÚ¸¦ »ç¿ëÇÏ´Â ¹®¹ýÀÌ ÀÖ´Ù:
variable_name=this_value
º¯¼öÀÇ °ªÀº º¯¼ö À̸§ ¾Õ¿¡ ´Þ·¯ ½É¹ú"$
"À» ºÙÀÓÀ¸·Î½á ¾òÀ» ¼ö ÀÖ´Ù. À§ÀÇ ¿¹Á¦¿¡¼ º¸µíÀÌ, xÀÇ °ªÀ» echo $x
¸¦ »ç¿ëÇؼ ¾òÀ» ¼ö ÀÖ´Ù.
º¯¼öÀÇ Å¸ÀÔ¿¡´Â Áö¿ª º¯¼ö¿Í ȯ°æ º¯¼ö, ÀÌ·¸°Ô µÎ °¡Áö°¡ ÀÖ´Ù. ȯ°æ º¯¼öµéÀº ½Ã½ºÅÛ¿¡ ÀÇÇØ Á¤ÇØÁö°í ÁÖ·Î env ¸í·ÉÀ» »ç¿ëÇؼ º¼ ¼ö ÀÖ´Ù. ȯ°æ º¯¼ö´Â Ưº°ÇÑ °ªÀ» ´ã°í ÀÖ´Ù. ¿¹¸¦ µé¾î, ¸¸ÀÏ ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇϸé:
xconsole$
echo $SHELL
/bin/bash
ÇöÀç »ç¿ë ÁßÀÎ ½©ÀÇ À̸§À» ¾òÀ» ¼ö ÀÖ´Ù. ȯ°æ º¯¼öµéÀº /etc/profile
°ú ~/.bash_profile
¾È¿¡ Á¤ÀǵǾî ÀÖ´Ù. ȯ°æ º¯¼öÀ̵çÁö, Áö¿ª º¯¼öÀ̵çÁö ÇöÀç º¯¼ö °ªÀ» üũÇÒ ¶§ echo ¸í·ÉÀÌ À¯¿ëÇÏ°Ô ¾²ÀδÙ. ¿©ÀüÈ÷ ¿Ö º¯¼ö°¡ ÇÊ¿äÇÑÁö ÀÌÇØÇÏÁö ¸øÇÏ°Ú´Ù¸é, ¿©±â ÁÁÀº ¿¹Á¦°¡ ÀÖ´Ù:
#!/bin/bash
echo "The value of x is 12."
echo "I have 12 pencils."
echo "He told me that the value of x is 12."
echo "I am 12 years old."
echo "How come the value of x is 12?"
ÀÌÁ¦ ´ç½ÅÀº xÀÇ °ªÀ» 12 ´ë½Å 8·Î Çϱâ·Î °áÁ¤Çß´Ù°í ÇÏÀÚ. ¾î¶»°Ô Çϰڴ°¡? "x
is 12"¶ó°í µÇ¾î ÀÖ´Â ¸ðµç ¶óÀÎÀ» ¹Ù²ã¾ß¸¸ ÇÑ´Ù. Àá±ñ ±â´Ù·Á º¸¶ó¡¦¼ýÀÚ 12¸¦ °¡Áø ´Ù¸¥ ¶óÀε鵵 ÀÖ´Ù. ÀÌ ¶óÀε鵵 ¹Ù²ã¾ß Çϴ°¡? ¾Æ´Ï´Ù. ±×°ÍµéÀº x¿Í °ü·ÃÀÌ ¾øÀ¸´Ï ±×³É µÐ´Ù. Á» º¹ÀâÇÑ°¡? ÀÌÁ¦, ¿©±â º¯¼ö¸¦ »ç¿ëÇÑ °Í¸¸ Á¦¿ÜÇÏ¸é ¶È °°Àº ¿¹Á¦°¡ ÀÖ´Ù:
#!/bin/bash
x=12 #
º¯¼ö
x
¿¡
°ª
12
¸¦
´ëÀÔÇÑ´Ù
echo "The value of x is $x."
echo "I have 12 pencils."
echo "He told me that the value of x is $x."
echo "I am 12 years old." echo "How come the
value of x is $x?"
¿©±â¼,
¿ì¸®´Â $x
°¡ º¯¼ö xÀÇ ÇöÀç °ª, 12¸¦ ÇÁ¸°Æ®ÇÏ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù. ±×·¡¼ ¸¸ÀÏ xÀÇ °ªÀ» 8·Î ¹Ù²Û´Ù¸é, ´ç½ÅÀÌ ÇؾßÇÏ´Â ÀÏÀº x=12¶ó°í µÇ¾î ÀÖ´Â ¶óÀÎÀ» x=8·Î ¹Ù²Ù´Â ÀÏ»ÓÀÌ´Ù. ±×·¯¸é ÇÁ·Î±×·¥Àº ÀÚµ¿ÀûÀ¸·Î $x°¡ ÀÖ´Â ¶óÀÎÀ» 12 ´ë½Å 8·Î ¹Ù²Ù¾î º¸¿© ÁÙ °ÍÀÌ´Ù. ´Ù¸¥ ¶óÀÎÀº ¹Ù²îÁö ¾Ê´Â´Ù. µÚ¿¡¼ º¸°ÚÁö¸¸, º¯¼ö´Â ´Ù¸¥ ¿ëµµ·Îµµ Áß¿äÇÏ°Ô »ç¿ëµÈ´Ù.
Á¦¾î
±¸Á¶
Á¦¾î ±¸Á¶´Â ´ç½ÅÀÇ ÇÁ·Î±×·¥À» º¸´Ù °£°áÇÏ°Ô Çϸç, ÇÁ·Î±×·¥ÀÌ °áÁ¤À» ³»¸± ¼ö ÀÖ°Ô ÇÑ´Ù. »Ó¸¸ ¾Æ´Ï¶ó, ´õ¿í Áß¿äÇÑ °ÍÀº ¿¡·¯¸¦ üũÇϵµ·Ï ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. Áö±Ý±îÁö ¿ì¸®°¡ º» ¿¹Á¦´Â ¸ðµÎ ù¹ø° ¶óÀο¡¼ºÎÅÍ ¸¶Áö¸· ¶óÀαîÁö ÇÁ·Î±×·¥ÀÇ ¸ðµç ¸í·ÉÀ» ½ÇÇàÇÏ´Â ÇÁ·Î±×·¥À̾ú´Ù. ¿¹¸¦ µé¸é ´ÙÀ½°ú °°Àº ¹æ½ÄÀÌ´Ù:
#!/bin/bash
cp /etc/foo .
echo "Done."
ÀÌ°ÍÀº bar.sh¶õ ÀÛÀº ÇÁ·Î±×·¥Àε¥, /etc/foo¶õ ÆÄÀÏÀ» ÇöÀçÀÇ µð·ºÅ丮·Î º¹»çÇÏ°í´Â ȸ鿡 "Done"À̶ó°í ÇÁ¸°Æ®ÇÑ´Ù. ÀÌ ÇÁ·Î±×·¥Àº ÇÑ °¡Áö Á¶°Ç ÇÏ¿¡¼ ÀÛµ¿ÇÑ´Ù. /etc/foo¶ó°í ÇÏ´Â ÆÄÀÏÀÌ ¹Ýµå½Ã Á¸ÀçÇؾ߸¸ ÇÑ´Ù. ±×·¸Áö ¾Ê´Ù¸é ´ÙÀ½°ú °°Àº ȸéÀ» º¸°Ô µÉ °ÍÀÌ´Ù:
xconsole$
./bar.sh
cp:
/etc/foo: No such file or directory
Done.
´ç½ÅÀÌ º¸µíÀÌ, ¹®Á¦°¡ ÀÖ´Ù. ´ç½ÅÀÇ ÇÁ·Î±×·¥À» ½ÇÇàÇÏ´Â ¸ðµç »ç¶÷ÀÌ ±×µéÀÇ ½Ã½ºÅÛ¿¡ /etc/foo¶ó´Â ÆÄÀÏÀ» °¡Áö°í ÀÖÁö´Â ¾Ê´Ù. ±×·¡¼ /etc/foo¶ó´Â ÆÄÀÏÀÌ ÀÖ´ÂÁö üũÇؼ ¸¸ÀÏ ±× ÆÄÀÏÀÌ ÀÖÀ¸¸é º¹»çÇϵµ·Ï ÇÏ°í, ±×·¸Áö ¾Ê´Ù¸é ³¡³ªµµ·Ï ´ç½ÅÀÇ ÇÁ·Î±×·¥À» ¼öÁ¤ÇÏ´Â ÆíÀÌ ÁÁÀ» °ÍÀÌ´Ù. ÀÇ»ç ÄÚµå(pseudo code)·Î ÀÌ ³»¿ëÀ» ³ªÅ¸³»¸é ´ÙÀ½°ú °°´Ù:
¸¸ÀÏ
/etc/foo
°¡
Á¸ÀçÇϸé
,
/etc/foo
¸¦
ÇöÀç
µð·ºÅ丮·Î
º¹»çÇÑ´Ù
ȸ鿡
"Done."
À»
Ãâ·ÂÇÑ´Ù
.
±×·¸Áö ¾ÊÀ¸¸é,
ȸ鿡
"This file does not exist."
À»
ÃÍ·ÂÇÑ´Ù
exit
ÀÌ°ÍÀ» bash¿¡¼ ÇÒ ¼ö ÀÖÀ»±î? ¹°·Ð! bashÀÇ Á¦¾î ±¸Á¶¿¡´Â if
, while
, until
, for
, case
°¡ ÀÖ´Ù. °¢ ±¸Á¶´Â ½ÃÀÛÀ» ³ªÅ¸³»´Â starting tag¿Í ³¡À» ³ªÅ¸³»´Â ending tag·Î ½ÖÀ» ÀÌ·ç°í ÀÖ´Ù. ¿¹¸¦ µé¸é, if ±¸Á¶´Â if·Î ½ÃÀÛÇؼ fi·Î ³¡³´Ù. Á¦¾î ±¸Á¶´Â ´ç½ÅÀÇ ½Ã½ºÅÛ¿¡¼ ¹ß°ßµÇ¾îÁö´Â ÇÁ·Î±×·¥ÀÌ ¾Æ´Ï´Ù. ±×°ÍµéÀº bashÀÇ ³»ÀçµÈ Ư¼ºÀÌ´Ù. ÀÌ·¯ÇÑ Á¦¾î ±¸Á¶¸¦ ÀÌ¿ëÇؼ, ´ÜÁö ½Ã½ºÅÛÀÇ ÇÁ·Î±×·¥¸¸À» ÀÌ¿ëÇؼ ½© ÇÁ·Î±×·¥À» ¸¸µå´Â °Í¿¡ ±×Ä¡Áö ¾Ê°í ´ç½Å ÀڽŸ¸ÀÇ °íÀ¯ÇÑ Äڵ带 ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù.
if ... else ... elif
... fi
°¡Àå ³Î¸® ¾²ÀÌ´Â ±¸Á¶ Áß Çϳª°¡ if ±¸Á¶ÀÌ´Ù. ÀÌ°ÍÀ» ÀÌ¿ëÇؼ "¸¸ÀÏ ÀÌ Á¶°ÇÀÌ Á¸ÀçÇÑ´Ù¸é ÀÌ°ÍÀ» Çضó, ±×·¸Áö ¾Ê´Ù¸é, ´Ù¸¥ °ÍÀ» Çضó"¶ó´Â ¹æ½ÄÀ¸·Î ÇÁ·Î±×·¥ÀÌ °áÁ¤À» ³»¸®µµ·Ï ÇÒ ¼ö ÀÖ´Ù. È¿À²ÀûÀ¸·Î if ±¸Á¶¸¦ ¾²±â À§Çؼ, ¿ì¸®´Â ¹Ýµå½Ã test ¸í·ÉÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. test´Â ÆÄÀÏÀÇ Á¸Àç ¿©ºÎ, ÆÛ¹Ì¼Ç ¶Ç´Â À¯»çÁ¡°ú Â÷ÀÌÁ¡À» üũÇÑ´Ù. ¿©±â ´Ù½Ã ÀÛ¼ºÇÑ bar.shÀÌ ÀÖ´Ù:
#!/bin/bash
if test -f /etc/foo
then
#
ÆÄÀÏÀÌ
Á¸ÀçÇϸé
,
º¹»çÇÏ°í
¸Þ½ÃÁö¸¦
Ãâ·ÂÇÑ´Ù
.
cp /etc/foo .
echo "Done."
else
#
ÆÄÀÏÀÌ
Á¸ÀçÇÏÁö
¾ÊÀ¸¸é
,
¸Þ½ÃÁö¸¦
Ãâ·ÂÇÏ°í
ÇÁ·Î±×·¥À»
Á¾·áÇÑ´Ù
.
echo "This file does not exist."
exit
fi
then°ú else ´ÙÀ½ ¶óÀεéÀ» µé¿© ¾´ °Í¿¡ ÁÖ¸ñÇ϶ó. µé¿©¾²±â´Â ¼±Åà »çÇ×ÀÌÁö¸¸, ±×·¸°Ô ÇÔÀ¸·Î½á ¾î¶² Á¶°Ç ÇÏ¿¡ ¾î¶² ¶óÀÎÀÌ ½ÇÇàµÉ °ÍÀÎÁö ´«¿¡ Àß µé¾î¿Í¼ Äڵ带 ÈξÀ ½±°Ô ÀÐÀ» ¼ö ÀÖ°Ô µÈ´Ù. ÀÌÁ¦ ÇÁ·Î±×·¥À» ½ÇÇàÇÏÀÚ. ¸¸ÀÏ ´ç½ÅÀÇ ½Ã½ºÅÛ¿¡ /etc/foo ÆÄÀÏÀÌ ÀÖ´Ù¸é, ÇÁ·Î±×·¥Àº ÆÄÀÏÀ» º¹»çÇÑ´Ù. ±×·¸Áö ¾Ê´Ù¸é, ¿¡·¯ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÒ °ÍÀÌ´Ù. test´Â /etc/foo ÆÄÀÏÀÌ Á¸ÀçÇÏ´ÂÁö üũÇÑ´Ù. –f ¿É¼ÇÀº ÀÎÀÚ·Î ¿À´Â °ÍÀÌ Á¤±Ô ÆÄÀÏÀÎÁö üũÇÑ´Ù. ´ÙÀ½Àº testÀÇ ¿É¼Ç ¸®½ºÆ®¸¦ º¸¿© ÁÖ°í ÀÖ´Ù:
-d
ÆÄÀÏÀÌ
µð·ºÅ丮ÀÎÁö
üũ
-e
ÆÄÀÏÀÌ
Á¸ÀçÇÏ´ÂÁö
üũ
-f
ÆÄÀÏÀÌ
ÀϹÝÀûÀÎ
ÆÄÀÏÀÎÁö
üũ
-g
ÆÄÀÏÀÌ
SGID
Æ۹̼ÇÀ»
°¡Á³´ÂÁö
üũ
-r
ÆÄÀÏÀÌ
Àбâ
°¡´ÉÀÎÁö
üũ
-s
ÆÄÀÏÀÇ
Å©±â°¡
0
ÀÌ
¾Æ´ÑÁö
üũ
-u
ÆÄÀÏÀÌ
SUID
Æ۹̼ÇÀ»
°¡Á³´ÂÁö
üũ
-w
ÆÄÀÏÀÌ
¾²±â
°¡´ÉÀÎÁö
üũ
-x
ÆÄÀÏÀÌ
½ÇÇà
°¡´ÉÀÎÁö
üũ
else
´Â ù¹ø° Á¶°ÇÀÌ ¸¸Á·µÇÁö ¾Ê¾Æ¼ ÇÁ·Î±×·¥ÀÌ ´Ù¸¥ ÀÏÀ» Çϵµ·Ï ÇÏ°í ½ÍÀ» ¶§ »ç¿ëµÈ´Ù. if¹® ¾È¿¡ ¶Ç ´Ù¸¥ if¸¦ »ç¿ëÇÏ°í ½ÍÀ» ¶§ »ç¿ëÇÒ ¼ö ÀÖ´Â elifµµ ÀÖ´Ù. ±âº»ÀûÀ¸·Î elif´Â "else
if"¸¦ ³ªÅ¸³½´Ù. ù¹ø° Á¶°ÇÀÌ ¸¸Á·µÇÁö ¾Ê¾Ò°í, ´Ù¸¥ Á¶°ÇÀ» Å×½ºÆ®ÇÏ°í ½ÍÀ» ¶§ elif¸¦ »ç¿ëÇÑ´Ù.
¸¸ÀÏ ´ÙÀ½°ú °°Àºif¿Í test ±¸Á¶ Çü½ÄÀÌ »ç¿ëÇϱ⿡ ºÒÆíÇÏ´Ù°í ´À²¸Áø´Ù¸é:
if test -f /etc/foo
then
´ÙÀ½°ú °°ÀÌ ¾µ ¼ö ÀÖ´Ù:
if [ -f /etc/foo ]; then
´ë°ýÈ£°¡ test
¿ªÇÒÀ» ÇÑ´Ù. ´ç½ÅÀÌ C ÇÁ·Î±×·¡¹Ö¿¡ °æÇèÀÌ ÀÖ´Ù¸é, ÀÌ ¹®¹ýÀÌ º¸´Ù Æí¾ÈÇÏ°Ô ´À²¸Áú °ÍÀÌ´Ù. ¾çÂÊ ´ë°ýÈ£ »çÀÌ¿¡ °ø¹é ¹®ÀÚ°¡ ÀÖ¾î¾ß ÇÑ´Ù´Â »ç½ÇÀ» ¿°µÎ¿¡ µÖ¶ó. ¼¼¹ÌÄÝ·Ð ";
"Àº ¸í·ÉÀÇ ³¡À̶ó°í ½©¿¡°Ô ¾Ë·ÁÁØ´Ù. ¼¼¹ÌÄÝ·Ð µÚ¿¡ ¿À´Â ¸ðµç °ÍÀº ºÐ¸®µÈ ¶óÀο¡ ÀÖ´Â °Íó·³ ½ÇÇàµÈ´Ù. ¼¼¹ÌÄÝ·ÐÀ» »ç¿ëÇÔÀ¸·Î½á º¸´Ù Àб⠽¬¿öÁø´Ù. ¹°·Ð ¼¼¹ÌÄÝ·ÐÀ» »ç¿ëÇÏ´Â °ÍÀº ¼±Åà »çÇ×ÀÌ´Ù. ¸¸ÀÏ ±¦Âú´Ù¸é, thenÀ» ´ÙÀ½ ¶óÀο¡ µÎÀÚ.
test¿¡¼ º¯¼ö¸¦ »ç¿ëÇÒ ¶§, µû¿ÈÇ¥·Î º¯¼ö¸¦ µÑ·¯ ½Î¼ »ç¿ëÇÏ´Â °ÍÀº ÁÁÀº »ý°¢ÀÌ´Ù. ´ÙÀ½ÀÇ ¿¹¸¦ º¸ÀÚ:
if [ "$name" -eq 5 ]; then
while ... do ...
done
while ±¸Á¶´Â ·çÇÁ ±¸Á¶ÀÌ´Ù. ±âº»ÀûÀ¸·Î while ±¸Á¶°¡ ÇÏ´Â ÀÏÀ» ¸»·Î Ç¥ÇöÇÏ¸é ´ÙÀ½°ú °°´Ù. "ÀÌ Á¶°ÇÀÌ ÂüÀÎ µ¿¾È¿¡´Â, ÀÌ°ÍÀ» ½ÇÇàÇÑ´Ù. ´Ü, Á¶°ÇÀÌ ´õ ÀÌ»ó ÂüÀÌ ¾Æ´Ò ¶§±îÁö¸¸". ÀÌÁ¦ ¿¹Á¦ Çϳª¸¦ º¸ÀÚ:
#!/bin/bash
while true; do
echo "Press CTRL-C to quit."
done
true´Â ½ÇÁ¦ ÇϳªÀÇ ÇÁ·Î±×·¥ÀÌ´Ù. ÀÌ ÇÁ·Î±×·¥ÀÌ ÇÏ´Â ÀÏÀº ÁߴܾøÀÌ ·çÇÁ°¡ °è¼Ó µ¹µµ·Ï ÇÏ´Â °ÍÀÌ´Ù. while ±¸Á¶¿¡¼ true¸¦ »ç¿ëÇÒ ¶§´Â ½© ÇÁ·Î±×·¥ÀÌ true¸¦ ºÎ¸¥ ´ÙÀ½ ½ÇÇàÇØ¾ß ÇϹǷΠ¾Æ¹«·¡µµ ¼Óµµ¸é¿¡¼ ´À¸± ¼ö ¹Û¿¡ ¾ø´Ù. ÇÏÁö¸¸ trueÀÇ ´ë½Å ":
" ¸í·ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
#!/bin/bash
while :; do
echo "Press CTRL-C to quit."
done
ÀÌ°ÍÀº Á¤È®ÇÏ°Ô °°Àº °á°ú¸¦ º¸¿©ÁÖÁö¸¸, ":
" ¸í·ÉÀÌ bash
¾È¿¡
³»Æ÷µÈ
Ư¼ºÀ̱⠶§¹®¿¡ ÈξÀ ºü¸£´Ù. À§ÀÇ ¿¹Á¦°¡ ÀÌÀü ¿¹Á¦¿Í ´Ù¸¥ Á¡Àº ÀбⰡ Á¶±Ý ¾î·Á¿öÁø ´ë½Å ¼Óµµ°¡ »¡¶óÁ³´Ù´Â °ÍÀÌ´Ù. true¿Í ":
" ¸í·É Áß ´õ ÆíÇÏ°Ô ´À²¸Áö´Â °ÍÀ» »ç¿ëÇ϶ó. ´ÙÀ½¿¡ Á¦½ÃµÇ´Â º¯¼ö¸¦ »ç¿ëÇÏ´Â ¿¹Á¦´Â ¾Æ¸¶µµ º¸´Ù ´õ À¯¿ëÇÒ °ÍÀÌ´Ù:
#!/bin/bash
x=0; # x
ÀÇ
°ªÀ»
0
À¸·Î
ÃʱâÈ
while [ "$x" -le 10 ]; do
echo "Current value of x: $x"
# x
ÀÇ
°ªÀ»
Áõ°¡½ÃŲ´Ù
:
x=$(expr $x + 1)
sleep 1
done
À§ÀÇ ¿¹Á¦¿¡¼ º¸µíÀÌ, ¿©±â¼´Â test(´ë°ýÈ£ ¾ÈÀÇ Æû)¸¦ ÀÌ¿ëÇؼ º¯¼ö xÀÇ Á¶°ÇÀ» üũÇÏ°í ÀÖ´Ù. ¿É¼Ç –le´Â ¸¸ÀÏ x°¡ °ª 10°ú °°°Å³ª ÀÛÀºÁö üũÇÑ´Ù. À§ÀÇ Äڵ带 ¸»·Î Çϸé, " x°¡ 10 º¸´Ù À۰ųª °°Àº µ¿¾È, xÀÇ ÇöÀç °ªÀ» ÇÁ¸°Æ®ÇÏ°í´Â xÀÇ ÇöÀç °ª¿¡ 1À» ´õÇÑ´Ù"ÀÌ´Ù. sleep
1 Àº ´ÜÁö ÇÁ·Î±×·¥ÀÌ Àá±ñ ½¬µµ·Ï ÇÑ´Ù. ÀÌ ¹®ÀåÀº ¾ø¾îµµ »ó°ü¾ø´Ù. ÀÌ ¿¹Á¦¿¡¼ ÇÏ´Â ÀÏÀº »óµî(equality) Å×½ºÆ®ÀÌ´Ù. ¸¸ÀÏ º¯¼ö°¡ ¾î¶² °ª°ú °°ÀºÁö üũÇؼ °°´Ù¸é ±×¿¡ ÇØ´çÇÏ´Â ÀÏÀ» ÇÏ´Â °ÍÀÌ´Ù. ¿©±â¼ »óµî Å×½ºÆ®µéÀÇ ¸®½ºÆ®¸¦ º¸µµ·Ï ÇÏÀÚ:
¼ýÀÚµé
»çÀÌÀÇ
»óµî
üũ:
x
-eq y
x
°¡
y
¿Í
°°ÀºÁö
üũ
x
-ne y
x
°¡
y
¿Í
°°Áö
¾ÊÀºÁö
üũ
x
-gt y
x
°¡
y
º¸´Ù
Å«Áö
üũ
x
-lt y
x
°¡
y
º¸´Ù
ÀÛÀºÁö
üũ
¹®ÀÚ¿
»çÀÌÀÇ
»óµî
üũ:
x
= y
¹®ÀÚ¿
x
°¡
¹®ÀÚ¿
y
¿Í
°°ÀºÁö
üũ
x
!= y
¹®ÀÚ¿ x
°¡
¹®ÀÚ¿
y
¿Í
´Ù¸¥Áö
üũ
-n
x
¹®ÀÚ¿
x°¡ ³Î ¹®ÀÚ°¡ ¾Æ´Ï¸é true·Î °£ÁÖÇÔ
-z
x
¹®ÀÚ¿
x°¡ ³Î ¹®ÀÚÀ̸é true·Î °£ÁÖÇÔ.
À§¿¡¼ ¿ì¸®°¡ ÀÛ¼ºÇÑ ·çÇÁ ½ºÅ©¸³Æ®´Â ´ÙÀ½ÀÇ ÇÑ ¶óÀÎÀ» Á¦¿ÜÇϸé ÀÌÇØÇϱ⿡ ¾î·ÆÁö ¾Ê´Ù:
x=$(expr
$x + 1)
À§ÀÇ ¸í·ÉÀº xÀÇ °ªÀ» 1¸¸Å¾¿ Áõ°¡½ÃŲ´Ù°í ¾Ë·ÁÁÖ°í ÀÖ´Ù. ÇÏÁö¸¸ $(...)
°¡ ¶æÇÏ´Â °ÍÀº ¹«¾ùÀΰ¡? º¯¼öÀΰ¡? ¾Æ´Ï´Ù. »ç½Ç, ÀÌ°ÍÀº ´ç½ÅÀÌ ¸í·É expr $x + 1
¸¦ ¸ÕÀú ½ÇÇàÇÏ°í, ±× °á°ú¸¦ ´Ù½Ã x °ªÀ¸·Î Çϱ⠿øÇÑ´Ù°í ½©¿¡°Ô ¾Ë·ÁÁÖ´Â ¹æ¹ýÀÌ´Ù. ¾î¶² ¸í·ÉÀ̵ç $(...)
À¸·Î µÑ·¯ ½ÎÀÎ ¸í·ÉÀº ¸ÕÀú ½ÇÇàµÈ´Ù:
#!/bin/bash
me=$(whoami)
echo "I am $me."
ÀÌ ¿¹Á¦¸¦ ½ÇÇàÇغ¸¸é ³»°¡ ¸»ÇÏ´Â ¹Ù¸¦ ÀÌÇØÇÏ°Ô µÉ °ÍÀÌ´Ù. À§ÀÇ ¿¹Á¦´Â ´ÙÀ½°ú °°ÀÌ ¾²¿©Áú ¼öµµ Àִµ¥ °á°ú´Â °°´Ù:
#!/bin/bash
echo "I am $(whoami)."
¾î´À ÂÊÀÌ º¸´Ù Àб⠽¬¿îÁö´Â ´ç½ÅÀÌ °áÁ¤Ç϶ó. ¸í·ÉÀ» ½ÇÇàÇϰųª ¸í·ÉÀÇ °á°ú¸¦ º¯¼ö¿¡ ´ëÀÔÇÏ´Â ´Ù¸¥ ¹æ¹ýÀÌ ¶Ç ÀÖ´Ù. ÀÌ°ÍÀº µÚ¿¡¼ ¼³¸íÇϵµ·Ï ÇÏ°Ú´Ù. Áö±ÝÀº $(...)
À» »ç¿ëÇÏÀÚ.
until ... do ...
done
until
±¸Á¶´Â while
±¸Á¶¿Í ¸Å¿ì À¯»çÇÏ´Ù. ´Ü ÇϳªÀÇ Â÷ÀÌÁ¡Àº Á¶°ÇÀÌ ¹Ý´ë¶ó´Â Á¡ÀÌ´Ù. while
±¸Á¶´Â Á¶°ÇÀÌ ÂüÀÎ µ¿¾ÈÀº °è¼ÓÇؼ ¹Ýº¹µÇÁö¸¸ until ±¸Á¶´Â Á¶°ÇÀÌ ÂüÀÌ µÉ ¶§±îÁö ¹Ýº¹µÈ´Ù. ±×·¡¼ ±âº»ÀûÀ¸·Î until
±¸Á¶´Â
"ÀÌ Á¶°ÇÀÌ ÂüÀÌ µÉ ¶§±îÁö, ÀÌ°ÍÀ» Çضó"¶ó´Â ±¸Á¶ÀÌ´Ù. ´ÙÀ½ ¿¹Á¦ Çϳª¸¦ º¸µµ·Ï ÇÏÀÚ:
#!/bin/bash
x=0
until [ "$x" -ge 10 ]; do
echo "Current value of x: $x"
x=$(expr $x + 1)
sleep 1
done
¾Æ¸¶µµ ÀÌ ÂªÀº ÄÚµå´Â ¾îµð¼ º» µíÇÒ °ÍÀÌ´Ù. Çѹø ½ÇÇàÇؼ °á°ú°¡ ¾î¶»°Ô ³ª¿À´ÂÁö º¸¶ó. ±âº»ÀûÀ¸·Î, untilÀº x°¡ 10 º¸´Ù Å©°Å³ª °°°Ô µÉ ¶§±îÁö °è¼ÓÇؼ ¹Ýº¹ÇÒ °ÍÀÌ´Ù. xÀÇ °ªÀÌ 10¿¡ À̸£°Ô µÇ¸é, ·çÇÁ´Â Á¤ÁöÇÒ °ÍÀÌ´Ù. µû¶ó¼, ¸¶Áö¸·¿¡ ÇÁ¸°Æ® µÇ´Â xÀÇ °ªÀº 9°¡ µÉ °ÍÀÌ´Ù.
for ... in ... do
... done
for
±¸Á¶´Â ÀÏÁ¤ ¹üÀ§ÀÇ º¯¼ö ¾È¿¡¼ ·çÇÁ¸¦ µ¹ ¶§ »ç¿ëµÈ´Ù. ¿¹¸¦ µéÀÚ¸é, ¸Å Ãʸ¶´Ù 10°³ÀÇ Á¡À» ÇÁ¸°Æ®ÇÏ´Â ÀÛÀº ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¶§ for¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù:
#!/bin/bash
echo -n "Checking system for errors"
for dots in 1 2 3 4 5 6 7 8 9 10; do
echo -n "."
echo "System clean."
done
¸ð¸£´Â »ç¶÷µµ ÀÖÀ» ¼ö ÀÖÀ¸¹Ç·Î, -n ¿É¼Ç¿¡ ´ëÇØ ¼³¸íÇÏÀÚ. -n
¿É¼ÇÀº echo »ç¿ë ½Ã
ÀÚµ¿ÀûÀ¸·Î °³Çà ¹®ÀÚ°¡ ´õÇØÁöÁö ¾Êµµ·Ï Çϱâ À§ÇØ »ç¿ëµÈ´Ù. ÇѹøÀº –n ¿É¼ÇÀ» °¡Áö°í, ¶Ç ÇѹøÀº ¾øÀÌ ½ÇÇàÇغ¸¸é ³»°¡ ¸»ÇÏ´Â °ÍÀÌ ¹«¾ùÀÎÁö ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. º¯¼ö dotsÀº 1ºÎÅÍ 10±îÁöÀÇ °ªÀ» °®°í ·çÇÁ¸¦ µ¹¸é¼ °¢ °ª¸¶´Ù Á¡ Çϳª¾¿À» ÇÁ¸°Æ®ÇÑ´Ù. º¯¼ö°¡ °ªÀ» °®°í ·çÇÁ¸¦ µ·´Ù´Â °ÍÀÌ ¹«¾ùÀ» ¶æÇÏ´ÂÁö º¸±â À§ÇØ ´ÙÀ½ÀÇ ¿¹Á¦¸¦ Çغ¸ÀÚ:
#!/bin/bash
for x in paper pencil pen; do
echo "The value of variable x is: $x"
sleep 1
done
ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¶§, ¸Ç óÀ½¿£ x°¡ paper¶õ °ªÀ» °®°í, ´ÙÀ½¿£ pencil, ±× ´ÙÀ½¿£ penÀ̶õ °ªÀ» °®´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù. ´õ ÀÌ»óÀÇ °ªÀÌ ¾øÀ» ¶§, ·çÇÁ´Â ³¡³´Ù.
¿©±â Á» ´õ À¯¿ëÇÑ ¿¹Á¦°¡ ÀÖ´Ù. ´ÙÀ½ ÇÁ·Î±×·¥Àº ÇöÀç µð·ºÅ丮¿¡ ÀÖ´Â ¸ðµç ÆÄÀÏ¿¡ .html È®ÀåÀÚ¸¦ ºÙÀδÙ:
#!/bin/bash
for file in *; do
echo "Adding .html extension to
$file..."
mv $file $file.html
sleep 1
done
*´Â ¿ÍÀϵå Ä«µå ¹®ÀÚÀÌ´Ù. *°¡ ¶æÇÏ´Â °ÍÀº "ÇöÀç µð·ºÅ丮ÀÇ ¸ðµç °Í"À¸·Î ÀÌ ¿¹Á¦¿¡¼´Â ÇöÀç µð·ºÅ丮ÀÇ ¸ðµç ÆÄÀÏÀ» ¶æÇÑ´Ù. ÀÌ ÇÁ·Î±×·¥À» ½ÇÇàÇϸé ÇöÀç µð·ºÅ丮ÀÇ ¸ðµç ÆÄÀÏ µÚ¿¡ .html È®ÀåÀÚ°¡ ºÙ°Ô µÈ´Ù. º¯¼ö fileÀÌ ¸ðµç °ªÀ» °¡Áö¸é¼ ·çÇÁ¸¦ µ·´Ù´Â °ÍÀ» »ó±âÇ϶ó. ÀÌ °æ¿ì¿¡´Â ÇöÀç µð·ºÅ丮ÀÇ ÆÄÀϵéÀ» °ªÀ¸·Î °®´Â´Ù. mv´Â º¯¼ö fileÀÇ °ªÀ» .html È®ÀåÀÚ¸¦ °¡Áø À̸§À¸·Î ¼öÁ¤Çϴµ¥ »ç¿ëµÈ´Ù.
case ... in ...
done
case
±¸Á¶´Â if ±¸Á¶¿Í ¸Å¿ì À¯»çÇÏ´Ù. ±âº»ÀûÀ¸·Î üũ ÇؾßÇÒ Á¶°ÇÀÌ ¸¹°í if ¹®À» °è¼ÓÇؼ ¾²°í ½ÍÁö ¾ÊÀ» ¶§ case
±¸Á¶´Â ±× À§·ÂÀ» ¹ßÈÖÇÑ´Ù. ´ÙÀ½ÀÇ ÂªÀº Äڵ带 º¸ÀÚ:
#!/bin/bash
x=5 # x
°ªÀ»
5
·Î
ÃʱâÈ
#
ÀÌÁ¦
x
ÀÇ
°ªÀ»
üũÇÑ´Ù
:
case $x in
0) echo "Value of x is 0."
;;
5) echo "Value of x is 5."
;;
9) echo "Value of x is 9."
;;
*) echo "Unrecognized value."
esac
case
±¸Á¶´Â xÀÇ °ª¿¡ ´ëÇؼ ¼¼ °¡ÁöÀÇ °¡´É¼ºÀ» üũÇÒ °ÍÀÌ´Ù. ÀÌ ¿¹Á¦¿¡¼´Â óÀ½¿¡ xÀÇ °ªÀÌ 0ÀÎÁö üũ ÇÑ ÈÄ, ±× °ªÀÌ 5ÀÎÁö üũÇÏ°í ´ÙÀ½¿¡´Â 9ÀÎÁö üũÇÑ´Ù. ¸¶Áö¸·À¸·Î ¾ÕÀÇ ¸ðµç °æ¿ì¿¡ ÇØ´çÇÏÁö ¾Ê´Â´Ù¸é, "Unrecognized
value."¶ó´Â ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÑ´Ù. "*
"°¡ "¸ðµç °Í"À» ¶æÇÑ´Ù°í Çß´ø °ÍÀ» ±â¾ïÇ϶ó. ÀÌ ¿¹Á¦¿¡¼´Â "¾Õ¼ ¸í½ÃµÇ¾ú´ø °ªÀÌ ¾Æ´Ñ ¸ðµç °ª"À» ¶æÇÑ´Ù. ¸¸ÀÏ xÀÇ °ªÀÌ 0, 5, 9°¡ ¾Æ´Ñ ´Ù¸¥ °ªÀ̶ó¸é ±× °ªÀº *ÀÇ ¹üÁÖ¿¡ µé¾î°¡°Ô µÈ´Ù. case¸¦ »ç¿ëÇÒ ¶§, °¢ Á¶°ÇÀº ¹Ýµå½Ã µÎ °³ÀÇ ¼¼¹ÌÄÝ·ÐÀ¸·Î ³¡³ª¾ß ÇÑ´Ù. if¸¦ ¾µ ¼ö Àִµ¥µµ ¿Ö case¸¦ »ç¿ëÇϴ°¡? ¿©±â if¸¦ »ç¿ëÇؼ ÀÛ¼ºÇÑ À§ÀÇ ¿¹Á¦¿Í ¶È °°Àº ÇÁ·Î±×·¥ÀÌ ÀÖ´Ù. ¾î´À ÂÊÀÌ ÀÛ¼ºÇϱ⠽¬¿ì¸ç Àб⠽¬¿îÁö ºñ±³ÇØ º¸¶ó:
#!/bin/bash
x=5 # x
ÀÇ
°ªÀ»
5
·Î
ÃʱâÈ
if [ "$x" -eq 0 ]; then
echo "Value of x is 0."
elif [ "$x" -eq 5 ]; then
echo "Value of x is 5."
elif [ "$x" -eq 9 ]; then
echo "Value of x is 9."
else
echo "Unrecognized value."
fi
Àοë
ºÎÈ£
½© ½ºÅ©¸³Æÿ¡¼ ÀÎ¿ë ºÎÈ£´Â Áß¿äÇÑ ºÎºÐÀ» Â÷ÁöÇÑ´Ù. ÀÎ¿ë ºÎÈ£¿¡´Â ¼¼ °¡Áö Á¾·ù°¡ ÀÖ´Ù. µû¿ÈÇ¥: "
, ÀÛÀº µû¿ÈÇ¥(¾îÆ÷½ºÆ®·ÎÇÇ): '
, ¿ª µû¿ÈÇ¥(¾ïÀ½ ¾Ç¼¾Æ®¶ó°íµµ ÇÔ): `
ÀÇ ¼¼ °¡ÁöÀÌ´Ù. ÀÌµé °¢°¢ÀÌ ÀǹÌÇÏ´Â °ÍÀÌ ´Ù¸¥°¡? ±×·¸´Ù.
µû¿ÈÇ¥´Â ÁÖ·Î °ø¹é ¹®ÀÚ¸¦ Æ÷ÇÔÇÑ ¹®ÀÚ¿À» ´ãÀ» ¶§ ÀÌ¿ëµÈ´Ù. ¿¹¸¦ µé¸é, "This string contains
whitespace."À»
º¸ÀÚ.
µû¿ÈÇ¥·Î µÑ·¯ ½ÎÀÎ ¹®ÀÚ¿Àº ÇϳªÀÇ ÀÎÀڷμ Ãë±ÞµÈ´Ù. ´ÙÀ½ÀÇ ¿¹Á¦¸¦ º¸ÀÚ:
xconsole$
mkdir hello world
xconsole$
ls -F
hello/
world/
ÀÌ ¿¹Á¦¿¡¼ ¿ì¸®´Â µÎ °³ÀÇ µð·ºÅ丮¸¦ ¸¸µé¾ú´Ù. mkdirÀº hello¿Í world¸¦ µÎ °³ÀÇ ÀÎÀÚ·Î ¹Þ¾Æµé¿©¼ µÎ °³ÀÇ µð·ºÅ丮¸¦ ¸¸µç °ÍÀÌ´Ù. ÀÌÁ¦, ´ÙÀ½°ú °°ÀÌ ÇßÀ» ¶§ÀÇ °á°ú´Â ¾î¶²Áö »ìÆì º¸µµ·Ï ÇÏÀÚ:
xconsole$
mkdir "hello world"
xconsole$
ls -F
hello/
hello world/ world/
À̹ø¿¡´Â À̸§ÀÌ µÎ ´Ü¾î·Î ÀÌ·ç¾îÁø µð·ºÅ丮¸¦ ¸¸µé¾ú´Ù. µû¿ÈÇ¥°¡ µÎ ´Ü¾î¸¦ ÇϳªÀÇ ÀÎÀÚ·Î ¸¸µç °ÍÀÌ´Ù. µû¿ÈÇ¥°¡ ¾ø´Ù¸é, mkdirÀº hello¸¦ ù¹ø° ÀÎÀÚ·Î, world¸¦ µÎ¹ø° ÀÎÀÚ·Î »ý°¢ÇÒ °ÍÀÌ´Ù.
ÀÛÀº µû¿ÈÇ¥´Â ÁÖ·Î º¯¼ö¸¦ ´Ù·ê ¶§¿¡ »ç¿ëµÈ´Ù. ¸¸ÀÏ º¯¼ö°¡ µû¿ÈÇ¥·Î µÑ·¯½Î¿© ÀÖÀ¸¸é ±× °ªÀÇ ¼öÄ¡°¡ ±¸ÇØÁú °ÍÀÌ´Ù. ¸¸ÀÏ ÀÛÀº µû¿ÈÇ¥·Î µÑ·¯½Î¿© ÀÖÀ¸¸é ±× °ªÀÇ ¼öÄ¡´Â °è»êµÇ¾îÁöÁö ¾Ê´Â´Ù. ÀÌ°ÍÀÌ ¶æÇÏ´Â ¹Ù¸¦ ¸íÈ®È÷ Çϱâ À§ÇØ ´ÙÀ½ÀÇ ¿¹Á¦¸¦ ½ÇÇàÇغ¸ÀÚ:
#!/bin/bash
x=5 # initialize x to 5
# use double quotes
echo "Using double quotes, the value of x is: $x"
# use forward quotes
echo 'Using forward quotes, the value of x is: $x'
¹«¾ùÀÌ Â÷ÀÌ ³ª´ÂÁö º¸¾Ò´Â°¡? ¸¸ÀÏ ¹®ÀÚ¿À» º¯¼ö·Î »ç¿ëÇÒ °èȹÀÌ ¾Æ´Ï¶ó¸é µû¿ÈÇ¥·Î µÑ·¯½Î¼ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ¾î¶»°Ô ÇÒ Áö Á¤ÇÏÁö ¸øÇß´Ù¸é ÀÛÀº µû¿ÈÇ¥·Îµµ µû¿Èǥó·³ ¹®ÀÚ¿¿¡ °ø¹é ¹®ÀÚ¸¦ Æ÷ÇÔÇϵµ·Ï »ç¿ëÇÒ ¼ö ÀÖ´Ù:
xconsole$
mkdir 'hello world'
xconsole$
ls -F
hello
world/
¿ª µû¿ÈÇ¥´Â µû¿ÈÇ¥³ª ÀÛÀº µû¿ÈÇ¥¿Í´Â ¿ÏÀüÈ÷ ´Ù¸¥ ¿ëµµ·Î ¾²ÀδÙ. °ø¹é ¹®ÀÚ¸¦ Æ÷ÇÔÇÏ´Â µ¥¿¡´Â ¾²ÀÌÁö ¾Ê´Â´Ù. ÀÌ ±ÛÀÇ ¾ÕÂÊ¿¡¼ ´ÙÀ½ ¶óÀÎÀ» »ç¿ëÇß´ø °ÍÀ» ±â¾ïÇØ º¸¶ó:
x=$(expr $x + 1)
ÀÌ¹Ì ´ç½ÅÀÌ ¾ËµíÀÌ, ¸í·É expr $x + 1
ÀÇ °á°ú°¡ º¯¼ö x¿¡ µé¾î°¡°Ô µÈ´Ù. ¿ª µû¿ÈÇ¥¸¦ »ç¿ëÇÑ ´ÙÀ½ÀÇ ¸í·Éµµ ²À °°Àº °á°ú¸¦ ³½´Ù:
x=`expr $x + 1`
¾î´À °ÍÀ» »ç¿ëÇØ¾ß Çϴ°¡ ÇÏ´Â ¹®Á¦´Â ¼øÀüÈ÷ ´ç½Å¿¡°Ô ´Þ·Á ÀÖ´Ù. ´ç½ÅÀÌ ÁÁÀº ÂÊÀ» ¼±ÅÃÇ϶ó. ¿ª µû¿ÈÇ¥°¡ $(...)
º¸´Ù ÀÚÁÖ »ç¿ëµÇ´Â °ÍÀ» º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÇÏÁö¸¸, $(...)
°¡ º¸´Ù Àб⠽±´Ù. ´ÙÀ½°ú °°Àº °æ¿ì¿£ ƯÈ÷ ´õ ±×·¸´Ù:
$!/bin/bash
echo "I am `whoami`"
BASH¿¡¼ÀÇ ¼ö½Ä ¿¬»ê
bash
Àº ¼ö½Ä Ç¥ÇöÀ» ¼öÇàÇÒ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù. ÀÌ¹Ì º¸¾ÒµíÀÌ, ¼ö½Ä ¿¬»êÀº expr ¸í·ÉÀ» ÅëÇؼ ¼öÇàµÈ´Ù. ±×·¯³ª, exprÀº true ¸í·É°ú °°ÀÌ ´À¸° °ÍÀ¸·Î »ý°¢µÈ´Ù. ÀÌµé ¸í·ÉÀÌ ´À¸° ÀÌÀ¯´Â ÀÌµé ¸í·ÉÀ» ¼öÇàÇϱâ À§ÇØ, ½©Àº ±×°ÍµéÀ» ½ÃÀÛÇØ¾ß ÇÑ´Ù. ½© ÀÚüÀÇ ³»Æ÷µÈ Ư¼ºÀ» ÀÌ¿ëÇÏ´Â °ÍÀÌ ÈξÀ ´õ ºü¸£´Ù. ±×·¡¼ true ´ë½Å¿¡ ":
"À» »ç¿ëÇÏ´Â °ÍÀ» ¾Õ¼¼ º¸¾Ò´Ù. exprÀ» »ç¿ëÇÏ´Â ´ë½Å, °è»êÇÏ°íÀÚ ÇÏ´Â ¼ö½ÄÀ» $((...))
¾È¿¡ ¾²¸é µÈ´Ù. ÀÌ°ÍÀº $(...)
°ú´Â ´Ù¸£´Ù. °ýÈ£ÀÇ ¼ýÀÚ°¡ ´Ù¸£Áö ¾ÊÀº°¡. ´ÙÀ½ ¿¹Á¦¸¦ ½ÇÇàÇØ º¸ÀÚ:
#!/bin/bash
x=8 # x
ÀÇ
°ªÀ»
8
·Î
ÃʱâÈ
y=4 # y
ÀÇ
°ªÀ»
4
·Î
ÃʱâÈ
#
ÀÌÁ¦
x
¿Í
y
ÀÇ
ÇÕÀ»
z
¿¡
´ëÀÔÇÑ´Ù
:
z=$(($x + $y))
echo "The sum of $x + $y is $z"
¾î¶² °ÍÀ» ¼±ÅÃÇϵçÁö, ¼øÀüÈ÷ ´ç½Å¿¡°Ô ´Þ·Á ÀÖ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ $((...))
À» »ç¿ëÇÏ´Â °Íº¸´Ù exprÀ» »ç¿ëÇÏ´Â °ÍÀÌ ÆíÇÏ´Ù¸é, ±×°ÍÀ» »ç¿ëÇÏ¸é µÈ´Ù.
bash
¿¡¼´Â µ¡¼À, »¬¼À, °ö¼À, ³ª´°¼À, ¸ðµâ·¯½º °è»êÀÌ °¡´ÉÇÏ´Ù. °¢ °è»êÀÌ ±×¿¡ ÇØ´çÇÏ´Â ¿¬»êÀÚ¸¦ °¡Áö°í ÀÖ´Ù:
°è»ê
¿¬»êÀÚ
µ¡¼À +
»¬¼À -
°ö¼À *
³ª´°¼À /
¸ðµâ·¯½º %
óÀ½ÀÇ ³× °³ ¿¬»êÀÚ´Â ¸ðµç »ç¶÷µé¿¡°Ô Àͼ÷ÇÒ °ÍÀÌ´Ù. ¸¶Áö¸·¿¡ ÀÖ´Â ¸ðµâ·¯½º´Â µÎ °³ÀÇ °ªÀ¸·Î ³ª´°¼ÀÀ» ÇÒ ¶§ ³ª¸ÓÁö °ªÀ» ¸»ÇÏ´Â °ÍÀÌ´Ù. ´ÙÀ½Àº bash¿¡¼ÀÇ ¼ö½Ä ¿¬»ê¿¡ ´ëÇÑ ¿¹Á¦ÀÌ´Ù:
#!/bin/bash
x=5 # x
ÀÇ
°ªÀ»
5
·Î
ÃʱâÈ
y=3 # yÀÇ
°ªÀ»
3
·Î
ÃʱâÈ
add=$(($x + $y)) # x
¿Í
y
°ªÀ»
´õÇؼ
º¯¼ö
add
¿¡
´ëÀÔ
sub=$(($x - $y)) # x
ÀÇ
°ª¿¡¼
y
ÀÇ
°ªÀ»
»©¼
º¯¼ö
sub
¿¡
´ëÀÔ
mul=$(($x * $y)) # x
¿Í
y
°ªÀ»
°öÇؼ
º¯¼ö
mul
¿¡
´ëÀÔ
div=$(($x / $y)) # x
ÀÇ
°ªÀ»
y
ÀÇ
°ªÀ¸·Î
³ª´©¾î
º¯¼ö
div
¿¡
´ëÀÔ
mod=$(($x % $y)) # x / y
ÀÇ
³ª¸ÓÁö
°ªÀ»
±¸ÇØ
º¯¼ö
mod
¿¡
´ëÀÔ
#
´äÀ»
Ãâ·Â
:
echo "Sum: $add"
echo "Difference: $sub"
echo "Product: $mul"
echo "Quotient: $div"
echo "Remainder: $mod"
À§ÀÇ ¿¹Á¦ ÄÚµå´Â exprÀ» »ç¿ëÇؼ ´Ù½Ã ¾µ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¸é, add=$(($x
+ $y))
´ë½Å¿¡ add=$(expr
$x + $y)
À̳ª, add=`expr
$x + $y`
¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
»ç¿ëÀÚ
ÀÔ·Â
Àбâ
ÀÌÁ¦ºÎÅÍ Àç¹ÌÀÖ´Â ºÎºÐÀÌ ½ÃÀ۵ȴÙ. ´ç½ÅÀÇ ÇÁ·Î±×·¥ÀÌ »ç¿ëÀÚ¿Í ´ëÈÇϵµ·Ï ¸¸µé¼ö ÀÖ´Ù. »ç¿ëÀڷκÎÅÍ ÀÔ·ÂÀ» ¹Þ¾ÆµéÀÌ´Â ¸í·ÉÀº read
ÀÌ´Ù. read
´Â º¯¼ö¸¦ »ç¿ëÇÏ´Â bash¿¡ ³»Æ÷µÈ ¸í·ÉÀÌ´Ù. ´ÙÀ½ÀÇ ¿¹¸¦ º¸ÀÚ:
#!/bin/bash
#
»ç¿ëÀÚ
À̸§À»
¹Þ¾ÆµéÀÌ°í
Àλ縦
Ãâ·ÂÇÑ´Ù
echo -n "Enter your name: "
read user_name
echo "Hello $user_name!"
ÀÌ ¿¹Á¦¿¡¼ º¯¼ö´Â user_name
ÀÌ´Ù. ¹°·Ð º¯¼ö À̸§Àº ´ç½ÅÀÌ ÁÁ¾ÆÇÏ´Â ´Ù¸¥ °ÍÀ¸·Î ºÒ·¯µµ µÈ´Ù. read
´Â »ç¿ëÀÚ°¡ ¹«¾ùÀΰ¡ ÀÔ·ÂÇÏ°í´Â ¿£ÅÍÅ°¸¦ ´©¸£±â¸¦ ±â´Ù¸°´Ù. ¸¸ÀÏ ¾Æ¹« °Íµµ ÀԷµÇÁö ¾Ê°í ¿£ÅÍÅ°°¡ ´·¯Áö¸é, read
´Â ÄÚµåÀÇ ´ÙÀ½ ¶óÀÎÀ» ½ÇÇàÇÑ´Ù. Çѹø Çغ¸¶ó. ¿©±â »ç¿ëÀÚ°¡ ¹«¾ùÀΰ¡ ÀÔ·ÂÇß´ÂÁö È®ÀÎÇϱâ À§ÇØ Ã¼Å©ÇÏ´Â °Í¸¸ Á¦¿ÜÇÏ°í´Â À§ÀÇ ¿¹Á¦¿Í ²À °°Àº Äڵ尡 ÀÖ´Ù:
#!/bin/bash
# »ç¿ëÀÚ
À̸§À»
¹Þ¾ÆµéÀÌ°í
Àλ縦
Ãâ·ÂÇÑ´Ù
echo -n "Enter your name: "
read user_name
#
»ç¿ëÀÚ°¡
¾Æ¹«
°Íµµ
ÀÔ·ÂÇÏÁö
¾ÊÀ¸¸é
:
if [ -z "$user_name" ]; then
echo "You did not tell me your name!"
exit
fi
echo "Hello $user_name!"
¿©±â¿¡¼,
¸¸ÀÏ »ç¿ëÀÚ°¡ ¾Æ¹« °Íµµ ÀÔ·ÂÇÏÁö ¾Ê°í ¿£ÅÍÅ°¸¦ ´©¸¥´Ù¸é, ¿ì¸®ÀÇ ÇÁ·Î±×·¥Àº ºÒÆòÀ» ÇÏ°í´Â ³¡³ª ¹ö¸± °ÍÀÌ´Ù. »ç¿ëÀÚ ÀÔ·ÂÀ» ¹Þ¾ÆµéÀÌ´Â °ÍÀº »ç¿ëÀÚ°¡ ƯÁ¤ÇÑ °ÍÀ» ÀÔ·ÂÇϵµ·Ï ÇÏ´Â ´ëÈ½Ä ÇÁ·Î±×·¥¿¡ À¯¿ëÇÏ°Ô ¾²ÀδÙ. ¿¹¸¦ µé¸é, °£´ÜÇÑ µ¥ÀÌÅͺ£À̽º¸¦ ¸¸µé°í »ç¿ëÀÚ¿¡°Ô µ¥ÀÌÅͺ£À̽º¿¡ µé¾î °¥ ³»¿ëÀ» ÀÔ·ÂÇϵµ·Ï ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
ÇÔ¼ö
ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¸é ½ºÅ©¸³ÆÃÀº ´õ¿í ½¬¿öÁö°í ÄÚµå´Â À¯Áö º¸¼öÇϱⰡ ½¬¿öÁø´Ù. ±âº»ÀûÀ¸·Î ÇÔ¼ö´Â ÇÁ·Î±×·¥À» ÀÛÀº Á¶°¢À¸·Î ³ª´«´Ù. ÇÔ¼ö´Â ´ç½ÅÀÌ Á¤ÀÇÇÑ ÀÏÀ» ¼öÇàÇÏ°í ¸¸ÀÏ ´ç½ÅÀÌ ¿øÇÑ´Ù¸é ¾î¶² °ªÀ» ¸®ÅÏÇÒ ¼öµµ ÀÖ´Ù. ÇÔ¼ö¿¡ °üÇÑ ³»¿ëÀ» °è¼ÓÇؼ ¼³¸íÇϱâ Àü¿¡, ÇÔ¼ö¸¦ ÀÌ¿ëÇÑ ½© ÇÁ·Î±×·¥ÀÇ ¿¹¸¦ Çϳª º¸±â·Î ÇÏÀÚ:
#!/bin/bash
#
ÇÔ¼ö
hello()
´Â
´ÜÁö
¸Þ½ÃÁö¸¦
ÇÁ¸°Æ®Çϱ⸸
ÇÑ´Ù
hello()
{
echo "You are in function hello()"
}
echo "Calling function hello()..."
#
ÇÔ¼ö
hello()
¸¦
ºÎ¸¥´Ù
:
hello
echo "You are now out of function hello()"
À§ÀÇ ¿¹Á¦¸¦ ½ÇÇàÇØ º¸¾Æ¶ó. ÇÔ¼ö hello() ´Â ¿©±â¼´Â ¸Þ½ÃÁö¸¦ ÇÁ¸°Æ®ÇÏ´Â ´Ü ÇϳªÀÇ ¸ñÀûÀ» °¡Áö°í ÀÖ´Ù. ¹°·Ð ÇÔ¼ö´Â º¸´Ù º¹ÀâÇÑ ÀÛ¾÷À» Çϵµ·Ï ¸¸µé ¼ö ÀÖ´Ù. À§ÀÇ ¿¹¿¡¼, ¿ì¸®´Â ÇÔ¼ö hello()¸¦ ´ÙÀ½°ú °°ÀÌ À̸§À» ÀÌ¿ëÇؼ ºÒ·¶´Ù:
hello
ÀÌ ¶óÀÎÀÌ ½ÇÇàµÇ¾úÀ» ¶§, bash
´Â hello()
°¡ ÀÖ´Â ¶óÀÎÀ» ã´Â´Ù. ±× ¶óÀÎÀ» ¸Ç óÀ½¿¡¼ ãÀÚ¸¶ÀÚ, hello() ÇÔ¼öÀÇ ³»¿ëÀ» ½ÇÇàÇÑ´Ù.
À§¿¡¼ ºÃµíÀÌ, ÇÔ¼ö´Â Ç×»ó ±×°ÍÀÇ À̸§À¸·Î ºÒ¸®¿öÁø´Ù. ÇÔ¼ö¸¦ ÀÛ¼ºÇÒ ¶§´Â À§¿¡¼ ÇßµíÀÌ function_name()À¸·Î ½ÃÀÛÇϰųª, ÇÔ¼ö¶ó´Â °ÍÀ» ¸í½ÃÇÏ°í ½Í´Ù¸é function
function_name()À¸·Î ½ÃÀÛÇÒ ¼ö
ÀÖ´Ù.
ÇÔ¼ö hello()¸¦ ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÒ ¼öµµ ÀÖ´Ù:
function hello()
{
echo "You are in function hello()"
}
ÇÔ¼ö´Â Ç×»ó ºó °ýÈ£"()
"¸¦ °¡Áö°í ½ÃÀÛÇؼ´Â ±× µÚ¿¡ ½ÃÀÛ°ú ³¡À» ³ªÅ¸³»´Â Áß°ýÈ£"{...}
"°¡ ¿Â´Ù. ÀÌ Áß°ýÈ£´Â ÇÔ¼öÀÇ ½ÃÀÛ°ú ³¡À» ¾Ë·ÁÁØ´Ù. Áß°ýÈ£·Î µÑ·¯½ÎÀÎ ¸ðµç ÄÚµå´Â ÇÔ¼ö°¡ ºÒ·ÁÁö¸é ½ÇÇàµÉ °ÍÀÌ°í ¿ÀÁ÷ ±× ÇÔ¼ö¿¡¸¸ ¼ÓÇÑ´Ù. ÇÔ¼ö´Â Ç×»ó ºÒ·ÁÁö±â ÀÌÀü¿¡ Á¤ÀǵǾî¾ß ÇÑ´Ù. ´ÙÀ½ÀÇ ¿¹Á¦´Â À§ÀÇ ¿¹Á¦ ÇÁ·Î±×·¥ÀÇ ¼ø¼¸¦ ¹Ù²ã¼ ÇÔ¼ö°¡ Á¤ÀǵDZâ Àü¿¡ ºÎ¸£µµ·Ï ÇÏ¿´´Ù
#!/bin/bash
echo "Calling function hello()..."
# ÇÔ¼ö
hello()
¸¦
ºÎ¸¥´Ù
:
hello echo "You are now out of function hello()"
# function hello() just prints a message
hello()
{
echo "You are in function hello()"
}
À§ÀÇ ¿¹Á¦¸¦ ½ÇÇàÇÑ °á°ú´Â ´ÙÀ½°ú °°´Ù:
xconsole$
./hello.sh
Calling
function hello()...
./hello.sh:
hello: command not found
You
are now out of function hello()
´ç½ÅÀÌ º¸µíÀÌ, ¿¡·¯°¡ ¹ß»ýÇß´Ù. ±×·¯¹Ç·Î, Ç×»ó Äڵ带 ÀÛ¼ºÇÒ ¶§´Â ÇÔ¼ö¸¦ óÀ½¿¡ Á¤ÀÇÇ϶ó. Àû¾îµµ ÇÔ¼ö°¡ ºÒ·ÁÁö±â Àü¿¡ Á¤ÀÇÇ϶ó. ¿©±â ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ´Â ¶Ç ´Ù¸¥ ¿¹°¡ ÀÖ´Ù:
#!/bin/bash
# admin.sh –
°ü¸®
µµ±¸
#
ÇÔ¼ö
new_user()
´Â
»õ·Î¿î
»ç¿ëÀÚ
°èÁ¤À»
¸¸µç´Ù
new_user()
{
echo "Preparing to add a new user..."
sleep 2
adduser # run the adduser program
}
echo "1. Add user"
echo "2. Exit"
echo "Enter your choice: "
read choice
case $choice in
1) adduser #
ÇÔ¼ö
adduser()
¸¦
ºÎ¸¥´Ù
;;
*) exit
;;
esac
ÀÌ ¿¹Á¦°¡ Á¦´ë·Î ½ÇÇàµÇ±â À§Çؼ´Â, ´ç½ÅÀº ·çÆ® »ç¿ëÀÚÀ̾î¾ß ÇÑ´Ù. adduser
°¡ ¿ÀÁ÷ ·çÆ®¸¸ ½ÇÇàÇÒ ¼ö ÀÖ´Â ÇÁ·Î±×·¥À̱⠶§¹®ÀÌ´Ù. ©¸·ÇÑ ÀÌ ¿¹Á¦·Î ÇÔ¼ö°¡ ¾ó¸¶³ª À¯¿ëÇÏ°Ô ¾²ÀÏ ¼ö ÀÖ´ÂÁö ´ç½ÅÀÌ ¾Ë ¼ö ÀÖÀ¸¸é ÁÁ°Ú´Ù.
½Ã±×³Î
ÀÌ¿ëÇϱâ
´ç½ÅÀÇ ÇÁ·Î±×·¥¿¡¼ ½Ã±×³ÎÀ» ºÙÀâ¾Æ ÀÌ¿ëÇϱâ À§Çؼ ³»Æ÷µÈ ¸í·ÉÀÎ trapÀ» ¾µ ¼ö ÀÖ´Ù. ÀÌ°ÍÀº ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ°í ÀÖ´Â µµÁß¿¡ °©Àڱ⠾ƹ«·± ¸Þ½ÃÁöµµ ¾øÀÌ ³¡³ª ¹ö¸®´Â ÀϾøÀÌ ¿ì¾ÆÇÏ°Ô Á¾·á½Ãų ¼ö ÀÖ´Â ÁÁÀº ¹æ¹ýÀÌ´Ù. ¿¹¸¦ µé¾î º¸ÀÚ. ¸¸ÀÏ ´ç½ÅÀÌ ÇÁ·Î±×·¥À» ½ÇÇàÇÏ°í ÀÖ´Â ÁßÀ̶ó¸é, CTRL-C¸¦ ´©¸£´Â °ÍÀº ÇÁ·Î±×·¥¿¡°Ô ÀÎÅÍ·´Æ®(interrupt) ½Ã±×³ÎÀ» º¸³½´Ù. ÀÎÅÍ·´Æ® ½Ã±×³ÎÀº ÇÁ·Î±×·¥À» °Á¦·Î Á¾·á ½ÃŲ´Ù. trap ¸í·ÉÀ» »ç¿ëÇϸé ÀÌ ½Ã±×³ÎÀ» Àâ¾Æ³»¼ ÇÁ·Î±×·¥À» °è¼ÓÇÒ °ÍÀÎÁö ¾Æ´Ï¸é »ç¿ëÀÚ¿¡°Ô ÇÁ·Î±×·¥À» Á¾·áÇÑ´Ù´Â ¸Þ½ÃÁö¸¦ º¸³»µµ·Ï ÇϵçÁö ÇÏ´Â ¼±ÅÃÀ» ÇÒ ¼ö ÀÖ´Ù. trapÀº ´ÙÀ½ÀÇ ¹®¹ýÀ¸·Î »ç¿ëµÈ´Ù:
trap action signal
action Àº ½Ã±×³ÎÀ» Àâ¾Æ ³ÂÀ» ¶§ ´ç½ÅÀÌ ¼öÇàÇÏ°í ½ÍÀº ÀÏÀÌ°í signalÀº Àâ¾Æ ³»°íÀÚ ÇÏ´Â ½Ã±×³ÎÀÌ´Ù. ½Ã±×³ÎÀÇ ¸®½ºÆ®´Â trap
–l ¸í·ÉÀ¸·Î º¼ ¼ö ÀÖ´Ù. ´ç½ÅÀÇ ½© ÇÁ·Î±×·¥¿¡¼ ½Ã±×³ÎÀ» ÀÌ¿ëÇÒ ¶§, ½Ã±×³ÎÀÇ Ã³À½ ¼¼ ±ÛÀÚ, º¸ÅëÀº SIG¸¦ »ý·«ÇÑ´Ù. ¿¹¸¦ µé¸é, ÀÎÅÍ·´Æ® ½Ã±×³ÎÀº SIGINTÀÌÁö¸¸ ´ÙÀ½¿¡ º¸°Ô µÉ ¿¹Á¦¿¡¼´Â INT¸¸À» ÀÌ¿ëÇÑ´Ù. ½Ã±×³Î À̸§¿¡ µ¡ºÙ¿©Áø ½Ã±×³Î ¹øÈ£¸¦ ÀÌ¿ëÇصµ µÈ´Ù. ¿¹¸¦ µé¾î, SIGINTÀÇ ¼öÄ¡ °ªÀº 2ÀÌ´Ù. ´ÙÀ½ÀÇ ÇÁ·Î±×·¥À» ½ÇÇàÇØ º¸ÀÚ:
#!/bin/bash
# trap ¸í·ÉÀ» ÀÌ¿ëÇϱâ
# CTRL-C
¸¦
ºÙÀâ¾Æ°í
ÇÔ¼ö
sorry()
¸¦
½ÇÇà
:
trap sorry INT
#
ÇÔ¼ö
sorry()
´Â
¸Þ½ÃÁö¸¦
Ãâ·ÂÇÑ´Ù
sorry()
{
echo "I'm sorry Dave. I can't do that."
sleep 3
}
# 10
ºÎÅÍ
1
±îÁö
Ä«¿îÆ®
:
for i in 10 9 8 7 6 5 4 3 2 1; do
$i seconds until system failure."
sleep 1
done
echo "System failure."
ÀÌÁ¦,
ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ¾î Ä«¿îÆ® ´Ù¿îÀ» ÇÏ°í ÀÖ´Â µ¿¾È¿¡, CTRL-CÀ» ´©¸£ÀÚ. ±×·¯¸é ÇÁ·Î±×·¥¿¡ ÀÎÅÍ·´Æ® ½Ã±×³ÎÀÌ º¸³»Áú °ÍÀÌ´Ù. ÇÏÁö¸¸, ±× ½Ã±×³ÎÀº trap
¸í·É¿¡ ÀÇÇØ ºÙÀâÈ÷°í,
trap ¸í·ÉÀº sorry() ÇÔ¼ö¸¦ ½ÇÇàÇÒ °ÍÀÌ´Ù. action ÀÚ¸®¿¡ "''
" À» µÒÀ¸·Î½á trapÀÌ ½Ã±×³ÎÀ» ¹«½ÃÇϵµ·Ï ÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ "-
"¸¦ ½á¼trapÀ» ¸®¼ÂÇÒ ¼öµµ ÀÖ´Ù. ±× ¿¹¸¦ º¸ÀÚ:
# ¸¸ÀÏ SIGINT ½Ã±×³ÎÀÌ ºÙÀâÈ÷¸é ÇÔ¼ösorry()¸¦ ½ÇÇàÇÑ´Ù:
trap sorry INT
# trap
À»
¸®¼ÂÇÑ´Ù
:
trap - INT
# SIGINT
°¡
ºÙÀâÇôµµ
¾Æ¹«
°Íµµ
ÇÏÁö
¾Êµµ·Ï
ÇÑ´Ù
:
trap '' INT
trap
À» ¸®¼ÂÇϸé ÇÁ·Î±×·¥À» ÀÎÅÍ·´Æ®ÇÏ°í °Á¦·Î Á¾·áÇÏ´Â ¿ø·¡ÀÇ ÀÛ¾÷ÀÌ ½ÃÇàµÈ´Ù. trapÀÌ ¾Æ¹« °Íµµ ÇÏÁö ¾Êµµ·Ï ÇÏ¸é µé¾î¿Â ½Ã±×³ÎÀ» ¹«½ÃÇÏ°í ÇÁ·Î±×·¥Àº °è¼Ó ½ÇÇàµÈ´Ù.
AND ¿Í OR
¾Õ¿¡¼ Á¦¾î ±¸Á¶ÀÇ »ç¿ë°ú ±× À¯¿ë¼º¿¡ ´ëÇØ »ìÆì º¸¾Ò´Ù. °Å±â¿¡ ´õÇØÁú ¼ö ÀÖ´Â µÎ °¡Áö ³»¿ëÀÌ ´õ ÀÖ´Ù. ¹Ù·Î AND "&&
"¿Í OR "||
" ±¸¹®ÀÌ´Ù. AND ±¸¹®Àº ´ÙÀ½°ú °°´Ù:
Á¶°Ç_1
&& Á¶°Ç_2
AND ±¸¹®Àº óÀ½¿¡ °¡Àå ¿ÞÂÊ¿¡ ÀÖ´Â Á¶°ÇÀ» üũÇÑ´Ù. ¸¸ÀÏ ÂüÀ̶ó¸é, µÎ ¹ø° Á¶°ÇÀ» üũÇÑ´Ù. µÎ ¹ø° Á¶°Çµµ ÂüÀ̶ó¸é, ³ª¸ÓÁö Äڵ尡 ½ÇÇàµÈ´Ù. ¸¸ÀÏ Á¶°Ç_1ÀÌ °ÅÁþÀ̶ó¸é Á¶°Ç_2´Â ½ÇÇàµÇÁö ¾Ê´Â´Ù. ¸»·Î Ç®¾î ¾²¸é:
¸¸ÀÏ
Á¶°Ç_1ÀÌ ÂüÀ̸é, ±×¸®°í ¸¸ÀÏ Á¶°Ç_2°¡ ÂüÀ̸é, ±×·¸´Ù¸é...
AND ±¸¹®À» »ç¿ëÇÏ´Â ¿¹Á¦¸¦ º¸µµ·Ï ÇÏÀÚ:
#!/bin/bash
x=5
y=10
if [ "$x" -eq 5 ] && [ "$y" -eq 10
]; then
echo "Both conditions are true."
else
echo "The conditions are not true."
fi
¿©±â¼,
x¿Í
y, µÎ º¯¼ö ¸ðµÎ ¿ì¸®°¡ üũÇÏ´Â °ªµéÀ» °¡Áö°í ÀÖÀ¸¹Ç·Î Á¶°ÇµéÀÌ ÂüÀÌ µÈ´Ù. ¸¸ÀÏ °ªÀ» x=5¸¦ x=12·Î ¹Ù²Ù°í ´Ù½Ã ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°¸é, ÀÌÁ¦´Â Á¶°ÇÀÌ °ÅÁþÀÌ µÈ´Ù.
OR ±¸¹®µµ ºñ½ÁÇÑ ¹æ½ÄÀ¸·Î »ç¿ëµÈ´Ù. ´Ü ÇÑ °¡Áö Â÷ÀÌÁ¡Àº °¡Àå ¿ÞÂÊÀÇ Á¶°ÇÀÌ °ÅÁþÀÎÁö üũÇÑ ´ÙÀ½¿¡ ±× ´ÙÀ½ Á¶°ÇÀ» üũÇÑ´Ù´Â »ç½ÇÀÌ´Ù:
Á¶°Ç_1
|| Á¶°Ç_2
ÀÇ»ç ÄÚµå·Î ÀÌ°ÍÀ» ¹ø¿ªÇØ º¸¸é ´ÙÀ½°ú °°´Ù:
¸¸ÀÏ
Á¶°Ç_1ÀÌ ÂüÀ̶ó¸é, ¶Ç´Â Á¶°Ç_2°¡ ÂüÀ̶ó¸é, ±×·¸´Ù¸é...
±×·¸±â ¶§¹®¿¡, Å×½ºÆ®µÇ´Â Á¶°Ç Áß ¾î´À °Í Çϳª¶óµµ ÂüÀÌ¸é µÚ¿¡ ¿À´Â ÄÚµå´Â ¸ðµÎ ½ÇÇàµÈ´Ù:
#!/bin/bash
x=3
y=2
if [ "$x" -eq 5 ] || [ "$y" -eq 2 ]; then
echo "One of the conditions is true."
else
echo "None of the conditions are true."
fi
À§ÀÇ ¿¹Á¦¿¡¼, µÎ °³ÀÇ Á¶°Ç Áß Çϳª¸¸ÀÌ ÂüÀ̶ó´Â °ÍÀ» ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÇÏÁö¸¸, yÀÇ °ªÀ» ´Ù¸¥ °ÍÀ¸·Î ¹Ù²Ù°í ´Ù½Ã ½ÇÇà½ÃÅ°¸é µÎ Á¶°Ç ¸ðµÎ ÂüÀÌ ¾Æ´Ï¶ó´Â °ÍÀ» ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù.
AND¿Í OR ±¸¹® ´ë½Å¿¡ if ±¸Á¶¸¦ ¾µ ¼öµµ ÀÖ´Ù. ÇÏÁö¸¸ ±×·¸°Ô Çϸé ÁßøµÈ(nesting) if ¹®ÀåµéÀ» ¾²°Ô µÈ´Ù. ÁßøµÇ¾ú´Ù´Â °Í(nesting)Àº if ±¸Á¶ ¾È¿¡ ¶Ç ´Ù¸¥ if ±¸Á¶°¡ ÀÖ´Â °ÍÀ» ¸»ÇÑ´Ù. ¹°·Ð ´Ù¸¥ Á¦¾î ±¸Á¶¸¦ ÁßøÇؼ ¾²´Â °Íµµ °¡´ÉÇÏ´Ù. ´ÙÀ½Àº ¾Õ¼± AND ÄÚµå¿Í °°Àº ³»¿ëÀ» ÁßøµÈ if ±¸Á¶¸¦ ÀÌ¿ëÇؼ ´Ù½Ã ÀÛ¼ºÇÑ °ÍÀÌ´Ù:
#!/bin/bash
x=5
y=10
if [ "$x" -eq 5 ]; then
if [ "$y" -eq 10 ]; then
echo "Both conditions are
true."
else
echo "The conditions are not
true."
fi
fi
ÀÌ ÄÚµå´Â AND ±¸¹®À» »ç¿ëÇÏ´Â °Í°ú °°Àº ¸ñÀûÀ¸·Î ÀÛ¼ºµÈ °ÍÀÌÁö¸¸ AND ±¸¹®º¸´Ù ÀбⰡ ¾î·Æ°í ÀÛ¼ºÇϴµ¥ º¸´Ù ¸¹Àº ½Ã°£ÀÌ °É¸°´Ù. AND¿Í OR ±¸¹®À» ÀÌ¿ëÇÏ´Â °ÍÀÌ ´õ Çö¸íÇÏ´Ù.
ÀÎÀÚ(argument)
»ç¿ëÇϱâ
¸®´ª½º ÇÁ·Î±×·¥ÀÇ ´ëºÎºÐÀÌ ºñ´ëȽÄÀ̶ó´Â °ÍÀ» ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù. ÇÁ·Î±×·¥µéÀº ÀÎÀÚ¸¦ ÀÔ·ÂÇϵµ·Ï ¿ä±¸ÇÏ°í, ¸¸ÀÏ ÀÎÀÚ¸¦ ÀÔ·ÂÇÏÁö ¾ÊÀ¸¸é "usage" ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÑ´Ù. more ¸í·ÉÀ» ¿¹·Î µéÀÚ. ¸¸ÀÏ more ¸í·É ´ÙÀ½¿¡ ÆÄÀÏ À̸§À» ÀÔ·ÂÇÏÁö ¾ÊÀ¸¸é, ¹Ù·Î "usage" ¸Þ½ÃÁö¸¦ ³»º¸³½´Ù. ´ç½ÅÀÇ ½© ÇÁ·Î±×·¥ÀÌ ÀÎÀڵ鿡 ´ëÇØ ÀÏÇϵµ·Ï ÇÏ´Â °ÍÀº °¡´ÉÇÏ´Ù. ±×·¸°Ô Çϱâ À§Çؼ, "$#
" º¯¼ö¸¦ ¾Ë¾Æ¾ß¸¸ ÇÑ´Ù. ÀÌ º¯¼ö´Â ÇÁ·Î±×·¥¿¡ ³Ñ°ÜÁö´Â ÀÎÀÚµéÀÇ ÃÑ °³¼ö¸¦ ³ªÅ¸³½´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½ÀÇ ÇÁ·Î±×·¥À» ½ÇÇà½ÃŲ´Ù¸é:
xconsole$
foo argument
$#
´Â 1À̶ó´Â °ªÀ» °¡Áú °ÍÀÌ´Ù. ÇÁ·Î±×·¥ foo¿¡ ³Ñ°ÜÁö´Â ÀÎÀÚ°¡ Çϳª»ÓÀ̱⠶§¹®ÀÌ´Ù. ¸¸ÀÏ ÀÎÀÚ°¡ µÎ °³¶ó¸é, $#´Â 2¶ó´Â °ªÀ» °¡Áú °ÍÀÌ´Ù. »Ó¸¸ ¾Æ´Ï¶ó, ¸í·É ¶óÀÎÀÇ °¢ ´Ü¾îµé, Áï, ÇÁ·Î±×·¥ À̸§(ÀÌ °æ¿ì¿£, foo)°ú ÀÎÀÚµéÀº ½© ÇÁ·Î±×·¥ ¾È¿¡¼ º¯¼ö·Î »ç¿ëµÉ ¼ö ÀÖ´Ù. foo´Â $0ÀÌ µÇ°í argument´Â $1ÀÌ µÈ´Ù. º¯¼ö´Â ÃÖ°í 9°³±îÁö °¡´ÉÇѵ¥, ÇÁ·Î±×·¥ À̸§ÀÎ $0°ú ±× µÚÀÇ ÀÎÀÚ Çϳª Çϳª¿¡ ´ëÀÀµÇ´Â $1ºÎÅÍ $9±îÁö¸¦ º¯¼ö·Î °¡Áú ¼ö ÀÖ´Ù. ´ÙÀ½ÀÇ ¿¹Á¦¸¦ º¸µµ·Ï ÇÏÀÚ:
#!/bin/bash
# ù¹ø° ÀÎÀÚ¸¦ Ãâ·ÂÇÑ´Ù
# óÀ½¿¡ ÀÎÀÚ¸¦ °®´ÂÁö üũÇÑ´Ù:
if [ "$#" -ne 1 ]; then
echo "usage: $0 "
fi
echo "The argument is $1"
ÀÌ ÇÁ·Î±×·¥À» ½ÇÇàÇϱâ À§Çؼ´Â ¿ÀÁ÷ ÇÑ °³ÀÇ ÀÎÀÚ¸¦ ÇÊ¿ä·Î ÇÑ´Ù. ¸¸ÀÏ Çϳªº¸´Ù À۰ųª ¸¹Àº ÀÎÀÚ¸¦ ÀÔ·ÂÇϸé ÇÁ·Î±×·¥Àº usage ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÒ °ÍÀÌ´Ù. ±×·¸Áö ¾Ê°í ÇÑ °³ÀÇ ÀÎÀÚ¸¦ ÇÁ·Î±×·¥¿¡ °Ç³×¸é, ÀÌ ½© ÇÁ·Î±×·¥Àº ´ç½ÅÀÌ °Ç³Ù ÀÎÀÚ¸¦ Ãâ·ÂÇÒ °ÍÀÌ´Ù. $0°¡ ÇÁ·Î±×·¥ÀÇ À̸§À̹ǷΠ"usage" ¸Þ½ÃÁö¿¡ »ç¿ëµÈ´Ù. ¸¶Áö¸· ¶óÀο¡¼ $1À» »ç¿ëÇÏ°í ÀÖ´Ù. $1¿¡ ÇÁ·Î±×·¥¿¡ ³Ñ°ÜÁö´Â ÀÎÀÚÀÇ °ªÀÌ µé¾î ÀÖ´Ù´Â °ÍÀ» ±â¾ïÇ϶ó.
Ãâ·Â
ÀçÁöÁ¤°ú
ÆÄÀÌÇÁ
ÀϹÝÀûÀ¸·Î,
´ç½ÅÀÌ ¸í·ÉÀ» ½ÇÇàÇÒ ¶§, ±× Ãâ·ÂÀº ȸ鿡 ³ªÅ¸³´Ù. ¿¹¸¦ µé¸é:
xconsole$
echo "Hello World"
Hello
World
Ãâ·Â ÀçÁöÁ¤(redirection)Àº Ãâ·Â ¹æÇâÀ» ´Ù¸¥ °÷(´ëºÎºÐÀº ÆÄÀÏ)À¸·Î ¹Ù²Ü ¼ö ÀÖ°Ô ÇØ ÁØ´Ù. ">
" ¿¬»êÀÚ´Â Ãâ·ÂÀÇ ¹æÇâÀ» ÀçÁöÁ¤ÇÒ ¶§ »ç¿ëµÈ´Ù. È»ìÇ¥¸¦ Ãâ·Â ³»¿ëÀÌ °¡¾ßÇÒ °÷À¸·Î »ý°¢Çϸé ÀÌÇØÇϱ⠽±´Ù. ¿©±â Ãâ·ÂÀ» ÆÄÀÏ·Î ÁöÁ¤ÇÑ ¿¹Á¦°¡ ÀÖ´Ù:
xconsole$
echo "Hello World"> foo.file
xconsole$
cat foo.file
Hello
World
ÀÌ ¿¹Á¦¿¡¼, echo
"Hello World"
ÀÇ
Ãâ·ÂÀº foo.file
¶õ À̸§ÀÇ ÆÄÀÏ·Î ÀçÁöÁ¤µÇ¾ú´Ù. Ãâ·Â ³»¿ëÀÌ ÆÄÀÏÀÇ ³»¿ëÀ¸·Î µÈ °ÍÀ» º¼ ¼ö ÀÖ´Ù. ">
" ¿¬»êÀÚÀÇ ÇÑ °¡Áö ¹®Á¦Á¡Àº ÆÄÀÏÀÇ ³»¿ëÀ» °ãÃÄ ¾´´Ù´Â °ÍÀÌ´Ù. ¸¸ÀÏ ÆÄÀÏ ³»¿ëÀ» °ãÃÄ ¾²Áö ¾Ê°í µÚ¿¡ µ¡ºÙÀÌ°í ½Í´Ù¸é ¾î¶»°Ô ÇÏ¸é µÉ±î? ÆÄÀÏ µÚ¿¡ µ¡ºÙÀ̱â À§Çؼ´Â ¹Ýµå½Ã ">>
" ¿¬»êÀÚ¸¦ ½á¾ß ÇÑ´Ù. ÀÌ ¿¬»êÀÚ´Â ÆÄÀÏ ³»¿ëÀ» °ãÃÄ ¾²Áö ¾Ê°í µÚ¿¡ µ¡ºÙÀδٴ Á¡À» Á¦¿ÜÇϸé Ãâ·Â ÀçÁöÁ¤ ¿¬»êÀÚ¿Í ²À °°´Ù.
¸¶Áö¸·À¸·Î,
ÆÄÀÌÇÁ¿¡ ´ëÇØ À̾߱â ÇÏÀÚ. ÆÄÀÌÇÁ´Â ÇÁ·Î±×·¥À¸·ÎºÎÅÍ ³ª¿À´Â Ãâ·Â °á°ú¸¦ °¡Á®¿Í¼, ´Ù¸¥ ÇÁ·Î±×·¥ÀÇ ÀÔ·ÂÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù. ÆÄÀÌÇÁ¸¦ ÀÌ¿ëÇϱâ À§Çؼ´Â ÆÄÀÌÇÁ ¿¬»êÀÚ: "|
"¸¦ ¾²¸é µÈ´Ù. "|
"´Â ¿µ¹®ÀÚ "L"ÀÇ ¼Ò¹®ÀÚ°¡ ¾Æ´Ï´Ù. ÆÄÀÌÇÁ ¿¬»êÀÚ´Â SHIFT-\¸¦ ÀÌ¿ëÇؼ ¾òÀ» ¼ö ÀÖ´Ù. ÀÌÁ¦ ÆÄÀÌÇÁ¿¡ °üÇÑ ¿¹Á¦¸¦ º¸ÀÚ:
xconsole$
cat /etc/passwd | grep xconsole
xconsole:x:1002:100:X_console,,,:/home/xconsole:/bin/bash
ÀÌ ¿¹Á¦¿¡¼ ¿ì¸®´Â /etc/passwd
ÆÄÀÏ Àüü¸¦ ÀÐÀº µÚ, ÆÄÀÌÇÁ¸¦ ÀÌ¿ëÇؼ ±× Ãâ·ÂÀ» ÀÔ·Â ³»¿ë Áß xconsoleÀ̶õ ¹®ÀÚ¿À» ã´Âgrep
¸í·ÉÀÇ ÀÔ·ÂÀ¸·Î »ç¿ëÇÏ¿© ±× ¹®ÀÚ¿À» Æ÷ÇÔÇÑ ¶óÀÎÀ» ȸ鿡 Ãâ·ÂÇß´Ù. ¸¶Áö¸· Ãâ·ÂÀ» ÆÄÀÏ¿¡ ÀúÀåÇϱâ À§ÇØ Ãâ·Â ÀçÁöÁ¤À» ÇÔ²² ¾µ ¼öµµ ÀÖ´Ù:
xconsole$
cat /etc/passwd | grep xconsole >
foo.file
xconsole$
cat foo.file
xconsole:x:1002:100:X_console,,,:/home/xconsole:/bin/bash
Á¦´ë·Î ÀÛµ¿ÇÏ°í ÀÖ´Ù. /etc/passwd
ÆÄÀÏÀ» ÀÐÀº µÚ, Àüü Ãâ·Â ³»¿ëÀ» ÆÄÀÌÇÁ¸¦ ÅëÇؼ ¹®ÀÚ¿xconsole
À» ã´Â grep
¸í·ÉÀÇ ÀÔ·ÂÀ¸·Î »ç¿ëÇÏ°í´Â ÃÖÁ¾ Ãâ·Â °á°ú¸¦ ¸®´ÙÀÌ·º¼ÇÇؼ foo.file
¿¡ ÀúÀåÇß´Ù. ½© ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¶§ Ãâ·Â ÀçÁöÁ¤°ú ÆÄÀÌÇÁ°¡ À¯¿ëÇÑ µµ±¸·Î ¾²Àδٴ °ÍÀ» ¾Ë°Ô µÉ
°ÍÀÌ´Ù.
ÀÓ½Ã
ÆÄÀÏ
¶§¶§·Î Àӽà ÆÄÀÏÀ» ¸¸µé¾î¾ß ÇÒ ÇÊ¿ä°¡ ÀÖÀ» ¶§°¡ ÀÖ´Ù. ÀÌ ÆÄÀÏÀº ÀÓ½ÃÀûÀ¸·Î ¾î¶² µ¥ÀÌÅ͸¦ °®°í Àְųª, ¶Ç´Â ´ÜÁö ¾î¶² ÇÁ·Î±×·¥°ú ÇÔ²² ÀÛµ¿ÇÒ ¼öµµ ÀÖ´Ù. ÀÏ´Ü ÇÁ·Î±×·¥ÀÇ ¸ñÀûÀÌ ´Þ¼ºµÇ¸é, ´ëºÎºÐÀÇ Àӽà ÆÄÀÏÀº »èÁ¦µÈ´Ù. ÆÄÀÏÀ» ¸¸µé ¶§´Â ÆÄÀÏÀÇ À̸§À» ÁÖ¾î¾ß¸¸ ÇÑ´Ù. ÆÄÀÏÀ» ¸¸µé ¶§ÀÇ ¹®Á¦´Â »õ·Î ¸¸µå´Â ÆÄÀÏ À̸§°ú °°Àº À̸§ÀÇ ÆÄÀÏÀÌ °°Àº µð·ºÅ丮 ¾È¿¡ ÀÖÀ¸¸é ¾ÈµÈ´Ù´Â °ÍÀÌ´Ù. ¸¸ÀÏ ±×·¸Áö ¾Ê°Ô µÇ¸é, Áß¿äÇÑ µ¥ÀÌÅ͸¦ °ãÃÄ ¾µ ¼öµµ ÀÖ´Ù. Çϳª»ÓÀÎ À̸§ÀÇ Àӽà ÆÄÀÏÀ» ¸¸µé±â À§ÇØ, "$$
" ±âÈ£¸¦ ÆÄÀÏ À̸§ÀÇ Ã¹¸Ó¸®³ª ³¡¿¡ ºÙÀÏ ÇÊ¿ä°¡ ÀÖ´Ù. ¿¹¸¦ µé¾î, hello¶ó´Â À̸§À» °¡Áø Àӽà ÆÄÀÏÀ» ¸¸µé°í ½Í´Ù°í ÇÏÀÚ. ´ç½ÅÀÇ ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°´Â »ç¿ëÀÚ ¶ÇÇÑ hello¶ó´Â ÆÄÀÏÀ» °¡Áú ¼ö ÀÖ´Ù°í ÇÏ¸é ´ç½ÅÀÇ ÇÁ·Î±×·¥¿¡¼ »ç¿ëÇÏ´Â Àӽà ÆÄÀÏ°ú Ãæµ¹ÀÌ ÀϾ ¼ö ÀÖ´Ù. hello¶ó´Â ÆÄÀÏ ´ë½Å¿¡ hello.$$ ¶Ç´Â $$hello¶ó´Â À̸§ÀÇ ÆÄÀÏÀ» ¸¸µé¾î¼ ´Ü Çϳª»ÓÀÎ ÆÄÀÏÀ» ¸¸µé ¼ö ÀÖ´Ù. ´ÙÀ½À» ½ÇÇàÇØ º¸ÀÚ:
xconsole$
touch hello
xconsole$
ls
hello
xconsole$
touch hello.$$
xconsole$
ls
hello
hello.689
´ç½ÅÀÇ Àӽà ÆÄÀÏÀÌ ÀÖ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù.
¸®ÅÏ
°ª
´ëºÎºÐÀÇ ÇÁ·Î±×·¥Àº ÇÁ·Î±×·¥À» ¾î¶»°Ô ³ª°¡´À³Ä¿¡ µû¶ó ƯÁ¤ÇÑ °ªÀ» ¸®ÅÏÇÑ´Ù. ¿¹¸¦ µé¸é, grepÀÇ ¸Å´º¾ó ÆäÀÌÁö¸¦ º¸¸é ã°íÀÚ ÇÏ´Â ¹®ÀÚ¿À» ¹ß°ßÇϸé grepÀº 0À» ¸®ÅÏÇÏ°í ±×·¸Áö ¾ÊÀ¸¸é 1À» ¸®ÅÏÇÑ´Ù°í ³ª¿Í ÀÖ´Ù. ¿Ö ÇÁ·Î±×·¥ÀÇ ¸®ÅÏ °ª¿¡ ´ëÇØ ½Å°æÀ» ½á¾ß ÇÏ´Â °ÍÀΰ¡? ¿©·¯ °¡Áö ÀÌÀ¯¿¡¼ÀÌ´Ù. ´ç½ÅÀÌ Æ¯Á¤ »ç¿ëÀÚ°¡ ½Ã½ºÅÛ¿¡ ÀÖ´ÂÁö üũÇÏ°í ½Í´Ù°í ÇÏÀÚ. ÀÌ°ÍÀ» üũÇØ º¼ ¹æ¹ý ÁßÀÇ Çϳª´Â /etc/passwd ÆÄÀÏ ¾È¿¡ »ç¿ëÀÚÀÇ À̸§ÀÌ ÀÖ´ÂÁö grep ¸í·ÉÀ» ÅëÇØ Ã£¾Æ º¸´Â °ÍÀÌ´Ù. ã°íÀÚ ÇÏ´Â »ç¿ëÀÚ À̸§ÀÌ foobar¶ó°í ÇÏÀÚ:
xconsole$
grep "foobar" /etc/passwd
xconsole$
¾Æ¹« °Íµµ Ãâ·ÂµÇÁö ¾Ê¾Ò´Ù. ÀÌ°ÍÀÌ ¶æÇÏ´Â °ÍÀº grep ¸í·ÉÀÌ Ã£°íÀÚ ÇÏ´Â ¹®ÀÚ¿°ú ÀÏÄ¡ÇÏ´Â °ÍÀ» ãÁö ¸øÇß´Ù´Â °ÍÀÌ´Ù. ¸¸ÀÏ ÀÏÄ¡ÇÏ´Â ¹®ÀÚ¿À» ãÁö ¸øÇß´Ù°í ¸Þ½ÃÁö¸¦ Ãâ·ÂÇϸé ÈξÀ ´õ µµ¿òÀÌ µÉ °ÍÀÌ´Ù. ÀÌ ¶§°¡ ¹Ù·Î ÇÁ·Î±×·¥ÀÇ ¸®ÅÏ °ªÀ» ¾òÀ» ÇÊ¿ä°¡ ÀÖ´Â ¶§ÀÌ´Ù. ÇÁ·Î±×·¥ÀÇ ¸®ÅÏ °ªÀº Ưº°ÇÑ º¯¼ö°¡ °¡Áö°í ÀÖ´Ù. ±× º¯¼ö´Â $?ÀÌ´Ù. ´ÙÀ½ÀÇ ÂªÀº Äڵ带 º¸µµ·Ï ÇÏÀÚ:
#!/bin/bash
#
»ç¿ëÀÚ
foobar
¸¦
ã°í
¸ðµç
Ãâ·ÂÀ»
ÆÄÀÌÇÁ¸¦
ÅëÇØ
/dev/null
·Î
º¸³½´Ù
:
grep "foobar" > /dev/null 2>&1
#
¸®ÅÏ
°ªÀ»
¹Þ¾Æ¼
±×¿¡
ÇØ´çÇÏ´Â
Äڵ带
½ÇÇàÇÑ´Ù
:
if [ "$?" -eq 0 ]; then
echo "Match found."
exit
else
echo "No match found."
fi
ÀÌÁ¦ ÇÁ·Î±×·¥À» ½ÇÇàÇϸé, grepÀÇ ¸®ÅÏ °ªÀ» ºÙÀâÀ» °ÍÀÌ´Ù. ¸¸ÀÏ ±× °ªÀÌ 0°ú °°´Ù¸é, ÀÏÄ¡ÇÏ´Â ¹®ÀÚ¿ÀÌ ¹ß°ßµÈ °ÍÀÌ¾î¼ ±×¿¡ ÇØ´çÇÏ´Â ¸Þ½ÃÁö°¡ Ãâ·ÂµÈ´Ù. ±×·¸Áö ¾ÊÀ¸¸é, ÀÏÄ¡ÇÏ´Â ¹®ÀÚ¿ÀÌ ¾ø´Ù°í ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÑ´Ù. ÀÌ°ÍÀº ÇÁ·Î±×·¥ÀÇ ¸®ÅÏ °ªÀ» ¹Þ¾Æ ÀÌ¿ëÇÏ´Â °¡Àå ±âÃÊÀûÀÎ ¿¹Á¦ÀÌ´Ù. °è¼ÓÇؼ ¿¬½ÀÇÏ´Ù º¸¸é, ´ç½ÅÀÌ ¿øÇÏ´Â °ÍÀ» Çϱâ À§Çؼ ÇÁ·Î±×·¥ÀÇ ¸®ÅÏ °ªÀÌ ÇÊ¿äÇÑ ¶§°¡ ¸¹À» °ÍÀÌ´Ù.
±×·¸´Ù¸é ÇÁ·Î±×·¥ÀÌ Á¾·áµÇ´Â »óȲ¿¡ µû¶ó ´ç½ÅÀÇ ½© ½ºÅ©¸³Æ®°¡ ƯÁ¤ÇÑ °ªÀ» ¸®ÅÏÇÏ°Ô ÇÏ°í ½Í´Ù¸é ¾î¶»°Ô ÇØ¾ß Çϴ°¡? exit ¸í·ÉÀº ¸®ÅÏÇÒ °ªÀ» ÇϳªÀÇ ÀÎÀڷμ °¡Áø´Ù. ÀϹÝÀûÀ¸·Î ¼ýÀÚ 0Àº ¼º°øÀûÀÎ Á¾·á, ¿¡·¯°¡ Çϳªµµ ¾øÀÌ ÇÁ·Î±×·¥ÀÌ ³¡³µÀ½À» °¡¸®Å²´Ù. ÀϹÝÀûÀ¸·Î 0º¸´Ù Å©°Å³ª ÀÛÀº ¼ýÀÚ´Â ¿¡·¯°¡ »ý°åÀ½À» ¶æÇÑ´Ù. ¸®ÅÏ °ªÀ» Á¤ÇÏ´Â ¹®Á¦´Â ÇÁ·Î±×·¡¸Ó°¡ °áÁ¤ÇÒ ¹®Á¦ÀÌ´Ù. ´ÙÀ½ÀÇ ÇÁ·Î±×·¥À» º¸ÀÚ:
#!/bin/bash
if [ -f "/etc/passwd" ]; then
echo "Password file exists."
exit 0
else
echo "No such file."
exit 1
fi
exit¿¡ ¸®ÅÏ °ªÀ» ¸í½ÃÇÏ¿´À¸¹Ç·Î, ÀÌ ½ºÅ©¸³Æ®¸¦ ÀÌ¿ëÇÏ´Â ´Ù¸¥ ½© ½ºÅ©¸³Æ®¿¡¼´Â ÀÌ ½ºÅ©¸³Æ®ÀÇ ¸®ÅÏ °ªÀ» ºÙÀâ¾Æ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
¼öÄ¡ °ªÀÎ ÀÎÀÚ Çϳª¸¦ °®´Â return
¸í·ÉÀ» ÀÌ¿ëÇؼ, ÇÔ¼öµéµµ °ªÀ» ¸®ÅÏÇÒ ¼ö ÀÖ´Ù. ÇÔ¼ö¿¡ Àû¿ëµÈ´Ù´Â Á¡À» Á¦¿ÜÇϸé exit°¡ »ç¿ëµÇ´Â ¹æ½Ä°ú ¶È °°Àº ¹æ¹ýÀ¸·Î returnÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ ¿¹¸¦ º¸ÀÚ:
check_passwd()
{
# passwd ÆÄÀÏÀÌ Á¸ÀçÇÏ´ÂÁö üũ:
if [ -f "/etc/passwd" ]; then
echo "Password file exists."
# Á¸ÀçÇϸé 0À» ¸®ÅÏÇÑ´Ù:
return 0
else
# Á¸ÀçÇÏÁö ¾Ê´Â´Ù¸é 1À» ¸®ÅÏÇÑ´Ù:
echo "No such file."
return 1
fi
}
#
ÇÔ¼ö
check_passwd()
·ÎºÎÅÍ
¸®ÅÏ
°ªÀ»
¾ò´Â´Ù
:
foo=check_passwd
#
°ªÀ»
üũÇÑ´Ù
:
if [ "$foo" -eq 0 ]; then
echo "File exists."
exit 0
else
echo "No such file."
exit 1
fi
Äڵ带 ÀÚ¼¼È÷ º¸¶ó. ÀÌÇØÇϱ⠾î·ÆÁö ¾Ê´Ù. ÇÔ¼ö check_passwd()ÀÇ ¸®ÅÏ °ªÀ» °¡Áö´Â foo¶ó´Â À̸§ÀÇ º¯¼ö¸¦ °¡Áö°í ½ÃÀÛÇÑ´Ù. ÇÔ¼ö check_passwd()¿¡¼ ¿ì¸®´Â /etc/passwd ÆÄÀÏÀÌ Á¸ÀçÇÏ´ÂÁö üũÇÑ´Ù. ¸¸ÀÏ Á¸ÀçÇÑ´Ù¸é, 0À» ¸®ÅÏÇÏ°í, ±×·¸Áö ¾ÊÀ¸¸é 1À» ¸®ÅÏÇÑ´Ù. ÀÌÁ¦ ÇÔ¼ö¸¦ ºüÁ® ³ª¿À°í ¸®ÅÏµÈ °ªÀÌ 0ÀÌ¸é º¯¼ö fooÀÇ °ªÀº 0ÀÌ´Ù. ¸¸ÀÏ 1ÀÌ ¸®ÅϵǸé, º¯¼ö fooÀÇ °ªÀº 1ÀÌ´Ù. ÀÌ ¿¹Á¦¿¡¼ ±× ´ÙÀ½¿¡ ÇàÇØÁø ÀÏÀº º¯¼ö fooÀÇ °ªÀ» üũÇؼ ±×¿¡ ÇØ´çÇÏ´Â ¸Þ½ÃÁö¸¦ ÇÁ¸°Æ®ÇÏ°í 0(¼º°øÇÑ °æ¿ì) ¶Ç´Â 1(½ÇÆÐÇÑ °æ¿ì)ÀÇ ¸®ÅÏ °ªÀ» °¡Áö°í Á¾·áÇÑ´Ù.
°á·Ð
ÀÌ°ÍÀ¸·Î
bash ½ºÅ©¸³Æÿ¡ °üÇÑ ¼Ò°³¸¦ ¸¶Ä¡°íÀÚ ÇÑ´Ù. ÇÏÁö¸¸ ´ç½ÅÀÇ ½ºÅ©¸³Æà °øºÎ´Â ¾ÆÁ÷ ³¡³ªÁö ¾Ê¾Ò´Ù. ´õ ¾Ë¾Æ¾ß ÇÒ °ÍÀÌ ¸¹´Ù. ³»°¡ ¸»ÇÑ ´ë·Î, ÀÌ ±ÛÀº bash ½ºÅ©¸³Æÿ¡ °üÇÑ ¼Ò°³ÀÇ ±ÛÀÌÁö¸¸ ´ç½ÅÀÌ ½© ÇÁ·Î±×·¥À» ¼öÁ¤ÇÏ°í ´ç½Å ÀÚ½ÅÀÇ ½© ÇÁ·Î±×·¥À» ÀÛ¼ºÇϱâ À§ÇÑ µðµõµ¹ÀÌ µÇ±â¿¡´Â ÃæºÐÇÏ´Ù. Learning the bash shell, 2nd
Edition by O'Reilly & Associates, IncÀ» ±¸ÀÔÇϱ⸦ °·ÂÈ÷ ÃßõÇÏ´Â ¹ÙÀÌ´Ù. bash
½ºÅ©¸³ÆÃÀº ¸ÅÀÏ ¸ÅÀÏÀÇ °ü¸®ÀÚ ÀÛ¾÷À» ÇÒ ¶§ »ç¿ëÇϱ⿡ ¸Å¿ì ÈǸ¢ÇÏ´Ù. ÇÏÁö¸¸ ´ç½ÅÀÌ Á» ´õ Å« ÇÁ·ÎÁ§Æ®¸¦ °èȹÇÏ°í ÀÖ´Ù¸é, C³ª Perl°ú °°Àº º¸´Ù °·ÂÇÑ ¾ð¾î¸¦ »ç¿ëÇϱ⠿øÇÒ °ÍÀÌ´Ù. Çà¿îÀ» ºó´Ù.
X_console shellscope@yahoo.com