我需要一個命令列腳本來產生 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 上測試。玩得開心!