Shell脚本随机数生成

时间:2011-05-13 13:31:33

标签: bash shell variables random random-sample

var=$RANDOM会创建随机数,但我怎样才能指定0到12之间的范围?

6 个答案:

答案 0 :(得分:11)

如果您已经有随机数,可以说

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

0..12获取数字。

修改 如果您想生成从$x$y的数字,可以轻松修改此内容:

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

答案 1 :(得分:8)

0到12之间(包括):

echo $((RANDOM % 13))

修改:请注意,此方法并不严格正确。因为32768不是13的倍数,所以产生0到8的几率略高于(0.04%)剩余数字(9到12)。

这是shell函数,应该提供平衡输出:

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

当然,如果范围的较高值超过32767,则应设计更好的东西。

答案 2 :(得分:6)

在linux上使用shuf的替代方案(或者准确地说是coreutils):

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

答案 3 :(得分:3)

你去吧

echo $(( $RANDOM % 12 ))

我希望这会有所帮助。

答案 4 :(得分:1)

本文档提供了一些使用RANGE和FLOOR的示例,可能会有所帮助:http://tldp.org/LDP/abs/html/randomvar.html

答案 5 :(得分:1)

在FreeBSD以及可能使用的其他BSD上:

jot -r 3 0 12

这将创建从0到12的3个随机数。

另一种选择,如果每个脚本只需要一个随机数,则可以执行以下操作:

var=$(( $$ % 13 ))

这将使用脚本的PID作为种子,它应该是随机的。范围将再次从0到12。