Áö±Ý ¿©·¯ºÐÀÌ ½Ã½ºÅÛ¿¡¼ ¾²°í ÀÖ´Â Bash ´Â ¹öÀü 2.XX ´ë ÀÔ´Ï´Ù.
bash$ echo $BASH_VERSION 2.04.21(1)-release |
¿¹ 35-1. ¹®ÀÚ¿ È®Àå
#!/bin/bash # ¹®ÀÚ¿ È®Àå. # Bash ¹öÀü 2 ºÎÅÍ ¼Ò°³µÊ. # $'xxx' ÇüÅÂÀÇ ¹®ÀÚ¿µéÀº Ç¥ÁØ À̽ºÄÉÀÌÇÁ ¹®ÀÚ·Î ÇØ¼®µË´Ï´Ù. echo $'º§ 3¹ø ¿ï¸®±â \a \a \a' echo $'3¹øÀÇ ÆûÇǵå(form feed) \f \f \f' echo $'10¹øÀÇ ´º¶óÀÎ(newline) \n\n\n\n\n\n\n\n\n\n' exit 0 |
¿¹ 35-2. °£Á¢ º¯¼ö ÂüÁ¶ - »õ·Î¿î ¹æ¹ý
#!/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}" # t = 24
table_cell_3=387
echo "t ÀÇ °ªÀÌ ${!t} ·Î ¹Ù²î¾ú½À´Ï´Ù." # 387
# ¹è¿À̳ª Å×ÀÌºí ¸â¹ö¸¦ ÂüÁ¶ÇÒ ¶§³ª
#+ ´ÙÂ÷¿ø ¹è¿À» ½Ã¹Ä·¹ÀÌ¼Ç ÇÒ °æ¿ì¿¡ ¾µ ¸¸ ÇÕ´Ï´Ù.
# À妽ÌÀ» ¿É¼ÇÀ¸·Î °¡Á³´Ù¸é ´õ ÁÁ¾ÒÀ» °Ì´Ï´Ù(ÈÞ~~).
exit 0 |
¿¹ 35-3. ¹è¿°ú ¾à°£ÀÇ Æ®¸¯À» ½á¼ ÇÑ ¹úÀÇ Ä«µå¸¦ 4¸í¿¡°Ô ·£´ýÇÏ°Ô µ¹¸®±â
#!/bin/bash
# ¿À·¡µÈ ½Ã½ºÅÛÀ̶ó¸é #!/bin/bash2 ·Î ½ÇÇà½ÃÄÑ¾ß ÇÒÁöµµ ¸ð¸¨´Ï´Ù.
# Ä«µå:
# Ä«µå ÇÑ ¹úÀ» 4¸í¿¡°Ô ¹«ÀÛÀ§·Î µ¹¸®±â.
UNPICKED=0
PICKED=1
DUPE_CARD=99
LOWER_LIMIT=0
UPPER_LIMIT=51
CARDS_IN_SUIT=13
CARDS=52
declare -a Deck
declare -a Suits
declare -a Cards
# ÇϳªÂ¥¸® 3Â÷¿ø ¹è¿À̶ó¸é ´õ ½±°í ´õ Á÷°üÀûÀ̾úÀ» °Ì´Ï´Ù.
# ¾Æ¸¶ Bash ´ÙÀ½ ¹öÀü¿¡¼´Â ´ÙÂ÷¿ø ¹è¿À» Áö¿øÇÒ °Ì´Ï´Ù.
initialize_Deck ()
{
i=$LOWER_LIMIT
until [ "$i" -gt $UPPER_LIMIT ]
do
Deck[i]=$UNPICKED # Ä«µå "ÇÑ ¹ú"(deck)À» ¸ðµÎ ¾È °í¸¥ »óÅ·ΠµÒ.
let "i += 1"
done
echo
}
initialize_Suits ()
{
Suits[0]=C # Ŭ·Î¹ö(Clubs)
Suits[1]=D # ´ÙÀ̾Ƹóµå(Diamonds)
Suits[2]=H # ÇÏÆ®(Hearts)
Suits[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 "suit_number = number / CARDS_IN_SUIT"
suit=${Suits[suit_number]}
echo -n "$suit-"
let "card_no = number % CARDS_IN_SUIT"
Card=${Cards[card_no]}
printf %-4s $Card
# Ä«µå¸¦ Ä ´ÜÀ§·Î ±ò²ûÇÏ°Ô Ãâ·Â.
}
seed_random () # ·£´ý ³Ñ¹ö ¹ß»ý±â seed.
{
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_SUIT"
if [ "$u" -eq 0 ] # ÁßøµÈ if/then Á¶°Ç Å×½ºÆ®.
then
echo
echo
fi
# ´Ù¸¥ »ç¶÷.
let "cards_picked += 1"
fi
done
echo
return 0
}
# ±¸Á¶Àû ÇÁ·Î±×·¡¹Ö:
# Àüü ÇÁ·Î±×·¥ ·ÎÁ÷Àº ÇÔ¼ö·Î ¸ðµâÈ µÇ¾î ÀÖ½À´Ï´Ù.
#================
seed_random
initialize_Deck
initialize_Suits
initialize_Cards
deal_cards
exit 0
#================
# ¿¬½À¹®Á¦ 1:
# Àüü¿¡ ´ëÇØ ¿ÏÀüÇÑ ÁÖ¼®À» ´Þ¾Æº¸¼¼¿ä.
# ¿¬½À¹®Á¦ 2:
# ÇÑ »ç¶÷ÀÌ ¹ÞÀº Ä«µå¸¦ Á¾·ù¼øÀ¸·Î Á¤·ÄÇØ¼ º¸¿©ÁÖµµ·Ï °íÃĺ¸¼¼¿ä.
# ÇÊ¿äÇÏ´Ù¸é Æí¸®ÇÑ ´Ù¸¥ ±â´ÉÀ» ½áµµ ±¦Âú½À´Ï´Ù.
# ¿¬½À¹®Á¦ 3:
# ½ºÅ©¸³Æ®¸¦ °£·«ÈÇϰí, ÇÕ¸®ÀûÀÎ ·ÎÁ÷ÀÌ µÇµµ·Ï °íÃĺ¸¼¼¿ä. |
| [1] | Chet Ramey ´Â ÆÞ¿¡¼ ¾²ÀÌ´Â ¿¬°ü ¹è¿(associative arrays) À» ´ÙÀ½ Bash ¿¡¼ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÏ°Ú´Ù°í ¾à¼ÓÇß½À´Ï´Ù. |