在Bash Shell脚本中生成1到10之间的随机数
如何在Bash Shell脚本中生成1到10之间的随机数字?
会是$(RANDOM 1+10)
吗?
$(( ( RANDOM % 10 ) + 1 ))
编辑。 根据评论将括号改为括号。 http://web.archive.org/web/20150206070451/http://islandlinux.org/howto/generate-random-numbers-bash-scripting
最简单的解决scheme是使用工具,它允许你直接指定范围,如gnu 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
用bash生成随机数使用$ RANDOM内部Bash函数。 请注意,不应该使用$ RANDOM来生成encryption密钥。 $ RANDOM是通过使用您当前的进程ID(PID)和自1970年以来经过的秒数所定义的当前时间/date生成的。
echo $RANDOM % 10 + 1 | bc
你也可以使用/ dev / urandom:
grep -m1 -ao '[0-9]' /dev/urandom | sed s/0/10/ | head -n1
要在范围内生成:{0,…,9}
r=$(( $RANDOM % 10 )); echo $r
要在范围内生成:{40,…,49}
r=$(( $RANDOM % 10 + 40 )); echo $r
这里是伪随机生成器的例子,当$ RANDOM和/ dev / urandom都不可用时
echo $(date +%S)| grep -o。$ | sed s / 0/10 /