7.1. Å×½ºÆ®(Test Constructs)

¿¹ 7-1. ¹«¾ùÀÌ ÂüÀΰ¡?

#!/bin/bash

echo

echo "\"0\" Å×½ºÆ®"
if [ 0 ]      # zero
then
  echo "0 Àº Âü."
else
  echo "0 Àº °ÅÁþ."
fi

echo

echo "\"NULL\" Å×½ºÆ®"
if [ ]        # NULL (empty condition)
then
  echo "NULL Àº Âü."
else
  echo "NULL Àº °ÅÁþ."
fi

echo

echo "\"xyz\" Å×½ºÆ®"
if [ xyz ]    # ¹®ÀÚ¿­
then
  echo "ÀÓÀÇÀÇ ¹®ÀÚ¿­Àº Âü."
else
  echo "ÀÓÀÇÀÇ ¹®ÀÚ¿­Àº °ÅÁþ."
fi

echo

echo "\"\$xyz\" Å×½ºÆ®"
if [ $xyz ]   # $xyz °¡ ³ÎÀÎÁö Å×½ºÆ®...
              # ÇÏÁö¸¸ ´ÜÁö ÃʱâÈ­µÇÁö ¾ÊÀº º¯¼öÀÏ ¶§¸¸.
then
  echo "ÃʱâÈ­ ¾È µÈ º¯¼ö´Â Âü."
else
  echo "ÃʱâÈ­ ¾È µÈ º¯¼ö´Â °ÅÁþ."
fi

echo

echo "\"-n \$xyz\" Å×½ºÆ®"
if [ -n "$xyz" ]            # Á» ´õ ¾î·Æ°Ô º¸À̰Ô.
then
  echo "ÃʱâÈ­ ¾È µÈ º¯¼ö´Â Âü."
else
  echo "ÃʱâÈ­ ¾È µÈ º¯¼ö´Â °ÅÁþ."
fi

echo

xyz=                        # ³Î °ªÀ¸·Î ÃʱâÈ­.

echo "\"-n \$xyz\" Å×½ºÆ®"
if [ -n "$xyz" ]
then
  echo "³Î º¯¼ö´Â Âü."
else
  echo "³Î º¯¼ö´Â °ÅÁþ."
fi


echo


# "false"°¡ ÂüÀÏ ¶§.

echo "\"false\" Å×½ºÆ®"
if [ "false" ]              #  "false"´Â ±×³É ¹®ÀÚ¿­ °°ÁÒ?
then
  echo "\"false\" ´Â Âü."   #+ ±×·¡¼­ ÂüÀÌ µÇ³×¿ä.
else
  echo "\"false\" ´Â °ÅÁþ."
fi

echo

echo "\"\$false\" Å×½ºÆ®"  # ÃʱâÈ­ ¾È µÈ º¯¼ö, ´Ù½Ã.
if [ "$false" ]
then
  echo "\"\$false\" ´Â Âü."
else
  echo "\"\$false\" ´Â °ÅÁþ."
fi                          # Èì, ÀÌ°Ô ¿ì¸®°¡ ¿øÇÏ´ø °ÅÁÒ.


echo

exit 0

¿¬½À¹®Á¦. À§¿¡ ³ª¿Â ¿¹ 7-1ÀÇ µ¿ÀÛÀ» ¼³¸íÇØ º¸¼¼¿ä.

if [ condition-true ]
then
   command 1
   command 2
   ...
else
   # ¿É¼Ç(ÇÊ¿ä ¾ø´Ù¸é ºüÁ®µµ µË´Ï´Ù).
   # ¿ø·¡ Á¶°ÇÀÌ ½ÇÆÐÇßÀ» °æ¿ì µ¿ÀÛÇÒ ÄÚµåµéÀ» µÎ¼¼¿ä.
   command 3
   command 4
   ...
fi

'if'¿Í 'then'À» °°Àº ÁÙ¿¡ µÎ·Á¸é ¼¼¹ÌÄÝ·ÐÀ» ¾²¼¼¿ä.

if [ -x "$filename" ]; then

Else if ¿Í elif

elif

