7

var=$RANDOM创建随机数,但我如何指定一个介于 0 到 12 之间的范围?

4

6 回答 6

12

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

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

从中获取数字0..12

编辑: 如果你想从 to 产生数字$x$y你可以很容易地修改这个:

var=$[ $x + $var % ($y + 1 - $x) ]
于 2011-05-13T13:34:44.630 回答
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,则应该设计更好的东西。

于 2011-05-13T13:37:46.357 回答
6

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

var=$(shuf -i0-12 -n1)
于 2011-05-13T14:44:35.250 回答
3

干得好

echo $(( $RANDOM % 12 ))

我希望这有帮助。

于 2011-05-13T13:34:36.403 回答
1

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

于 2011-05-13T13:35:18.613 回答
1

在 FreeBSD 和可能的其他 BSD 上,您可以使用:

jot -r 3 0 12

这将创建3从 0 到 12 的随机数(含)。

另一种选择,如果每个脚本只需要一个随机数,你可以这样做:

var=$(( $$ % 13 ))

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

于 2014-10-14T05:10:17.610 回答