25Àå. ¸®½ºÆ®(List Constructs)

"and list"¿Í "or list"´Â ¿©·¯ ¸í·É¾îµéÀ» ¿¬¼ÓÀûÀ¸·Î ½ÇÇà½Ãų ¼ö ÀÖ°Ô ÇØÁÝ´Ï´Ù. ÀÌ°É·Î ¾ÆÁÖ º¹ÀâÇÏ°Ô ÁßøµÅ ÀÖ´Â if/thenÀ̳ª case ¹®À» È¿°úÀûÀ¸·Î ´ëÄ¡ÇÒ ¼ö ÀÖ½À´Ï´Ù.

¸í·É¾îµéÀ» ¹­±â

and list

command-1 && command-2 && command-3 && ... command-n
°¢ ¸í·É¾îµéÀº ¹Ù·Î ¾ÕÀÇ ¸í·É¾î°¡ true(0) °ªÀ» ¸®ÅÏÇÏ´Â µ¿¾È Â÷·Ê´ë·Î ½ÇÇàµË´Ï´Ù. false(0ÀÌ ¾Æ´Ñ °ª)°¡ óÀ½ ¸®Å쵃 ¶§, Àüü ¸í·É¾î »ç½½ÀÌ ²÷¾îÁö¸é¼­ Á¾·áµË´Ï´Ù(false¸¦ óÀ½ ¸®ÅÏÇÑ ¸í·É¾î°¡ ¸¶Áö¸·À¸·Î ½ÇÇàµÇ´Â ¸í·É¾î°¡ µË´Ï´Ù).

¿¹ 25-1. "and list"¸¦ ½á¼­ ¸í·É¾îÁÙ ÀÎÀÚ È®ÀÎÇϱâ

#!/bin/bash
# "and list"

if [ ! -z "$1" ] && echo "ù¹ø° ÀÎÀÚ = $1" && [ ! -z "$2" ] && echo "µÎ¹ø° ÀÎÀÚ = $2"
then
  echo "µÎ °³ ÀÌ»óÀÇ ÀÎÀÚ°¡ ³Ñ¾î¿Ô½À´Ï´Ù."
  # ¸ðµç ¸í·É¾î »ç½½ÀÌ ÂüÀ» ¸®ÅÏÇßÀ» °æ¿ì.
else
  echo "µÎ °³ ¹Ì¸¸ÀÇ ÀÎÀÚ°¡ ³Ñ¾î¿Ô½À´Ï´Ù."
  # ¸í·É¾î »ç½½Áß ÃÖ¼Ò Çϳª°¡ °ÅÁþÀ» ¸®ÅÏ.
fi  
# ÁÖÀÇÇÒ °Ô Çϳª ÀÖ½À´Ï´Ù.
# if [ ! -z $1 ] ´Â Àß µÇÁö¸¸ ¶È°°À» °Í °°Àº
# if [ -n $1 ] ´Â Àß ¾È µË´Ï´Ù. 
# ÇÏÁö¸¸ 
#  if [ -n "$1" ] 
# ó·³ Äõ¿ìÆ®¸¦ °É¸é µË´Ï´Ù. Á¶½ÉÇؼ­ ¾²¼¼¿ä!
# Å×½ºÆ®¿¡¼­ ¾²ÀÌ´Â º¯¼ö´Â Ç×»ó Äõ¿ìÆ®¸¦ Çؼ­ ¾²¼¼¿ä.


# "¼ø¼öÇÑ" if/then ¹®À» ½á¼­ ¶È°°Àº ÀÏÀ» ÇÕ´Ï´Ù.
if [ ! -z "$1" ]
then
  echo "ù¹ø° ÀÎÀÚ = $1"
fi
if [ ! -z "$2" ]
then
  echo "µÎ¹ø° ÀÎÀÚ = $2"
  echo "µÎ °³ ÀÌ»óÀÇ ÀÎÀÚ°¡ ³Ñ¾î¿Ô½À´Ï´Ù."
