Bash Shell脚本随机数生成

Bash Shell脚本随机数生成,bash,shell,variables,random,random-sample,Bash,Shell,Variables,Random,Random Sample,var=$RANDOM创建随机数,但是如何指定一个介于0和12之间的范围呢?给你 echo $(( $RANDOM % 12 )) 我希望这有帮助。如果你已经有了随机数,你可以说 var=$RANDOM var=$[ $var % 13 ] 从0..12获取数字 编辑: 如果要生成从$x到$y的数字,可以轻松修改: var=$[ $x + $var % ($y + 1 - $x) ] 本文档中有一些使用类似范围和楼层的示例,可能会有所帮助:介于0和12之间(包括): 编辑:请注意,此方法

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

给你

echo $(( $RANDOM % 12 ))

我希望这有帮助。

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

var=$RANDOM
var=$[ $var % 13 ]
0..12
获取数字

编辑: 如果要生成从
$x
$y
的数字,可以轻松修改:

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

本文档中有一些使用类似范围和楼层的示例,可能会有所帮助:

介于0和12之间(包括):


编辑:请注意,此方法并非严格正确。因为32768不是13的倍数,所以生成0到8的几率比其余数字(9到12)稍高(0.04%)

以下是应提供平衡输出的shell函数:

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

当然,如果范围的更高值超过32767,则应该设计更好的方法。

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


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

jot -r 3 0 12
这将创建0到12之间的
3
随机数

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

var=$(( $$ % 13 ))

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

更正:$($RANDOM%13))是的,同意,谢谢。我很兴奋能首先回答一个简单的问题,我没有进行足够的测试!谢谢你的两张赞成票(无论你是谁);-)注意:内部$是可选的,因为只能找到变量名.Meh。那么你的脚本是不可移植的。Mac OS X也有jot。但不是Linux,所以这是不可移植的。
jot -r 3 0 12
var=$(( $$ % 13 ))