在 Bash 中生成随机数
Nilesh Katuwal
2023年1月30日
在 Bash 中,可以使用整数或浮点数来生成随机数。bash 脚本可用于在给定范围或大小内创建随机数。本文演示了在 Bash 中生成随机数的各种方法。
注意
运行以下命令时,你可能会得到不同的随机数输出。
使用 $RANDOM
变量生成随机数
$RANDOM
变量可用于生成随机数或随机值范围在 0
和 32767
之间。但是,你可以通过将 $RANDOM
值除以特定值来限制用于生成随机数的数字范围。
要生成 0 到 32767 之间的随机数,请使用以下命令:
$ echo $RANDOM
输出:
28091
你可以通过将 $RANDOM
变量除以剩余值来从特定范围内生成随机数。它包含带有 $
符号的双括号 (())
。
要生成 1 到 100 之间的随机数,请使用以下命令:
$ echo $(( $RANDOM % 100 + 1 ))
输出:
19
由于百分号导致数学运算模数失败,因此永远不会达到数字 100(除法后的余数)。如果随机生成器返回值 100,则模运算将提供值 0。
使用 shuf
命令生成随机数
你可以使用命令 shuf
在 shell 脚本中生成大量数字。
以下命令将创建 0 到 100 之间的单个整数:
$ shuf -i 0-100 -n1
输出:
76
在上述命令中,-i
表示输入范围,-n
表示人数。键 -n
后跟任意正数,表示生成随机数的数。运行以下命令,打印 0 到 100 之间的五个随机数。
$ shuf -i 0-100 -n5
输出:
68
78
24
76
41
使用 /dev/urandom
生成随机数
/dev/urandom
设备文件允许你生成比 $RANDOM
变量更随机的伪随机数。但是,将这些数字放入脚本中的变量需要进一步的工作,例如通过 od
过滤,如示例中所示。
od /dev/urandom -A n -t d -N 1
-t d
选项表示应使用带符号十进制作为输出格式,-N 1
告诉程序从 /dev/urandom
获取一个字节。
输出:
124
使用 awk 生成随机数
awk
的 rand()
函数返回一个 0-1 范围内的随机浮点数。BEGIN
后面的命令将在下一步之前执行。
awk 'BEGIN{x=rand(); print x}'
输出:
0.444937