else
  echo "µÎ °³ ¹Ì¸¸ÀÇ ÀÎÀÚ°¡ ³Ñ¾î¿Ô½À´Ï´Ù."
fi
# ÀÌ ¹æ¹ýÀº "and list"¸¦ ¾²´Â °Íº¸´Ù ´õ ±æ°í ´ú ¼¼·ÃµÅ º¸ÀÔ´Ï´Ù.


exit 0

¿¹ 25-2. "and list"¸¦ ½á¼­ ¸í·É¾îÁÙ ÀÎÀÚ¸¦ È®ÀÎÇÏ´Â ´Ù¸¥ ¹æ¹ý

#!/bin/bash

ARGS=1        # ¿øÇÏ´Â ÀÎÀÚ ¼ö.
E_BADARGS=65  # Ʋ¸° ÀÎÀÚ ¼öÀÏ °æ¿ìÀÇ Á¾·á°ª.

test $# -ne $ARGS && echo "»ç¿ë¹ý: `basename $0` $ARGS argument(s)" && exit $E_BADARGS
# condition-1 ÀÌ ÂüÀ̸é(Ʋ¸° ÀÎÀÚ °¹¼ö) °°Àº ÁÙÀÇ ³ª¸ÓÁö ºÎºÐÀÌ ½ÇÇàµÇ°í ½ºÅ©¸³Æ®°¡ Á¾·áµÊ.

# ´ÙÀ½ ÁÙÀº À§ÀÇ Å×½ºÆ®°¡ ½ÇÆÐÇÒ °æ¿ì¿¡¸¸ ½ÇÇàµË´Ï´Ù.
echo "ÀÎÀÚ °¹¼ö°¡ ¸Â½À´Ï´Ù."

exit 0

# Á¾·á°ªÀ» È®ÀÎÇÏ·Á¸é ÀÌ ½ºÅ©¸³Æ®°¡ Á¾·áµÈ ´ÙÀ½ "echo $?"¸¦ ÇØ º¸¼¼¿ä.
or list

command-1 || command-2 || command-3 || ... command-n
°¢ ¸í·É¾îµéÀº ¹Ù·Î ¾ÕÀÇ ¸í·É¾î°¡ false¸¦ ¸®ÅÏÇÏ´Â µ¿¾È Â÷·Ê´ë·Î ½ÇÇàµË´Ï´Ù. false°¡ óÀ½ ¸®Å쵃 ¶§, Àüü ¸í·É¾î »ç½½ÀÌ ²÷¾îÁö¸é¼­ Á¾·áµË´Ï´Ù(true¸¦ óÀ½ ¸®ÅÏÇÑ ¸í·É¾î°¡ ¸¶Áö¸·À¸·Î ½ÇÇàµÇ´Â ¸í·É¾î°¡ µË´Ï´Ù). ÀÌ´Â ºÐ¸íÈ÷ "and list"¿Í Á¤¹Ý´ë·Î µ¿ÀÛÇÕ´Ï´Ù.

¿¹ 25-3. "or lists"¿Í "and list"¸¦ °°ÀÌ ¾²±â

#!/bin/bash

# "Delete", º°·Î Á¤±³ÇÏÁö ¾ÊÀº ÆÄÀÏ Áö¿ì±â À¯Æ¿¸®Æ¼.
# »ç¿ë¹ý: delete filename

E_BADARGS=65

if [ -z "$1" ]
then
  echo "»ç¿ë¹ý: `basename $0` filename"
  exit $E_BADARGS
fi  


file=$1  # ÆÄÀÏÀ̸§À» ¼¼Æ®.

