在Bash Shell脚本中生成1到10之间的随机数

时间:2012-01-24 14:49:05

标签: bash

如何在Bash Shell Script中生成1到10之间的包含性随机数?

$(RANDOM 1+10)吗?

6 个答案:

答案 0 :(得分:275)

$(( ( RANDOM % 10 )  + 1 ))

编辑。根据评论将括号更改为括号。 http://web.archive.org/web/20150206070451/http://islandlinux.org/howto/generate-random-numbers-bash-scripting

答案 1 :(得分:71)

最简单的解决方案是使用允许您直接指定范围的工具,例如 shuf

shuf -i1-10 -n1

如果你想使用$RANDOM,那么丢弃0 ... 32767中的最后8个数字会更精确,只需将其视为0 ... 32759,因为取0 ... 32767 mod 10你得到以下分布

0-8 each: 3277 
8-9 each: 3276

因此,稍慢但更精确的是

while :; do ran=$RANDOM; ((ran < 32760)) && echo $(((ran%10)+1)) && break; done 

答案 2 :(得分:29)

要使用bash生成随机数,请使用$ RANDOM内部Bash函数。请注意,$ RANDOM不应用于生成加密密钥。 $ RANDOM是使用您当前的进程ID(PID)和自1970年以来经过的秒数定义的当前时间/日期生成的。

 echo $RANDOM % 10 + 1 | bc

答案 3 :(得分:22)

您也可以使用/ dev / urandom:

grep -m1 -ao '[0-9]' /dev/urandom | sed s/0/10/ | head -n1

答案 4 :(得分:16)

要生成范围:{0,..,9}

r=$(( $RANDOM % 10 )); echo $r

要生成范围:{40,..,49}

r=$(( $RANDOM % 10 + 40 )); echo $r

答案 5 :(得分:-5)

以下是$ RANDOM和/ dev / urandom都不可用的伪随机生成器的示例

  

回显$(日期+%S)| grep -o。$ | sed s / 0/10 /