在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 /