¿ø¹®: 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