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


当前回答

没有模块化的纯Bash随机数

lowerRange=10   # inclusive
upperRange=20   # exclusive

randomNumber=$(( RANDOM * ( upperRange - lowerRange) / 32767 + lowerRange ))

其他回答

我喜欢这个技巧:

echo ${RANDOM:0:1} # random number between 1 and 9
echo ${RANDOM:0:2} # random number between 1 and 99

...

请参阅$RANDOM:

$RANDOM是一个内部Bash函数 (不是常量)返回 范围内的伪随机整数 0 - 32767。它不应该被用来 生成加密密钥。

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

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

试试你的shell:

$ od -A n -t d -N 1 /dev/urandom

这里,-t d指定输出格式应该是带符号的十进制;-N 1表示从/dev/ urrandom读取一个字节。

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

shuf -i 1-100000 -n 1