8.1. ¿¬»êÀÚ(Operators)

ÇÒ´ç(assignment)

º¯¼ö ÇÒ´ç

º¯¼ö°ªÀ» ÃʱâÈ­ Çϰųª º¯°æÇϱâ

=

»ê¼ú½Ä°ú ¹®ÀÚ¿­ ÇÒ´çÀ» ÇØÁÖ´Â ´Ù±â´É ÇÒ´ç ¿¬»êÀÚ.

var=27
category=minerals  # "=" ´ÙÀ½¿¡ ºó Ä­ÀÌ µé¾î°¡¸é ¾È µË´Ï´Ù.

°æ°í

"=" ÇÒ´ç ¿¬»êÀÚ¿Í = Å×½ºÆ® ¿¬»êÀÚ¸¦ Çò°¥¸®¸é ¾È µË´Ï´Ù.

#    Å×½ºÆ® ¿¬»êÀÚÀÎ =

if [ "$string1" = "$string2" ]
# if [ "Xstring1" = "Xstring2" ] ¶ó°í ÇØ¾ß º¯¼ö °ªÀÌ ºñ¾î ÀÖÀ» °æ¿ì¿¡
# ¹ß»ýÇÒÁöµµ ¸ð¸¦ ¿¡·¯¸¦ ¸·¾ÆÁֱ⠶§¹®¿¡ ´õ ¾ÈÀüÇÕ´Ï´Ù.
# "X"´Â »ó¼âµÇ¾î ¾ø¾îÁý´Ï´Ù.
then
   command
fi

»ê¼ú ¿¬»êÀÚ(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 ´Â ºÎµ¿ ¼Ò¼öÁ¡ ¿¬»êÀ» ÀÌÇØÇÏÁö ¸øÇÕ´Ï´Ù. Á¡ÀÌ µé¾î°£ ¼ýÀÚ´Â ´Ü¼øÈ÷ ¹®ÀÚ¿­·Î Ãë±ÞµË´Ï´Ù.
a=1.5

let "b = $a + 1.3"  # ¿¡·¯.
# t2.sh: let: b = 1.5 + 1.3: syntax error in expression (error token is ".5 + 1.3")
echo "b = $b"       # b=1
ºÎµ¿ ¼Ò¼öÁ¡ ¿¬»êÀ̳ª ¼öÇÐ ÇÔ¼öµéÀÌ ÇÊ¿äÇÏ´Ù¸é bc ¸¦ ¾²¼¼¿ä.

ºñÆ® ¿¬»êÀÚ(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¸¦ Âü°íÇϼ¼¿ä.