bash »õ ¹öÀüºÎÅÍ, 1Â÷¿ø ¹è¿À» Áö¿øÇϱ⠽ÃÀÛÇß½À´Ï´Ù. variable[xx]ó·³ ¼±¾ðÇÒ ¼öµµ ÀÖ°í declare -a variableó·³ ¹¬½ÃÀûÀ¸·Î ¼±¾ðÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ¹è¿ º¯¼ö¸¦ ¿ªÂüÁ¶ÇÏ·Á¸é(³»¿ëÀ» ¾Ë¾Æ³»·Á¸é) ${variable[xx]}ó·³ Áß°ýÈ£(curly bracket)¸¦ ¾²¸é µË´Ï´Ù.
예 3-88. °£´ÜÇÑ ¹è¿ »ç¿ë¹ý
#!/bin/bash
area[11]=23
area[13]=37
area[51]=UFOs
# ¹è¿ ¸â¹öµéÀº ²À ¿¬¼ÓÀûÀÌÁö ¾Ê¾Æµµ µÇ´Â °Í¿¡ ÁÖÀÇÇϼ¼¿ä.
# ¹è¿Áß ¸î¸î ¸â¹öµéÀ» ÃʱâÈ ½ÃŰÁö ¾ÊÀºÃ¤ ºñ¿ö ³öµµ ±¦Âú½À´Ï´Ù.
echo -n "area[11] = "
echo ${area[11]}
echo -n "area[13] = "
echo ${area[13]}
# {Áß°ýÈ£} °¡ ÇÊ¿äÇÕ´Ï´Ù.
echo "area[51]ÀÇ °ªÀº ${area[51]} ÀÔ´Ï´Ù."
# ÃʱâÈ ¾È µÈ ¹è¿ º¯¼ö´Â ºó ÄÀ» ÂïÀ» °ÍÀÔ´Ï´Ù.
echo -n "area[43] = "
echo ${area[43]}
echo "(area[43] Àº ÇÒ´çµÇÁö ¾Ê¾Ò½À´Ï´Ù)"
echo
# µÎ ¹è¿ º¯¼öÀÇ ÇÕÀ» ¼¼ ¹øÂ°¿¡ ÇÒ´çÇÕ´Ï´Ù.
area[5]=`expr ${area[11]} + ${area[13]}`
echo "area[5] = area[11] + area[13]"
echo -n "area[5] = "
echo ${area[5]}
area[6]=`expr ${area[11]} + ${area[51]}`
echo "area[6] = area[11] + area[51]"
echo -n "area[6] = "
echo ${area[6]}
# ¹®ÀÚ¿¿¡ Á¤¼ö¸¦ ´õÇÏ´Â °ÍÀº Çã¿ëµÇÁö ¾Ê±â ¶§¹®¿¡ µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù.
echo
echo
echo
# -----------------------------------------------------------------
# ´Ù¸¥ ¹è¿ÀÎ "area2"¸¦ º¾½Ã´Ù.
# ¹è¿ º¯¼ö¿¡ °ªÀ» ÇÒ´çÇÏ´Â ´Ù¸¥ ¹æ¹ýÀ» º¸¿©ÁÝ´Ï´Ù.
# array_name=( XXX YYY ZZZ ... )
area2=( zero one two three four)
echo -n "area2[0] = "
echo ${area2[0]}
# ¾ÆÇÏ, ¹è¿ À妽º °ªÀÌ 0ºÎÅÍ ½ÃÀÛÇϴ±º¿ä(¹è¿ÀÇ Ã¹¹øÂ° ¿ä¼Ò´Â [0]ÀÌÁö [1]ÀÌ ¾Æ´Õ´Ï´Ù).
echo -n "area2[1] = "
echo ${area2[1]} # [1]ÀÌ ¹è¿ÀÇ µÎ¹øÂ° ¿ä¼Ò°¡ µË´Ï´Ù.
# -----------------------------------------------------------------
echo
echo
echo
# -----------------------------------------------
# ¶Ç ´Ù¸¥ ¹è¿ "area3".
# ¹è¿ º¯¼ö¿¡ °ªÀ» ÇÒ´çÇÏ´Â ¶Ç ´Ù¸¥ ¹æ¹ý.
# array_name=([xx]=XXX [yy]=YYY ...)
area3=([17]=seventeen [24]=twenty-four)
echo -n "area3[17] = "
echo ${area3[17]}
echo -n "area3[24] = "
echo ${area3[24]}
# -----------------------------------------------
exit 0 |
¹è¿ º¯¼öµéÀº ÀڽŸ¸ÀÇ ¹®¹ýÀÌ ÀÖ½À´Ï´Ù. ¶ÇÇÑ, Ç¥ÁØ bash ¿¬»êÀڵ鵵 ¹è¿¿¡ ¾µ Ưº°ÇÑ ¿É¼ÇÀ» °®°í ÀÖ½À´Ï´Ù.
예 3-89. ¹è¿ÀÇ Æ¯º°ÇÑ Æ¯¼º ¸î °¡Áö
#!/bin/bash
declare -a colors
# ¹è¿À» Å©±â ÁöÁ¤¾øÀÌ ¼±¾ðÇÏ°Ô ÇØÁÝ´Ï´Ù.
echo "ÁÁ¾ÆÇÏ´Â »ö±òÀ» ³ÖÀ¸¼¼¿ä(ºó ÄÀ¸·Î ±¸ºÐÇØ ÁÖ¼¼¿ä)."
read -a colors
# 'read' ÀÇ Æ¯º°ÇÑ ¿É¼ÇÀ¸·Î ¹è¿¿¡ ÀÐÀº °ªÀ» ³Ö¾î ÁÝ´Ï´Ù.
echo
element_count=${#colors[@]} # ¹è¿ÀÇ ÃÑ °¹¼ö¸¦ ¾Ë¾Æ³»±â À§ÇÑ Æ¯º°ÇÑ ¹®¹ý
# element_count=${#colors[*]} µµ °°½À´Ï´Ù.
index=0
# ¹è¿ÀÇ ¸ðµç ¿ä¼Ò¸¦ º¸¿©ÁÝ´Ï´Ù.
while [ $index -lt $element_count ]
do
echo ${colors[$index]}
let "index = $index + 1"
done
# °¢ ¹è¿ ¿ä¼Ò´Â ÇÑ ÁÙ¿¡ Çϳª¾¿ ÂïÈ÷´Âµ¥
# ÀÌ·¸°Ô Çϱ⠽ÈÀ¸¸é echo -n "${colors[$index]} " ¶ó°í Çϼ¼¿ä.
echo
# ¹è¿ÀÇ ¸ðµç ¿ä¼Ò¸¦ ´Ù½Ã º¸¿©Áִµ¥ À̹ø¿¡´Â Á» ´õ ¿ì¾ÆÇÑ ¹æ¹ýÀ» ¾¹´Ï´Ù.
echo ${colors[@]}
# echo ${colors[*]} µµ ¶È°°ÀÌ µ¿ÀÛÇÕ´Ï´Ù.
echo
exit 0 |
À§ ¿¹Á¦¿¡¼ º» °Íó·³ ${array_name[@]}³ª ${array_name[*]}´Â ¹è¿ÀÇ ¸ðµç ¿ø¼ÒµéÀ» ³ªÅ¸³À´Ï´Ù. ¹è¿ÀÇ ¿ø¼Ò °¹¼ö¸¦ ³ªÅ¸³»·Á¸é ¾ÕÀÇ Ç¥Çö°ú ºñ½ÁÇÏ°Ô ${#array_name[@]}³ª ${#array_name[*]}¶ó°í ÇÏ¸é µË´Ï´Ù.
--
¹è¿À» ¾²¸é ½© ½ºÅ©¸³Æ®¿¡¼µµ ¿À·¡µÇ°í Àͼ÷ÇÑ ¾Ë°í¸®ÁòµéÀ» ±¸ÇöÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ¹°·Ð, ÀÌ·¸°Ô ÇÏ´Â °ÍÀÌ ¹Ýµå½Ã ÁÁÀº »ý°¢ÀÎÁö ¾Æ´ÑÁö´Â µ¶ÀÚ ¿©·¯ºÐÀÌ °áÁ¤ÇÒ ÀÏÀÔ´Ï´Ù.
예 3-90. ¾ÆÁÖ ¿À·¡µÈ Ä£±¸: ¹öºí ¼ÒÆ®
#!/bin/bash
# ºÒ¿ÏÀüÇÑ ¹öºí Á¤·Ä
# ¹öºí Á¤·Ä ¾Ë°í¸®ÁòÀ» ´Ù½Ã »ý°¢ÇØ º¸¼¼¿ä. ÀÌ ½ºÅ©¸³Æ®¿¡¼´Â...
# Á¤·ÄÇÒ ¹è¿À» ¸Å¹ø Ž»öÇÒ ¶§ ¸¶´Ù ÀÎÁ¢ÇÑ µÎ ¿ø¼Ò¸¦ ºñ±³Çؼ ¼ø¼°¡
# ´Ù¸£¸é µÎ °³¸¦ ¹Ù²ß´Ï´Ù.
# ù¹øÂ° Ž»ö¿¡¼´Â "°¡Àå Å«" ¿ø¼Ò°¡ Á¦ÀÏ ³¡À¸·Î °©´Ï´Ù.
# µÎ¹øÂ° Ž»ö¿¡¼´Â µÎ¹øÂ°·Î "°¡Àå Å«" ¿ø¼Ò°¡ ³¡¿¡¼ µÎ ¹øÂ°·Î °©´Ï´Ù.
# ÀÌ·¸°Ô ÇÏ¸é °¢ Ž»ö ´Ü°è´Â ¹è¿º¸´Ù ÀÛÀº ¼ö ¸¸ÅÀ» °Ë»öÇÏ°Ô µÇ°í,
# µÚ·Î °¥¼ö·Ï Ž»ö ¼Óµµ°¡ »¡¶óÁö´Â °ÍÀ» ´À³¥ ¼ö ÀÖÀ» °Ì´Ï´Ù.
exchange()
{
# ¹è¿ÀÇ µÎ ¸â¹ö¸¦ ¹Ù²ãÄ¡±â ÇÕ´Ï´Ù.
local temp=${Countries[$1]} # ¹Ù²ãÄ¡±âÇÒ µÎ º¯¼ö¸¦ À§ÇÑ Àӽà ÀúÀå¼Ò
Countries[$1]=${Countries[$2]}
Countries[$2]=$temp
return
}
declare -a Countries # º¯¼ö Á¤ÀÇ, ¹Ø¿¡¼ ÃʱâÈ µÇ±â ¶§¹®¿¡ ¿©±â¼´Â ¾È ½áµµ µË´Ï´Ù.
Countries=(Netherlands Ukraine Zair Turkey Russia Yemen Syria Brazil Argentina Nicaragua Japan Mexico Venezuela Greece England Israel Peru Canada Oman Denmark Wales France Kashmir Qatar Liechtenstein Hungary)
# X·Î ½ÃÀÛÇÏ´Â ³ª¶ó À̸§Àº »ý°¢ÀÌ ¾È ³ª³×¿ä, ÂÁ...
clear # ½ÃÀÛÇϱâ Àü¿¡ ȸéÀ» ±ú²ýÀÌ Áö¿ì°í...
echo "0: ${Countries[*]}" # 0¹øÂ° Ž»öÀÇ ¹è¿ Àüü¸¦ º¸¿©ÁÜ.
number_of_elements=${#Countries[@]}
let "comparisons = $number_of_elements - 1"
count=1 # Ž»ö Ƚ¼ö.
while [ $comparisons -gt 0 ] # ¹Ù±ùÂÊ ·çÇÁÀÇ ½ÃÀÛ
do
index=0 # °¢ Ž»ö ´Ü°è¸¶´Ù ¹è¿ÀÇ ½ÃÀÛ À妽º¸¦ 0À¸·Î ÀâÀ½
while [ $index -lt $comparisons ] # ¾ÈÂÊ ·çÇÁÀÇ ½ÃÀÛ
do
if [ ${Countries[$index]} \> ${Countries[`expr $index + 1`]} ]
# ¼ø¼°¡ Ʋ¸®¸é...
# \> °¡ ¾Æ½ºÅ° ºñ±³ ¿¬»êÀÚ¿´´ø°Å ±â¾ï³ª½ÃÁÒ?
then
exchange $index `expr $index + 1` # ¹Ù²ß½Ã´Ù.
fi
let "index += 1"
done # ¾ÈÂÊ ·çÇÁÀÇ ³¡
let "comparisons -= 1"
# "°¡Àå Å«" ¿ø¼Ò°¡ Á¦ÀÏ ³¡À¸·Î °¬±â ¶§¹®¿¡ ºñ±³È½¼ö¸¦ Çϳª ÁÙÀÏ Çʿ䰡 ÀÖ½À´Ï´Ù.
echo
echo "$count: ${Countries[@]}"
# °¢ Ž»ö ´Ü°è°¡ ³¡³ª¸é °á°ú¸¦ º¸¿©ÁÝ´Ï´Ù.
echo
let "count += 1" # Ž»ö Ƚ¼ö¸¦ ´Ã¸³´Ï´Ù.
done # ¹Ù±ùÂÊ ·çÇÁÀÇ ³¡
# ³¡!
exit 0 |
--
¹è¿À» ¾²¸é ¿¡¶óÅ佺Å׳׽ºÀÇ Ã¼(Sieve of Erastosthenes)ÀÇ ½© ½ºÅ©¸³Æ® ¹öÀüÀ» ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. ¹°·Ð, ÀÌ·¸°Ô öÀúÇÏ°Ô ¸®¼Ò½º¿¡ ÀÇÁ¸ÇÏ´Â ¾îÇø®ÄÉÀ̼ÇÀº C °°Àº ÄÄÆÄÀÏ ¾ð¾î·Î ¾²¿©Á®¾ß ÇÕ´Ï´Ù. ÀÌ ½© ½ºÅ©¸³Æ® ¹öÀüÀº ±²ÀåÈ÷ ´À¸®°Ô µ¿ÀÛÇÕ´Ï´Ù.
예 3-91. º¹ÀâÇÑ ¹è¿ ¾îÇø®ÄÉÀ̼Ç: ¿¡¶óÅ佺Å׳׽ºÀÇ Ã¼(Sieve of Erastosthenes)
#!/bin/bash
# sieve.sh
# ¿¡¶óÅ佺Å׳׽ºÀÇ Ã¼(Sieve of Erastosthenes)
# ¼Ò¼ö¸¦ ã¾ÆÁÖ´Â °í´ëÀÇ ¾Ë°í¸®Áò
# ÀÌ ½ºÅ©¸³Æ®´Â ¶È°°Àº C ÇÁ·Î±×·¥º¸´Ù
# µÎ ¼¼¹è´Â ´À¸®°Ô µ¿ÀÛÇÕ´Ï´Ù.
LOWER_LIMIT=1
# 1ºÎÅÍ
UPPER_LIMIT=1000
# 1000±îÁö
# (½Ã°£ÀÌ ÁÖüÇÏÁö ¸øÇÒ Á¤µµ·Î ³²¾Æ µ·´Ù¸é
# ÀÌ °ªÀ» ´õ ³ô°Ô Àâ¾Æµµ µË´Ï´Ù.)
PRIME=1
NON_PRIME=0
let SPLIT=UPPER_LIMIT/2
# ÃÖÀûÈ:
# ¿ÀÁ÷ »óÇѰªÀÇ ¹Ý ¸¸ È®ÀÎÇØ º¸·Á°í ÇÒ °æ¿ì
declare -a Primes
# Primes[] Àº ¹è¿ÀÔ´Ï´Ù.
initialize ()
{
# ¹è¿À» ÃʱâÈ
i=$LOWER_LIMIT
until [ $i -gt $UPPER_LIMIT ]
do
Primes[i]=$PRIME
let "i += 1"
done
# ¹«Á˰¡ ¹àÇôÁö±â Àü¿¡´Â ¹è¿ÀÇ ¸ðµç °ªÀÌ À¯ÁË(¼Ò¼ö)¶ó°í °¡Á¤
}
print_primes ()
{
# Primes[]ÀÇ ¿ø¼ÒÁß ¼Ò¼ö¶ó°í ¹àÇôÁø °ÍµéÀ» º¸¿©ÁÝ´Ï´Ù.
i=$LOWER_LIMIT
until [ $i -gt $UPPER_LIMIT ]
do
if [ ${Primes[i]} -eq $PRIME ]
then
printf "%8d" $i
# ¼ýÀÚ´ç 8ÄÀ» ÁÖ¾î ¿¹»Ú°Ô º¸¿©ÁÝ´Ï´Ù.
fi
let "i += 1"
done
}
sift ()
{
# ¼Ò¼ö°¡ ¾Æ´Ñ ¼ö¸¦ °É·¯³À´Ï´Ù.
let i=$LOWER_LIMIT+1
# 1ÀÌ ¼Ò¼öÀΰÍÀº ¾Ë°í ÀÖÀ¸´Ï±î 2ºÎÅÍ ½ÃÀÛÇÕ´Ï´Ù.
until [ $i -gt $UPPER_LIMIT ]
do
if [ ${Primes[i]} -eq $PRIME ]
# ÀÌ¹Ì °É·¯Áø ¼ýÀÚ(¼Ò¼ö°¡ ¾Æ´Ñ ¼ö)´Â °Ç³Ê¶Ý´Ï´Ù.
then
t=$i
while [ $t -le $UPPER_LIMIT ]
do
let "t += $i "
Primes[t]=$NON_PRIME
# ¸ðµç ¹è¼ö¸¦ ¼Ò¼ö°¡ ¾Æ´Ï¶ó°í Ç¥½ÃÇÕ´Ï´Ù.
done
fi
let "i += 1"
done
}
# ÇÔ¼öµéÀ» ¼ø¼´ë·Î ºÎ¸¨´Ï´Ù.
initialize
sift
print_primes
echo
# ÀÌ·±°ÍÀ» ¹Ù·Î ±¸Á¶Àû ÇÁ·Î±×·¡¹ÖÀ̶ó°í ÇÑ´ä´Ï´Ù.
exit 0 |