需要隨機數

需要隨機數

我需要一個命令列腳本來產生 1 到 6 之間的隨機整數。
幾個月前我正在使用“bc”來解決這個問題,但從未讓它完全工作。從那時起我就忘記我去了哪裡。

我用它來更改 crontab 腳本,以便它不會總是每 15 分鐘運行一次,而是隨機運行一次(15+-3 分鐘)。 IE。將 crontab 更改為每 12 分鐘一次,然後在運行腳本之前在腳本中休眠 1-6 分鐘(這基本上是一個用於檢查網頁狀態的 wget)。

答案1

見人猛擊,參數部分,外殼變數小節:

RANDOM Each time this parameter is referenced, a random integer between
       0 and 32767 is generated.  The sequence of random numbers may be
       initialized by assigning a value to RANDOM.  If RANDOM is unset,
       it loses its special properties, even if it is subsequently
       reset.

若要將值限制為 1..6 間隔,請使用表達式$((RANDOM%6+1))。 1

或者您可以/dev/urandom如下使用:

tr -dc '1-6' < /dev/urandom | head -c 1

答案2

我可以提出一個自訂線性同餘隨機產生器或 X(n+1) = (343*X(n) ) % M17 其中,M17= 2^17 - 1 = 131071 是梅森素數 (p=17)。偽隨機序列均勻分佈,範圍為 [0,131070],那麼您可以將範圍限制為 [1,6[,如下所示: Z6 = 6*X(n)/M17 + 1

範例程式碼:

#!/bin/bash
M=6    #change this if you need different ranges
let "z=(343*10#`date +%N`)%131071"
let "z=$M*z/131071+1"
echo $z

這是一個一次性隨機產生器。如果您需要隨機序列,則種子10#date +%N應僅使用一次來啟動,並且生成器應在循環中使用。在 Ubuntu 12.04 LTS 上測試。玩得開心!

相關內容