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

问题描述 投票:0回答:6

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

会是

$(RANDOM 1+10)
吗?

bash shell random
6个回答
388
投票
$(( ( RANDOM % 10 )  + 1 ))

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


120
投票

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

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 

44
投票

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

 echo $RANDOM % 10 + 1 | bc

33
投票

您还可以使用/dev/urandom:

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

25
投票

在范围内生成:{0,..,9}

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

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

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


-6
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.