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


当前回答

也许我说得有点晚了,但是在Bash中使用jot生成一个范围内的随机数怎么样?

jot -r -p 3 1 0 1

这将生成一个随机的(-r)数字,具有3位小数点后精度(-p)。在本例中,您将得到0到1(1 0 1)之间的一个数字。您还可以打印顺序数据。根据手册,随机数的来源为:

当没有指定种子时,通过arc4random(3)获得随机数,通过 随机(3)当一个种子给出。

其他回答

试试你的shell:

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

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

基于@Nelson, @Barun和@Robert的精彩回答,这里有一个生成随机数的Bash脚本。

可以生成你想要的数字。 每个数字都是由/dev/urandom单独生成的,这比Bash内置的$RANDOM要好得多

#!/usr/bin/env bash

digits=10

rand=$(od -A n -t d -N 2 /dev/urandom |tr -d ' ')
num=$((rand % 10))
while [ ${#num} -lt $digits ]; do
  rand=$(od -A n -t d -N 1 /dev/urandom |tr -d ' ')
  num="${num}$((rand % 10))"
done
echo $num

不需要其他依赖项:

$(((RANDOM % $((upperBound - lowerBound))) + lowerBound))

随机数范围为[lowerBound,upperBound)

我喜欢这个技巧:

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

...

0到9之间的随机数。

echo $((RANDOM%10))