3.30. Bash, ¹öÀü 2

Áö±Ý ¿©·¯ºÐÀÇ ½Ã½ºÅÛ¿¡¼­ ¾²°í ÀÖ´Â bash´Â ¹öÀü 2ÀÔ´Ï´Ù. ¿¹Àü bash¿¡ ºñÇØ ¹è¿­ º¯¼ö, ¹®ÀÚ¿­°ú ÀÎÀÚ È®Àå, Çâ»óµÈ º¯¼ö °£Á¢ ÂüÁ¶µîÀ» Æ÷ÇÔÇÑ ´Ù¸¥ Ư¡µéÀÌ ¾÷µ¥ÀÌÆ® µÆ½À´Ï´Ù.

예 3-101. ¹®ÀÚ¿­ È®Àå

#!/bin/bash

# bash ¹öÀü 2¿¡¼­ ¼Ò°³µÈ ¹®ÀÚ¿­ È®Àå

# $'xxx' ÇüÅÂÀÇ ¹®ÀÚ¿­Àº Ç¥ÁØ À̽ºÄÉÀÌÇÁ ¹®ÀÚµéÀ» °®½À´Ï´Ù.

echo $'º§À» 3¹ø ¿ï¸®±â \a \a \a'
echo $'3¹øÀÇ Æû Çǵå(form feeds) \f \f \f'
echo $'10¹øÀÇ ´º¶óÀÎ \n\n\n\n\n\n\n\n\n\n'

exit 0

예 3-102. °£Á¢ º¯¼ö ÂüÁ¶ - »õ·Î¿î ¹æ¹ý

#!/bin/bash

# º¯¼ö °£Á¢ ÂüÁ¶
# C++ ÀÇ ÂüÁ¶ Ư¼ºÀÌ ¾à°£ °¡¹ÌµÇ¾ú½À´Ï´Ù.


a=letter_of_alphabet
letter_of_alphabet=z

# Á÷Á¢ ÂüÁ¶
echo "a = $a"

# °£Á¢ ÂüÁ¶
echo "Now a = ${!a}"
# ${!variable} ¶õ Ç¥±â¹ýÀº ¿¹ÀüÀÇ "eval var1=\$$var2" ¿¡ ºñÇØ ¾ÆÁÖ ÈǸ¢ÇÕ´Ï´Ù.

echo

t=table_cell_3
table_cell_3=24
echo "t = ${!t}"
table_cell_3=387
echo "tÀÇ °ªÀÌ ${!t} ·Î ¹Ù²î¾ú½À´Ï´Ù."
# ¹è¿­À̳ª Å×À̺íÀÇ ¸â¹ö¸¦ ÂüÁ¶ÇÒ ¶§³ª
# ´ÙÂ÷¿ø ¹è¿­À» Èä³»³¾ °æ¿ì¿¡ ¾µ ¸¸ ÇÕ´Ï´Ù.
# Àε¦½Ì ¿É¼ÇÀÌ¸é ´õ ÁÁ¾ÒÀ» °ÍÀÔ´Ï´Ù(ÈÞ~).


exit 0

예 3-103. ¹è¿­°ú ¾à°£ÀÇ Æ®¸¯À» ½á¼­ ÇÑ ¹úÀÇ Ä«µå¿¡¼­ 4¸í¿¡°Ô ¹«ÀÛÀ§·Î Ä«µå¸¦ µ¹¸®±â

#!/bin/bash2
# bash ¹öÀü 2¸¦ Ưº°È÷ ÁöÁ¤ÇØ ÁÖÁö ¾ÊÀ¸¸é Á¦´ë·Î µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù.

# Ä«µå:
# Ä«µå ÇÑ ¹ú¿¡¼­ 4¸í¿¡°Ô ¹«ÀÛÀ§·Î Ä«µå µ¹¸®±â

UNPICKED=0
PICKED=1

DUPE_CARD=99

LOWER_LIMIT=0
UPPER_LIMIT=51
CARDS_IN_SUITE=13
CARDS=52

