Shell脚本随机数生成

the*_*ux4 7 random variables bash shell random-sample

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

bit*_*ask 11

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

var=$RANDOM
var=$[ $var % 13 ]
Run Code Online (Sandbox Code Playgroud)

从中获取数字0..12.

编辑: 如果您想从产生的数字$x$y,你可以很容易地修改此:

var=$[ $x + $var % ($y + 1 - $x) ]
Run Code Online (Sandbox Code Playgroud)


jll*_*gre 8

0到12之间(包括):

echo $((RANDOM % 13))
Run Code Online (Sandbox Code Playgroud)

编辑:请注意,此方法并不严格正确.因为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))
}
Run Code Online (Sandbox Code Playgroud)

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


pix*_*eat 6

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

var=$(shuf -i0-12 -n1)
Run Code Online (Sandbox Code Playgroud)

  • 咩.那么你的脚本不可移植. (2认同)