如何在Bash中生成一个范围内的随机数?
当前回答
也许我说得有点晚了,但是在Bash中使用jot生成一个范围内的随机数怎么样?
jot -r -p 3 1 0 1
这将生成一个随机的(-r)数字,具有3位小数点后精度(-p)。在本例中,您将得到0到1(1 0 1)之间的一个数字。您还可以打印顺序数据。根据手册,随机数的来源为:
当没有指定种子时,通过arc4random(3)获得随机数,通过 随机(3)当一个种子给出。
其他回答
不需要其他依赖项:
$(((RANDOM % $((upperBound - lowerBound))) + lowerBound))
随机数范围为[lowerBound,upperBound)
请参阅$RANDOM:
$RANDOM是一个内部Bash函数 (不是常量)返回 范围内的伪随机整数 0 - 32767。它不应该被用来 生成加密密钥。
程序的随机分支或是/否;1/0;真/假输出:
if [ $RANDOM -gt 16383 ]; then # 16383 = 32767/2
echo var=true/1/yes/go_hither
else
echo var=false/0/no/go_thither
fi
如果你懒得记16383年
if (( RANDOM % 2 )); then
echo "yes"
else
echo "no"
fi
这里有$RANDOM。 我不知道具体是怎么回事。但它确实有效。 对于测试,您可以执行:
echo $RANDOM
基于@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