如何在Bash中生成一个范围内的随机数?


当前回答

你可以使用种子,参见文档:

RANDOM=$(date +%s%N | cut -b10-19)
echo $(( $RANDOM % 100 + 1 ))

其他回答

0到9之间的随机数。

echo $((RANDOM%10))

还可以使用shuf(可在coreutils中使用)。

shuf -i 1-100000 -n 1

bash 5.1引入了一个新变量SRANDOM,它从系统的熵引擎中获取随机数据,因此它不是线性的,不能重新种子以获得相同的随机序列。这个变量可以用来代替RANDOM来生成更多的随机数。

$ echo $((1 + SRANDOM % 10))
4

你可以使用种子,参见文档:

RANDOM=$(date +%s%N | cut -b10-19)
echo $(( $RANDOM % 100 + 1 ))

使用随机的美元。它通常与简单的shell算法结合使用很有用。例如,要生成1到10(包括)之间的随机数:

$ echo $((1 + $RANDOM % 10))
3

实际的生成器在variables.c中,即函数brand()。旧版本是一个简单的线性生成器。bash 4.0版本使用了一个引用1985年论文的生成器,这可能意味着它是一个不错的伪随机数来源。我不会将它用于模拟(当然也不会用于加密),但它可能足以用于基本的脚本任务。

如果你在做一些需要大量随机数的事情,你可以使用/dev/random或/dev/urandom(如果它们可用的话):

$ dd if=/dev/urandom count=4 bs=1 | od -t d