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


当前回答

试试你的shell:

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

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

其他回答

生成0到n范围内的随机数(有符号的16位整数)。$RAND变量中的结果集。例如:

#!/bin/bash

random()
{
    local range=${1:-1}

    RAND=`od -t uI -N 4 /dev/urandom | awk '{print $2}'`
    let "RAND=$RAND%($range+1)"
}

n=10
while [ $(( n -=1 )) -ge "0" ]; do
    random 500
    echo "$RAND"
done

0到9之间的随机数。

echo $((RANDOM%10))

如果您使用的是linux系统,您可以从/dev/random或/dev/ urrandom中获取一个随机数。注意,如果没有足够的随机数可用,/dev/random将阻塞。如果你需要速度超过随机性,请使用/dev/ urrandom。

这些“文件”将由操作系统生成的随机数填充。如果你得到的是真随机数还是伪随机数,这取决于系统上/dev/random的实现。真正的随机数是在从鼠标、硬盘、网络等设备驱动程序收集噪声的帮助下生成的。

您可以使用dd从文件中获取随机数

这里有$RANDOM。 我不知道具体是怎么回事。但它确实有效。 对于测试,您可以执行:

echo $RANDOM

使用随机的美元。它通常与简单的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