°í±Þ Bash ½ºÅ©¸³ÆÃ °¡À̵å: Bash¸¦ ÀÌ¿ëÇÑ ½© ½ºÅ©¸³ÆÃ ¿ÏÀü °¡À̵å | ||
---|---|---|
ÀÌÀü | 8Àå. ¿¬»êÀÚ À̾߱â(Operations and Related Topics) | ´ÙÀ½ |
º¯¼ö°ªÀ» ÃʱâÈ Çϰųª º¯°æÇϱâ
»ê¼ú½Ä°ú ¹®ÀÚ¿ ÇÒ´çÀ» ÇØÁÖ´Â ´Ù±â´É ÇÒ´ç ¿¬»êÀÚ.
var=27 category=minerals # "=" ´ÙÀ½¿¡ ºó ÄÀÌ µé¾î°¡¸é ¾È µË´Ï´Ù. |
°æ°í | |
"=" ÇÒ´ç ¿¬»êÀÚ¿Í = Å×½ºÆ® ¿¬»êÀÚ¸¦ Çò°¥¸®¸é ¾È µË´Ï´Ù.
|
»ê¼ú ¿¬»êÀÚ(arithmetic operators)
´õÇϱâ
»©±â
°öÇϱâ
³ª´©±â
´©½Â(exponentiation)
# Bash 2.02 ¹öÀü¿¡¼ ´©½Â ¿¬»êÀÚÀÎ "**"°¡ ¼Ò°³µÆ½À´Ï´Ù. let "z=5**3" echo "z = $z" # z = 125 |
modulo ³ª mod (Á¤¼ö ³ª´©±â¿¡¼ ³ª¸ÓÁö °ª)
bash$ echo `expr 5 % 3` 2 |
ÀÌ ¿¬»êÀڴ ƯÁ¤ ¹üÀ§¿¡ ¼ÓÇÏ´Â ¼ýÀÚ¸¦ ¸¸µé¾î ³»°Å³ª(¿¹ 9-19, ¿¹ 9-20) °á°ú¸¦ ƯÁ¤ Æ÷¸ËÀ¸·Î ¸¸µé¾î Áְųª(¿¹ 26-6) ½ÉÁö¾î´Â ¼Ò¼ö(prime number)¸¦ ¸¸µé¾î³»´Âµ¥(¿¹ A-11) ¾µ ¼öµµ ÀÖ½À´Ï´Ù.
"plus-equal"(»ó¼ö°ª ¸¸Å Áõ°¡)
let "var += 5" Àº varÀÇ °ªÀ» 5¸¸Å Áõ°¡½Ãŵ´Ï´Ù.
"minus-equal"(»ó¼ö°ª ¸¸Å °¨¼Ò)
"times-equal"(»ó¼ö°ªÀ» °öÇÔ)
let "var *= 4" ´Â varÀÇ °ª¿¡ 4¹è¸¦ ÇØ ÁÝ´Ï´Ù.
"slash-equal"(»ó¼ö°ªÀ¸·Î ³ª´®)
"mod-equal"(»ó¼ö°ªÀ¸·Î ³ª´« ³ª¸ÓÁö °ª)
»ê¼ú ¿¬»êÀÚ´Â Á¾Á¾ expr À̳ª let ½Ä¿¡¼ ¾²ÀÔ´Ï´Ù.
¿¹ 8-1. »ê¼ú ¿¬»êÀÚ ¾²±â
#!/bin/bash # 5°¡ÁöÀÇ ´Ù¸¥ ¹æ¹ýÀ¸·Î 6±îÁö ¼¼±â. n=1; echo -n "$n " let "n = $n + 1" # let "n = n + 1" À̶ó°í ÇØµµ µË´Ï´Ù. echo -n "$n " : $((n = $n + 1)) # ":" °¡ ¾øÀ¸¸é Bash°¡ "$((n = $n + 1))"À» #+ ¸í·É¾î·Î ÇØ¼®ÇÏ·Á°í Çϱ⠶§¹®¿¡ ÇÊ¿äÇÕ´Ï´Ù. echo -n "$n " n=$(($n + 1)) echo -n "$n " : $[ n = $n + 1 ] # ":" °¡ ¾øÀ¸¸é Bash°¡ "$[n = $n + 1]"À» #+ ¸í·É¾î·Î ÇØ¼®ÇÏ·Á°í Çϱ⠶§¹®¿¡ ÇÊ¿äÇÕ´Ï´Ù. # "n"ÀÌ ¹®ÀÚ¿·Î ÃʱâÈ µÇ¾î À־ µ¿ÀÛÇÕ´Ï´Ù. echo -n "$n " n=$[ $n + 1 ] # "n"ÀÌ ¹®ÀÚ¿·Î ÃʱâÈ µÇ¾î À־ µ¿ÀÛÇÕ´Ï´Ù. #* ÀÌ·± ÇüÅ´ ´õ ÀÌ»ó Áö¿øµÇÁö ¾Ê°í À̽ļºµµ ¾ø±â ¶§¹®¿¡ ¾²Áö ¸¶¼¼¿ä. echo -n "$n "; echo # Thanks, Stephane Chazelas. exit 0 |
Âü°í: Bash ÀÇ Á¤¼ö º¯¼ö´Â ½ÇÁ¦·Î´Â ¹üÀ§°¡ -2147483648 ¿¡¼ 2147483647 ±îÁöÀÎ signed long(32-bit) Á¤¼öÀÔ´Ï´Ù. ±×·¸±â ¶§¹®¿¡ ÀÌ ¹üÀ§¸¦ ¹þ¾î³ª´Â º¯¼ö¸¦ ¾²¸é ¿¡·¯°¡ ³³´Ï´Ù.
a=2147483646 echo "a = $a" # a = 2147483646 let "a+=1" # "a" ¸¦ Áõ°¡. echo "a = $a" # a = 2147483647 let "a+=1" # "a" ¸¦ ´Ù½Ã Áõ°¡, Á¦ÇÑ ¹üÀ§¸¦ ¹þ¾î³². echo "a = $a" # a = -2147483648 # ERROR (out of range)
°æ°í | |
Bash ´Â ºÎµ¿ ¼Ò¼öÁ¡ ¿¬»êÀ» ÀÌÇØÇÏÁö ¸øÇÕ´Ï´Ù. Á¡ÀÌ µé¾î°£ ¼ýÀÚ´Â ´Ü¼øÈ÷ ¹®ÀÚ¿·Î Ãë±ÞµË´Ï´Ù.
|
ºñÆ® ¿¬»êÀÚ(bitwise operators). ºñÆ® ¿¬»êÀÚ´Â ½© ½ºÅ©¸³Æ®¿¡¼ ÀÚÁÖ ¾²ÀÌÁö ¾Ê½À´Ï´Ù. ÀÌ·± ¿¬»êÀÚµéÀº ÁÖ·Î Æ÷Æ®³ª ¼ÒÄÏ¿¡¼ °ªÀ» Àаí Å×½ºÆ®Çϰí Á¶ÀÛÇϴµ¥ ¾²ÀÔ´Ï´Ù. "ºñÆ® Á¶ÀÛ(bit flipping)"Àº C³ª C++ ó·³ ½ÇÇàÁß¿¡ ºñÆ®¿¬»êÀ» ÇÒ ¼ö ÀÖÀ» Á¤µµ·Î ÃæºÐÈ÷ ¼Óµµ°¡ ºü¸¥ ÄÄÆÄÀÏ ¾ð¾î°¡ ´õ ¾Ë¸Â½À´Ï´Ù.
ºñÆ® ¿ÞÂÊ ½¬ÇÁÆ®(½¬ÇÁÆ® ÇÑ ¹ø´ç 2¸¦ °öÇÏ´Â °Í°ú µ¿ÀÏÇÔ)
"left-shift-equal"
let "var <<= 2" ´Â var¸¦ 2 ºñÆ®¸¸Å ¿ÞÂÊÀ¸·Î ½¬ÇÁÆ®(4 ¸¦ °öÇÏ´Â °Í°ú µ¿ÀÏÇÔ)
ºñÆ® ¿À¸¥ÂÊ ½¬ÇÁÆ®(½¬ÇÁÆ® ÇÑ ¹ø´ç 2·Î ³ª´®)
"right-shift-equal"(<<=¿Í ¹Ý´ë)
ºñÆ® and
"ºñÆ® and-equal"
ºñÆ® OR
"ºñÆ® OR-equal"
ºñÆ® negate
ºñÆ® NOT
ºñÆ® XOR
"ºñÆ® XOR-equal"
³í¸® ¿¬»êÀÚ(logical operators)
and (³í¸®)
if [ $condition1 ] && [ $condition2 ] # if [ condition1 -a condition2 ] ¿Í °°À½ # condition1°ú condition2°¡ ¸ðµÎ ÂüÀϰæ¿ì ÂüÀ» ¸®ÅÏ... if [[ $condition1 && $condition2 ]] # ¿ª½Ã µ¿ÀÛÇÔ. # && ¿¬»êÀÚ´Â [ ... ] ¿¡¼ ¾²ÀÏ ¼ö ¾ø½À´Ï´Ù. ÁÖÀÇÇϼ¼¿ä. |
Âü°í: && ´Â »óȲ¿¡ µû¶ó ¸í·É¾îµéÀ» ¿¬°áÇØ ÁÖ´Â and ¸®½ºÆ®·Îµµ ¾²ÀÏ ¼öµµ ÀÖ½À´Ï´Ù.
or (³í¸®Àû)
if [ $condition1 ] || [ $condition2 ] # if [ condition1 -o condition2 ] ¿Í °°À½ # condition1À̳ª condition2Áß Çϳª¸¸ ÂüÀ̸é ÂüÀ» ¸®ÅÏ... if [[ $condition1 || $condition2 ]] # ¿ª½Ã µ¿ÀÛÇÔ. # || ¿¬»êÀÚ´Â [ ... ] ¿¡¼ ¾²ÀÏ ¼ö ¾ø½À´Ï´Ù. ÁÖÀÇÇϼ¼¿ä. |
Âü°í: Bash´Â ³í¸® ¿¬»êÀÚ·Î ¿¬°áµÈ °¢ ¹®ÀåÀÇ Á¾·á »óŸ¦ Å×½ºÆ®ÇÕ´Ï´Ù.
¿¹ 8-2. && ¿Í || ¸¦ ¾´ º¹ÇÕ Á¶°Ç Å×½ºÆ®
#!/bin/bash a=24 b=47 if [ "$a" -eq 24 ] && [ "$b" -eq 47 ] then echo "ù¹øÂ° Å×½ºÆ® ¼º°ø." else echo "ù¹øÂ° Å×½ºÆ® ½ÇÆÐ." fi # ¿¡·¯: if [ "$a" -eq 24 && "$b" -eq 47 ] # ¶ó°í Çϸé ' [ "$a" -eq 24 ' ¸¦ ½ÇÇà½ÃŰ·Á°í Çϱ⠶§¹®¿¡ # ÇØ´çÇÏ´Â ']' ¸¦ ãÁö ¸øÇØ ¿¡·¯°¡ ³³´Ï´Ù. # # if [[ $a -eq 24 && $b -eq 24 ]] ¶ó°í ÇÏ¸é µÇ°ÚÁÒ. # (6¹øÂ° ÁÙ°ú 17¹øÂ° ÁÙÀÇ "&&" ´Â ´Ù¸¥ ¶æÀ» °®½À´Ï´Ù.) # Thanks, Stephane Chazelas. if [ "$a" -eq 98 ] || [ "$b" -eq 47 ] then echo "µÎ¹øÂ° Å×½ºÆ® ¼º°ø." else echo "µÎ¹øÂ° Å×½ºÆ® ½ÇÆÐ." fi # º¹ÇÕ¹® Á¶°Ç Å×½ºÆ®¿¡¼´Â -a ¿Í -o ¿É¼ÇÀ» ¾µ ¼öµµ ÀÖ½À´Ï´Ù. # ÀÌ Á¡À» ÁöÀûÇØÁØ Patrick Callahan ¿¡°Ô °¨»çÇÕ´Ï´Ù. if [ "$a" -eq 24 -a "$b" -eq 47 ] then echo "¼¼¹øÂ° Å×½ºÆ® ¼º°ø." else echo "¼¼¹øÂ° Å×½ºÆ® ½ÇÆÐ." fi if [ "$a" -eq 98 -o "$b" -eq 47 ] then echo "³×¹øÂ° Å×½ºÆ® ¼º°ø." else echo "³×¹øÂ° Å×½ºÆ® ½ÇÆÐ." fi a=rhino b=crocodile if [ "$a" = rhino ] && [ "$b" = crocodile ] then echo "´Ù¼¸¹øÂ° Å×½ºÆ® ¼º°ø." else echo "´Ù¼¸¹øÂ° Å×½ºÆ® ½ÇÆÐ." fi exit 0 |
&& ¿Í || ¿¬»êÀÚ´Â »ê¼ú½Ä¿¡¼µµ ¾²ÀÏ ¼ö ÀÖ½À´Ï´Ù.
bash$ echo $(( 1 && 2 )) $((3 && 0 )) $((4 || 0)) $((0 || 0)) 1 0 1 0 |
±âŸ ¿¬»êÀÚ(miscellaneous operators)
ÄÞ¸¶ ¿¬»êÀÚ(comma operator)
ÄÞ¸¶ ¿¬»êÀÚ´Â µÎ °³ ÀÌ»óÀÇ »ê¼ú ¿¬»êÀ» ¹¾î ÁÝ´Ï´Ù. ÀÌ ¿¬»êÀÚ·Î ¹ÀÎ ¸ðµç ¿¬»êÀº ºÎÈ¿°ú(side effects)°¡ »ý±æ °¡´É¼ºÀ» °¡Áö°í Æò°¡µÇ°í Á¦ÀÏ ¸¶Áö¸· ¿¬»êÀÇ °á°ú¸¸ ¸®Åϵ˴ϴÙ.
let "t1 = ((5 + 3, 7 - 1, 15 - 4))" echo "t1 = $t1" # t1 = 11 let "t2 = ((a = 9, 15 / 3))" # "a" ¸¦ ¼¼Æ®Çϰí "t2" ¸¦ °è»ê. echo "t2 = $t2 a = $a" # t2 = 5 a = 9 |
ÄÞ¸¶ ¿¬»êÀÚ´Â ÁÖ·Î for ·çÇÁ¿¡¼ ¾²ÀÔ´Ï´Ù. ¿¹ 10-11¸¦ Âü°íÇϼ¼¿ä.