elif´Â else ifÀÇ ´ÜÃàÇüÀÔ´Ï´Ù. ¹Ù±ùÂÊ if/thenÀÇ ¾ÈÂÊ¿¡ ÁßÃ¸ÇØ¼­ ¾²´Â È¿°ú¸¦ °¡Á®¿É´Ï´Ù.

if [ condition1 ]
then
   command1
   command2
   command3
elif [ condition2 ]
# else if ¿Í °°½À´Ï´Ù.
then
   command4
   command5
else
   default-command
fi

if test condition-true¿Í if [ condition-true ] Àº ¿ÏÀüÈ÷ ¶È°°Àº Ç¥ÇöÀÔ´Ï´Ù. [ ´Â test ¸í·É¾î¸¦ ºÎ¸£´Â ÅäÅ«À̱⠶§¹®¿¡ ] °¡ ²À ÇÊ¿äÇÏÁø ¾ÊÁö¸¸ »õ ¹öÀüÀÇ bash ¿¡¼­´Â ±×·¡µµ ÀÖ¾î¾ß µË´Ï´Ù.

Âü°í: test ¸í·É¾î´Â ÆÄÀÏ Å¸ÀÔÀ» Å×½ºÆ®Çϰųª ¹®ÀÚ¿­À» ºñ±³ÇØ ÁÖ´Â bash ³»Àå ¸í·ÉÀ̱⠶§¹®¿¡, Bash ½ºÅ©¸³Æ®¾È¿¡¼­ test´Â sh-utils ÆÐŰÁöÀÇ ÀϺκÐÀÎ /usr/bin/test ¿ÜºÎ ¸í·É¾î¸¦ ºÎ¸£Áö ¾Ê½À´Ï´Ù. ºñ½ÁÇϰÔ, [µµ /usr/bin/test·Î ¸µÅ©µÇ¾î ÀÖ´Â /usr/bin/[¸¦ ºÎ¸£Áö ¾Ê½À´Ï´Ù.

bash$ type test
test is a shell builtin
bash$ type '['
[ is a shell builtin
bash$ type '[['
[[ is a shell keyword
bash$ type ']]'
]] is a shell keyword
bash$ type ']'
bash: type: ]: not found
	      

¿¹ 7-2. [ ] ¿Í test ÀÇ µ¿ÀÏÇÔ

#!/bin/bash

echo

if test -z "$1"
then
  echo "¸í·É¾îÁÙ ÀÎÀÚ°¡ ¾ø½À´Ï´Ù."
else
  echo "ù¹øÂ° ¸í·É¾îÁÙ ÀÎÀÚ´Â $1 ÀÔ´Ï´Ù."
fi


if [ -z "$1" ]    # À§ÀÇ ÄÚµå ºí·°°ú ±â´ÉÀûÀ¸·Î µ¿ÀÏÇÕ´Ï´Ù.
#   if [ -z "$1"   ¶ó°í ÇØµµ µ¿ÀÛÇϰÚÁö¸¸...
#+  Bash ´Â ¿À¸¥ÂÊ ´ë°ýÈ£°¡ ºüÁ³´Ù°í ¿¡·¯ ¸Þ¼¼Áö¸¦ ³À´Ï´Ù.
then
  echo "¸í·É¾îÁÙ ÀÎÀÚ°¡ ¾ø½À´Ï´Ù."
else
  echo "ù¹øÂ° ¸í·É¾îÁÙ ÀÎÀÚ´Â $1 ÀÔ´Ï´Ù."
fi

echo

exit 0

[[ ]] ´Â ½© »ó¿¡¼­ [ ]°ú µ¿ÀÏÇÕ´Ï´Ù. ÀÌ ¸í·É¾î´Â ksh88¿¡¼­ µû ¿Â È®Àå Å×½ºÆ® ¸í·É¾îÀÔ´Ï´Ù.

Âü°í: [[ °ú ]] »çÀÌ¿¡¼­´Â ÆÄÀϸí È®ÀåÀ̳ª ³¹¸» Á¶°¢³²ÀÌ ÀϾÁö ¾ÊÁö¸¸ ¸Å°³º¯¼ö È®ÀåÀ̳ª ¸í·É¾î ġȯÀº ÀϾ´Ï´Ù.

file=/etc/passwd

if [[ -e $file ]]
then
  echo "ºñ¹Ð¹øÈ£ ÆÄÀÏÀÌ Á¸ÀçÇÕ´Ï´Ù."
fi

ÀÛÀº Á¤º¸: [ ... ] ¸»°í [[ ... ]] ¸¦ ¾²¸é ¸¹Àº ³í¸®Àû ¿¡·¯µéÀ» ¸·À» ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î &&, ||, <, > ¿¬»êÀÚµéÀº [ ] ¿¡¼­ ¿¡·¯¸¦ ³»Áö¸¸ [[ ]] ¿¡¼­´Â Àß µ¿ÀÛÇÕ´Ï´Ù.

Âü°í: if´ÙÀ½¿¡ ²À test³ª Å×½ºÆ® ´ë°ýÈ£( [ ]³ª [[ ]] )°¡ ³ª¿ÀÁö ¾Ê¾Æµµ µË´Ï´Ù.
dir=/home/bozo
if cd "$dir" 2>/dev/null; then   # "2>/dev/null" ´Â ¿¡·¯ ¸Þ¼¼Áö¸¦ ¼û°ÜÁÝ´Ï´Ù.
  echo "ÇöÀç µð·ºÅ丮´Â $dir ÀÔ´Ï´Ù."
else
  echo "$dir ·Î ¿Å°Ü°¥ ¼ö ¾ø½À´Ï´Ù."
fi
"if COMMAND" ¹®Àº COMMANDÀÇ Á¾·á »óŸ¦ ¸®ÅÏÇÕ´Ï´Ù.

ºñ½ÁÇϰÔ, Å×½ºÆ® ´ë°ýÈ£°¡ ¸®½ºÆ®¿Í °°ÀÌ ¾²À̸é if ¾øÀÌ ´Üµ¶À¸·Î ¾²ÀÏ ¼öµµ ÀÖ½À´Ï´Ù.
var1=20
var2=22
[ "$var1" -ne "$var2" ] && echo "$var1 ´Â $var2 ¿Í °°Áö ¾Ê½À´Ï´Ù."

home=/home/bozo
[ -d "$home" ] || echo "$home µð·ºÅ丮´Â Á¸ÀçÇÏÁö ¾Ê´Â µð·ºÅ丮ÀÔ´Ï´Ù."

(( )) ¹®Àº »ê¼ú½ÄÀ» Æò°¡Çؼ­ È®ÀåÇØ ÁÝ´Ï´Ù. ±× »ê¼ú½ÄÀÌ 0 À¸·Î Æò°¡µÇ¸é Á¾·á »óÅ 1À̳ª "false"¸¦ ¸®ÅÏÇϰí 0 ÀÌ ¾Æ´Ñ °ªÀ¸·Î Æò°¡µÇ¸é Á¾·á »óÅ 0À̳ª "true"¸¦ ¸®ÅÏÇÕ´Ï´Ù. ¾Õ¿¡¼­ ¾ê±âÇß´ø test³ª [ ]¿Í Çö°ÝÇÑ Â÷À̸¦ º¸¿©ÁÝ´Ï´Ù.

¿¹ 7-3. (( ))·Î »ê¼ú½Ä Å×½ºÆ® Çϱâ

#!/bin/bash
# »ê¼ú Å×½ºÆ®.

# (( ... )) ´Â »ê¼ú¹®À» Æò°¡Çϰí Å×½ºÆ® ÇØ ÁÝ´Ï´Ù.
# Á¾·á »óÅ´ [ ... ] ¿Í ¹Ý´ëÀÔ´Ï´Ù!

(( 0 ))
echo "\"(( 0 ))\" ÀÇ Á¾·á »óÅ´ $?."   # 1

(( 1 ))
echo "\"(( 1 ))\" ÀÇ Á¾·á »óÅ´ $?."   # 0

(( 5 > 4 ))                             # Âü
echo $?                                 # 0

(( 5 > 9 ))                             # °ÅÁþ
echo $?                                 # 1

exit 0