在 Bash 中生成随机数

Nilesh Katuwal 2023年1月30日
  1. 使用 $RANDOM 变量生成随机数
  2. 使用 shuf 命令生成随机数
  3. 使用 /dev/urandom 生成随机数
  4. 使用 awk 生成随机数
在 Bash 中生成随机数

在 Bash 中,可以使用整数或浮点数来生成随机数。bash 脚本可用于在给定范围或大小内创建随机数。本文演示了在 Bash 中生成随机数的各种方法。

注意
运行以下命令时,你可能会得到不同的随机数输出。

使用 $RANDOM 变量生成随机数

$RANDOM 变量可用于生成随机数或随机值范围在 032767 之间。但是,你可以通过将 $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 生成随机数

awkrand() 函数返回一个 0-1 范围内的随机浮点数。BEGIN 后面的命令将在下一步之前执行。

awk 'BEGIN{x=rand(); print x}'

输出:

0.444937