declare -a Deck
declare -a Suites
declare -a Cards
# ÇϳªÀÇ 3Â÷¿ø ¹è¿­À̶ó¸é Á» ´õ ½±°í ´õ Á÷°üÀûÀ̾úÀ» °Ì´Ï´Ù.
# ¾Æ¸¶ bash ´ÙÀ½ ¹öÀü¿¡¼­´Â ´ÙÂ÷¿ø ¹è¿­À» Áö¿øÇÒ °Ì´Ï´Ù.


initialize_Deck ()
{
i=$LOWER_LIMIT
until [ $i -gt $UPPER_LIMIT ]
do
  Deck[i]=$UNPICKED
  let "i += 1"
done
# ÇÑ ¹ú¿¡ ¼ÓÇÏ´Â ¸ðµç Ä«µå¸¦ ¼±ÅõÇÁö ¾ÊÀº »óÅ·Π¼¼Æ®
echo
}

initialize_Suites ()
{
Suites[0]=C # Ŭ·Î¹ö(Clubs)
Suites[1]=D # ´ÙÀ̾Ƹóµå(Diamonds)
Suites[2]=H # ÇÏÆ®(Hearts)
Suites[3]=S # ½ºÆäÀ̵å(Spades)
}

initialize_Cards ()
{
Cards=(2 3 4 5 6 7 8 9 10 J Q K A)
# ¹è¿­À» ÃʱâÈ­ÇÏ´Â ´Ù¸¥ ¹æ¹ý
}

pick_a_card ()
{
card_number=$RANDOM
let "card_number %= $CARDS"
if [ ${Deck[card_number]} -eq $UNPICKED ]
then
  Deck[card_number]=$PICKED
  return $card_number
else  
  return $DUPE_CARD
fi
}

parse_card ()
{
number=$1
let "suite_number = number / CARDS_IN_SUITE"
suite=${Suites[suite_number]}
echo -n "$suite-"
let "card_no = number % CARDS_IN_SUITE"
Card=${Cards[card_no]}
printf %-4s $Card
# Ä«µå¸¦ Ä­ ´ÜÀ§·Î ±ò²ûÇÏ°Ô Ãâ·Â
}

seed_random ()
{
# ¹«ÀÛÀ§ ¼ýÀÚ ¹ß»ý±â¿ë ¾¾¾Ñ
seed=`eval date +%s`
let "seed %= 32766"
RANDOM=$seed
}

deal_cards ()
{
echo

cards_picked=0
while [ $cards_picked -le $UPPER_LIMIT ]
do
  pick_a_card
  t=$?

  if [ $t -ne $DUPE_CARD ]
  then
    parse_card $t

    u=$cards_picked+1
    # Àӽ÷Π1ºÎÅÍ À妽ÌÀ» ÇÏ´Â ÇüÅ·Π¹Ù²Þ
    let "u %= $CARDS_IN_SUITE"
    if [ $u -eq 0 ]
    then
     echo
     echo
    fi
    # ´Ù¸¥ »ç¶÷

    let "cards_picked += 1"
  fi  
done  

echo

return 0
}


# ±¸Á¶Àû ÇÁ·Î±×·¡¹Ö:
# Àüü ÇÁ·Î±×·¥ ·ÎÁ÷Àº ÇÔ¼ö·Î ¸ðµâÈ­ µÇ¾î ÀÖ½À´Ï´Ù.

#================
seed_random
initialize_Deck
initialize_Suites
initialize_Cards
deal_cards

exit 0
#================



# ¿¬½À¹®Á¦ 1:
# ¿Ïº®ÇÑ ÁÖ¼®À» ´Þ¾Æ º¸¼¼¿ä.

# ¿¬½À¹®Á¦ 2:
# ÇÑ »ç¶÷ÀÌ ¹ÞÀº Ä«µå¸¦ Á¾·ù¼øÀ¸·Î Á¤·ÄÇØ¼­ º¸¿©ÁÖµµ·Ï °íÃĺ¸¼¼¿ä.
# ÇÊ¿äÇÏ´Ù¸é Æ¯º°ÇÑ ´Ù¸¥ ±â´ÉÀ» ½áµµ ±¦Âú½À´Ï´Ù.

# ¿¬½À¹®Á¦ 3:
# ½ºÅ©¸³Æ®¸¦ °£·«È­Çϰí ÇÕ¸®ÀûÀÎ ·ÎÁ÷ÀÌ µÇµµ·Ï °íÃĺ¸¼¼¿ä.