[ ! -f "$1" ] && echo "\"$1\" ÆÄÀÏÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù. \
Á¸ÀçÇÏÁö ¾Ê´Â ÆÄÀÏÀº Áö¿ï ¼ö ¾ø½À´Ï´Ù."
# ÆÄÀÏÀÌ Á¸ÀçÇÏÁö ¾ÊÀ» ¶§ ¿¡·¯ ¸Þ¼¼Áö¸¦ ³»±â À§ÇØ AND LIST »ç¿ë.
# µÎ ÁÙ¿¡ °ÉÄ£ echo ¸Þ¼¼Áö Áß°£ÀÇ ´º¶óÀÎÀ» À̽ºÄÉÀÌÇÁ ½ÃÄ×½À´Ï´Ù. Àß º¸¼¼¿ä.

[ ! -f "$1" ] || (rm -f $1; echo "File \"$file\" deleted.")
# OR LIST ¸¦ ½á¼­ ÆÄÀÏÀÌ Á¸ÀçÇÏ´Â °æ¿ì¿¡´Â ÆÄÀÏÀ» »èÁ¦.
# ( command1 ; command2 ) ´Â »ç½Ç, AND LIST ÀÇ ´Ù¸¥ ¹öÀüÀÔ´Ï´Ù.

# ·ÎÁ÷ÀÌ µÚ¹Ù²ï °Í¿¡ ÁÖÀÇÇϼ¼¿ä.
# AND LIST ´Â ÂüÀÏ ¶§ ½ÇÇàµÇ°í, OR LIST ´Â °ÅÁþÀÏ ¶§ ½ÇÇàµË´Ï´Ù.

exit 0

°æ°í

"or list"¿¡ µé¾î Àִ ù¹ø° ¸í·É¾î°¡ true¸¦ ¸®ÅÏÇØ¾ß µ¿ÀÛÇÕ´Ï´Ù.

Áß¿ä: and list³ª or listÀÇ Á¾·á »óÅ´ ¸¶Áö¸·À¸·Î ½ÇÇàµÈ ¸í·É¾îÀÇ Á¾·á »óŸ¦ °¡Á®°©´Ï´Ù.

"and"¿Í "or" list¸¦ ¾ÆÁÖ ¸ÚÁö°Ô ¿¬°áÇؼ­ ¾µ ¼öµµ ÀÖÁö¸¸ ±×·¸°Ô µÇ¸é Àüü ·ÎÁ÷ÀÌ µÚÁ×¹ÚÁ׵DZ⠽±°í µð¹ö±ëÇÒ ¶§ ¾ÆÁÖ Èûµé¾î Áý´Ï´Ù.
false && true || echo false    # false

# ¶È°°½À´Ï´Ù.
( false && true ) || echo false     # false
# ÇÏÁö¸¸ ÀÌ°Ç ´Ù¸£³×¿ä.
false && ( true || echo false )     # (¾Æ¹«°Íµµ echoµÇÁö ¾ÊÁÒ)

# Áß¿äÇÑ °ÍÀº, ³í¸® ¿¬»êÀÚÀÎ "&&"¿Í "||"°¡ °°Àº ¿ì¼± ¼øÀ§¸¦ °®±â ¶§¹®¿¡
# ¿ÞÂÊ¿¡¼­ ¿À¸¥ÂÊÀ¸·Î ±×·ìÀ» Áö¾î Àüü¸¦ Æò°¡ÇØ¾ß ÇÕ´Ï´Ù.

# ¹» ¾î¶»°Ô ÇÏ°í ÀÖ´ÂÁö ¸ð¸¥´Ù¸é ÀÌ·¸°Ô º¹ÀâÇÏ°Ô ¾²Áö ¾Ê´Â°ÍÀÌ ÁÁ½À´Ï´Ù.

# Thanks, S.C.

º¯¼ö¸¦ Å×½ºÆ®Çغ¸±â À§Çؼ­ and / or list¸¦ ¾²´Â ¿¹Á¦´Â ¿¹ A-6¸¦ Âü°íÇϼ¼¿ä.