°í±Þ Bash ½ºÅ©¸³Æà °¡À̵å: Bash¸¦ ÀÌ¿ëÇÑ ½© ½ºÅ©¸³Æà ¿ÏÀü °¡À̵å | ||
---|---|---|
ÀÌÀü | 9Àå. º¯¼ö Àç°ËÅä(Variables Revisited) | ´ÙÀ½ |
Âü°í: $RANDOM Àº bash ³»ºÎ ÇÔ¼ö(»ó¼ö°¡ ¾Æ´Ô)·Î 0¿¡¼ 32767»çÀÌÀÇ Àǻ糼ö(pseudorandom)¸¦ ¸®ÅÏÇÕ´Ï´Ù. $RANDOM Àº ¾ÏÈ£È Å°¸¦ ¹ß»ý ½ÃÅ°´Âµ¥ ¾µ ¼ö ¾ø½À´Ï´Ù.
¿¹ 9-19. ·£´ýÇÑ ¼ýÀÚ ¸¸µé±â
#!/bin/bash # $RANDOM Àº ºÒ¸± ¶§¸¶´Ù ´Ù¸¥ ¹«ÀÛÀ§ Á¤¼ö °ªÀ» ¸®ÅÏÇÕ´Ï´Ù. # ¸íĪ»óÀÇ ¹üÀ§(nominal range): 0 - 32767(16 ºñÆ® ¾çÀÇ Á¤¼ö). MAXCOUNT=10 count=1 echo echo "$MAXCOUNT °³ÀÇ ·£´ýÇÑ ¼ýÀÚ:" echo "-----------------" while [ "$count" -le $MAXCOUNT ] # 10 ($MAXCOUNT) °³ÀÇ ·£´ý Á¤¼ö ¹ß»ý. do number=$RANDOM echo $number let "count += 1" # Ä«¿îÅÍ Áõ°¡. done echo "-----------------" # ¾î¶² ¹üÀ§ÀÇ ·£´ý °ªÀÌ ÇÊ¿äÇÏ´Ù¸é '³ª¸ÓÁö(modulo)' ¿¬»êÀÚ¸¦ ¾²¸é, # ¾î¶² ¼ö¸¦ ³ª´« ³ª¸ÓÁö °ªÀ» ¸®ÅÏÇØ ÁÝ´Ï´Ù. RANGE=500 echo number=$RANDOM let "number %= $RANGE" echo "$RANGE º¸´Ù ÀÛÀº ·£´ýÇÑ ¼ýÀÚ --- $number" echo # ¾î¶² °ªº¸´Ù Å« ·£´ýÇÑ Á¤¼ö°¡ ÇÊ¿äÇÏ´Ù¸é # ±× °ªº¸´Ù ÀÛÀº ¼ö´Â ¹«½ÃÇÏ´Â Å×½ºÆ® ¹®À» °É¸é µË´Ï´Ù. FLOOR=200 number=0 # ÃʱâÈ while [ "$number" -le $FLOOR ] do number=$RANDOM done echo "$FLOOR º¸´Ù Å« ·£´ýÇÑ ¼ýÀÚ --- $number" echo # »óÇÑ°ª°ú ÇÏÇÑ°ª »çÀÌÀÇ ¼ö°¡ ÇÊ¿äÇÏ´Ù¸é À§ÀÇ µÎ Å×Å©´ÐÀ» °°ÀÌ ¾²¸é µË´Ï´Ù. number=0 # ÃʱâÈ while [ "$number" -le $FLOOR ] do number=$RANDOM let "number %= $RANGE" # $number °¡ $RANGE ¾È¿¡ µé¾î¿À°Ô. done echo "$FLOOR ¿Í $RANGE »çÀÌÀÇ ·£´ýÇÑ ¼ýÀÚ --- $number" echo # "Âü"À̳ª "°ÅÁþ"Áß¿¡ Çϳª¸¦ °í¸£µµ·Ï ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. BINARY=2 number=$RANDOM T=1 let "number %= $BINARY" # let "number >>= 14" ´õ ÁÁÀº ºÐÆ÷ÀÇ ·£´ý°ªÀ» ÁÝ´Ï´Ù. # (¸¶Áö¸· µÎ ºñÆ®¸¦ Á¦¿ÜÇÏ°í ¸ðµÎ ¿À¸¥ÂÊÀ¸·Î ½¬ÇÁÆ® ½ÃÅ´). if [ "$number" -eq $T ] then echo "TRUE" else echo "FALSE" fi echo # ÁÖ»çÀ§ ´øÁö±â¸¦ Èä³»³» º¼±î¿ä? SPOTS=7 # 7 ÀÇ ³ª¸ÓÁö(modulo)´Â 0 - 6. DICE=2 ZERO=0 die1=0 die2=0 # Á¤È®ÇÑ È®·üÀ» À§Çؼ µÎ °³ÀÇ ÁÖ»çÀ§¸¦ µû·Î ´øÁý½Ã´Ù. while [ "$die1" -eq $ZERO ] # ÁÖ»çÀ§¿¡ 0Àº ¾øÁÒ. do let "die1 = $RANDOM % $SPOTS" # ù¹ø° ÁÖ»çÀ§¸¦ ±¼¸®°í. done while [ "$die2" -eq $ZERO ] do let "die2 = $RANDOM % $SPOTS" # µÎ¹ø°¸¦ ±¼¸®¸é. done let "throw = $die1 + $die2" echo "µÎ ÁÖ»çÀ§¸¦ ´øÁø °á°ú = $throw" echo exit 0 |
RANDOM ÀÌ ¾ó¸¶³ª ·£´ýÇÒ±î¿ä? ÀÌ°É È®ÀÎÇØ º¸´Â °¡Àå ÁÁÀº ¹æ¹ýÀº RANDOM ÀÌ ¹ß»ý ½ÃÅ°´Â "·£´ý"ÇÑ ¼ýÀÚÀÇ ºÐÆ÷¸¦ ÃßÀûÇÏ´Â ½ºÅ©¸³Æ®¸¦ ¸¸µé¾î º¸´Â °ÍÀÔ´Ï´Ù. ±×·³ RANDOM ÁÖ»çÀ§¸¦ ¸î ¹ø ´øÁ® º¾½Ã´Ù.
¿¹ 9-20. RANDOM À¸·Î ÁÖ»çÀ§¸¦ ´øÁö±â
#!/bin/bash # RANDOM ÀÌ ¾ó¸¶³ª ·£´ýÇÑ°¡? RANDOM=$$ # ½ºÅ©¸³Æ®ÀÇ ÇÁ·Î¼¼½º ID ¸¦ ½á¼ ·£´ý ³Ñ¹ö ¹ß»ý±âÀÇ seed¸¦ ´Ù½Ã »ý¼º. PIPS=6 # ÁÖ»çÀ§´Â ´«ÀÌ 6°³ÁÒ. MAXTHROWS=600 # ½Ã°£ÀÌ ³²¾Æ µ¹¸é ÀÌ ¼ýÀÚ¸¦ ´õ ´Ã·Áº¸¼¼¿ä. throw=0 # ´øÁø ¼ýÀÚ. zeroes=0 # Ãʱâȸ¦ ¾È Çϸé 0ÀÌ ¾Æ´Ï¶ó ³ÎÀÌ µÇ±â ¶§¹®¿¡ ones=0 # 0À¸·Î ÃʱâÈ ÇØ¾ß µË´Ï´Ù. twos=0 threes=0 fours=0 fives=0 sixes=0 print_result () { echo echo "ones = $ones" echo "twos = $twos" echo "threes = $threes" echo "fours = $fours" echo "fives = $fives" echo "sixes = $sixes" echo } update_count() { case "$1" in 0) let "ones += 1";; # ÁÖ»çÀ§¿¡ "0"ÀÌ ¾øÀ¸´Ï±î ÀÌ°É 1À̶ó°í ÇÏ°í 1) let "twos += 1";; # ÀÌ°É 2¶ó°í ÇÏ°í.... µîµî.. 2) let "threes += 1";; 3) let "fours += 1";; 4) let "fives += 1";; 5) let "sixes += 1";; esac } echo while [ "$throw" -lt "$MAXTHROWS" ] do let "die1 = RANDOM % $PIPS" update_count $die1 let "throw += 1" done print_result # RANDOM ÀÌ Á¤¸» ·£´ýÇÏ´Ù¸é °á°ú ºÐÆ÷´Â È®½ÇÈ÷ °í¸£°Ô ³ª¿Ã °ÍÀÔ´Ï´Ù. # $MAXTHROWS °¡ 600 ÀÏ ¶§´Â °¢°¢Àº 100 ¿¡¼ 20 Á¤µµÀÇ Â÷À̸¦ µÎ°í ºÐ»êµÇ¾î¾ß ÇÕ´Ï´Ù. # # ÁÖÀÇÇÒ °ÍÀº RANDOM ÀÌ Àǻ糼ö(pseudorandom) ¹ß»ý±âÀ̱⠶§¹®¿¡ # ÁøÂ¥·Î ·£´ýÇÑ °ÍÀº ¾Æ´Ï¶ó´Â Á¡ÀÔ´Ï´Ù. # ½¬¿î ¿¬½À¹®Á¦ Çϳª ³¾²²¿ä. # ÀÌ ½ºÅ©¸³Æ®¸¦ µ¿Àü 1000 ¹ø µÚÁý´Â °É·Î ¹Ù²ãº¸¼¼¿ä. # "¾Õ"À̳ª "µÚ" Áß¿¡ Çϳª°¡ ³ª¿À°ÚÁÒ? exit 0 |
À§ÀÇ ¿¹Á¦¿¡¼ »ìÆ캻 °Íó·³ RANDOM ¹ß»ý±â°¡ ½ÇÇàµÉ ¶§¸¶´Ù ·£´ý¿ë seed¸¦ "´Ù½Ã" ¸¸µé¾î ÁÖ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. RANDOM¿¡ °°Àº seed¸¦ ¾²¸é °°Àº ¼ø¼ÀÇ ¼ýÀÚ°¡ ¹Ýº¹µË´Ï´Ù(ÀÌ´Â CÀÇ random() ÇÔ¼öÀÇ µ¿ÀÛÀ» ±×´ë·Î ¹Ý¿µÇØ ÁÝ´Ï´Ù).
¿¹ 9-21. RANDOM ¿¡ seed¸¦ ´Ù½Ã ÁöÁ¤ÇØ ÁÖ±â
#!/bin/bash # seeding-random.sh: RANDOM º¯¼ö¿¡ seed Àû¿ë. MAXCOUNT=25 # ¹ß»ý½Ãų ¼ýÀÚ °¹¼ö. random_numbers () { count=0 while [ "$count" -lt "$MAXCOUNT" ] do number=$RANDOM echo -n "$number " let "count += 1" done } echo; echo RANDOM=1 # ·£´ý ³Ñ¹ö ¹ß»ý±â¿¡ RANDOM seed ¼¼ÆÃ. random_numbers echo; echo RANDOM=1 # ¶È°°Àº seed »ç¿ë.... random_numbers # ... ¿ÏÀüÈ÷ ¶È°°Àº ¼ö¿ÀÌ ¹ß»ý. echo; echo RANDOM=2 # ´Ù¸¥ seed ·Î Àç½Ãµµ... random_numbers # ´Ù¸¥ ¼ö¿ ¹ß»ý. echo; echo # RANDOM=$$ ¶ó°í ÇÏ´Â °ÍÀº RANDOM ¿¡ ½ºÅ©¸³Æ®ÀÇ ÇÁ·Î¼¼½º ID·Î seed¸¦ ¼¼ÆÃÇÏ´Â °ÍÀÔ´Ï´Ù. # 'time' À̳ª 'date'·Î ÇÒ ¼öµµ Àְڳ׿ä. # ´õ ¸ÚÁö°Ô ÇØ º¸ÁÒ. SEED=$(head -1 /dev/urandom | od -N 1 | awk '{ print $2 }') # /dev/urandom(½Ã½ºÅÛ¿¡¼ Á¦°øÇÏ´Â Àǻ糼ö "µð¹ÙÀ̽º")¿¡¼ ¾òÀº Àǻ糼ö # ±× ´ÙÀ½ "od"¸¦ ÀÌ¿ëÇؼ Ãâ·Â °¡´ÉÇÑ(8Áø¼ö) ¼ýÀÚ·Î ÀÌ·ç¾îÁø ÁÙ·Î º¯È¯. # ¸¶Áö¸·À¸·Î "awk"¸¦ ½á¼ SEED ¿¡¼ ¾µ ÇÑ °³ÀÇ ¼ýÀÚ¸¦ »Ì¾Æ³¿. RANDOM=$SEED random_numbers echo; echo exit 0 |
Âü°í: /dev/urandom µð¹ÙÀ̽º ÆÄÀÏÀº $RANDOM º¸´Ù ´õ "·£´ý"ÇÑ Àǻ糼ö¸¦ ¹ß»ý ½ÃÄÑÁÝ´Ï´Ù. dd if=/dev/urandom of=targetfile bs=1 count=XX ¶ó°í Çϸé Àß ºÐ»êµÈ °¡»ó·£´ý °ªÀ» °®´Â ÆÄÀÏÀ» ¸¸µé¾î ÁÝ´Ï´Ù. ÇÏÁö¸¸, ÀÌ·± ¼ýÀÚ¸¦ ½ºÅ©¸³Æ®ÀÇ º¯¼ö¿¡ ÇÒ´çÇÏ´Â °ÍÀº od(À§ÀÇ ¿¹Á¦Ã³·³)³ª dd(¿¹ 12-33 Âü°í)·Î ÇÊÅ͸µÀ» ÇÏ´Â µîÀÇ Ã³¸®°¡ ÇÊ¿äÇÕ´Ï´Ù.