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 |