• 利用Bash內建變數$RANDOM

在Bash裡面,有一個內建的變數,可以用來產生亂數:

$RANDOM

使用起來很簡單,用echo 叫出來即可:

$ echo $RANDOM
4371
$ echo $RANDOM
20269
$

寫一個簡單的程式,自動產生三個亂數:

$ for i in {1..3}; do echo $RANDOM; done
11434
9696
32237
$

 

$RANDOM 所產生的亂數介於0到32767之間,詳細說明可參考這裡

如果你要的亂數不在這個範圍,可以利用下列方法來產生。以下的函數可以回傳介於兩個數中間的亂數(簡化起見,沒有太多的錯誤檢查,請確定第二個數大於第一個數)

function random_range()
{
    if [ "$#" -lt "2" ]; then
        echo "Usage: random_range <low> <high>"
        return
    fi
    low=$1
    range=$(($2 - $1))
    echo $(($low+$RANDOM % $range))
}

 

執行結果如下:

$ random_range  10
Usage: random_range <low> <high>
$ random_range  10 30
18
$ random_range  10 30
13
$ random_range  10 30
10
$ random_range  10 300
85
$ random_range  10 300
221
$ random_range  10 300
103
$

  • 利用特殊檔案/dev/urandom

Linux有兩個特殊的檔案:/dev/random與/dev/urandom,用來提供kernel產生亂數之用。其中 urandom適合一般使用。

以下這個命令利用od這個命令來產生0~32767的變數(16個bit):

$ od -vAn -N2 -i /dev/urandom
        6484
$ od -vAn -N2 -i /dev/urandom
       25989
$

 

而這個命令可以產生32個bit的變數,範圍在0~2147483645

$ od -vAn -N4 -tu4  /dev/urandom
2981514769
$ od -vAn -N4 -tu4  /dev/urandom
1055285400
$

arrow
arrow
    全站熱搜

    dragonspring 發表在 痞客邦 留言(0) 人氣()