在 Bash 中生成隨機數

Nilesh Katuwal 2023年1月30日
  1. 使用 $RANDOM 變數生成隨機數
  2. 使用 shuf 命令生成隨機數
  3. 使用 /dev/urandom 生成隨機數
  4. 使用 awk 生成隨機數
在 Bash 中生成隨機數

在 Bash 中,可以使用整數或浮點數來生成隨機數。bash 指令碼可用於在給定範圍或大小內建立隨機數。本文演示了在 Bash 中生成隨機數的各種方法。

注意
執行以下命令時,你可能會得到不同的隨機數輸出。

使用 $RANDOM 變數生成隨機數

$RANDOM 變數可用於生成隨機數或隨機值範圍在 032767 之間。但是,你可以通過將 $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 生成隨機數

awkrand() 函式返回一個 0-1 範圍內的隨機浮點數。BEGIN 後面的命令將在下一步之前執行。

awk 'BEGIN{x=rand(); print x}'

輸出:

0.444937