2011-05-13 64 views

回答

11

如果你已經有你的隨機數,你可以說

var=$RANDOM 
var=$[ $var % 13 ] 

0..12得到的數字。

編輯: 如果你想從$x產生號碼$y,你可以很容易地修改此:

var=$[ $x + $var % ($y + 1 - $x) ] 
3

在這裏你去

echo $(($RANDOM % 12)) 

我希望這有助於。

+1

糾正︰$(($ RANDOM%13)) – 2011-05-13 13:56:05

+0

是的,同意,謝謝。我很高興能先回答一個簡單的問題,但我沒有仔細檢查!感謝2票(無論你是誰);-) – shellter 2011-05-13 14:03:23

+0

注意內部$是可選的,因爲發現的非數字字符串不能有變量名稱。 – jlliagre 2011-05-13 14:45:20

7

0和12之間(包括):

echo $((RANDOM % 13)) 

編輯:請注意,此方法不嚴格正確。由於32768不是13的倍數,因此生成0到8的機率要比其餘數字(9到12)略高(0.04%)。

這裏是外殼的功能,應該給一個平衡輸出:

randomNumber() 
{ 
    top=32768-$((32768%($1+1))) 
    while true; do 
    r=$RANDOM 
    [ r -lt $top ] && break 
    done 
    echo $((r%$1)) 
} 

當然,更好的東西應該被設計如果範圍的高值利用現有的SHUF超過32767

6

替代Linux操作系統(或者coreutils的是精確的):

var=$(shuf -i0-12 -n1) 
+0

呃。那麼你的腳本是不可移植的。 – 2016-07-08 00:26:26

1

在FreeBSD和其他可能的BSD系統可以使用:

jot -r 3 0 12 

這將創建3從0到12的隨機數,包含性。

另一種選擇,如果你只需要每個腳本一個隨機數,你可以這樣做:

var=$(($$ % 13)) 

這將使用腳本作爲種子,應該大部分隨機的PID。範圍將再次從0到12.

+0

Mac OS X也不錯。但不是Linux,所以這不是便攜式的。 – 2016-07-08 00:28:14