在 Bash 中生成隨機數
Nilesh Katuwal
2023年1月30日
在 Bash 中,可以使用整數或浮點數來生成隨機數。bash 指令碼可用於在給定範圍或大小內建立隨機數。本文演示了在 Bash 中生成隨機數的各種方法。
注意
執行以下命令時,你可能會得到不同的隨機數輸出。
使用 $RANDOM
變數生成隨機數
$RANDOM
變數可用於生成隨機數或隨機值範圍在 0
和 32767
之間。但是,你可以通過將 $RANDOM
值除以特定值來限制用於生成隨機數的數字範圍。
要生成 0 到 32767 之間的隨機數,請使用以下命令:
$ echo $RANDOM
輸出:
28091
你可以通過將 $RANDOM
變數除以剩餘值來從特定範圍內生成隨機數。它包含帶有 $
符號的雙括號 (())
。
要生成 1 到 100 之間的隨機數,請使用以下命令:
$ echo $(( $RANDOM % 100 + 1 ))
輸出:
19
由於百分號導致數學運算模數失敗,因此永遠不會達到數字 100(除法後的餘數)。如果隨機生成器返回值 100,則模運算將提供值 0。
使用 shuf
命令生成隨機數
你可以使用命令 shuf
在 shell 指令碼中生成大量數字。
以下命令將建立 0 到 100 之間的單個整數:
$ shuf -i 0-100 -n1
輸出:
76
在上述命令中,-i
表示輸入範圍,-n
表示人數。鍵 -n
後跟任意正數,表示生成隨機數的數。執行以下命令,列印 0 到 100 之間的五個隨機數。
$ shuf -i 0-100 -n5
輸出:
68
78
24
76
41
使用 /dev/urandom
生成隨機數
/dev/urandom
裝置檔案允許你生成比 $RANDOM
變數更隨機的偽隨機數。但是,將這些數字放入指令碼中的變數需要進一步的工作,例如通過 od
過濾,如示例中所示。
od /dev/urandom -A n -t d -N 1
-t d
選項表示應使用帶符號十進位制作為輸出格式,-N 1
告訴程式從 /dev/urandom
獲取一個位元組。
輸出:
124
使用 awk 生成隨機數
awk
的 rand()
函式返回一個 0-1 範圍內的隨機浮點數。BEGIN
後面的命令將在下一步之前執行。
awk 'BEGIN{x=rand(); print x}'
輸出:
0.444937