2011-05-13 147 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