如何使用 bash 将变量设置为随机值

如何使用 bash 将变量设置为随机值

在程序中,我需要将变量设置为 0 或 1 的随机值。

我不知道该怎么做,谷歌搜索也没有成功。

答案1

一种简单的方法是使用$RANDOM来检索 [0; 32767] 范围内的伪随机 16 位整数。您可以通过计算随机数的模 2 将其简单地转换为 [0; 1]:

echo $(( $RANDOM % 2 ))

有关 Bash 的更多信息$RANDOMhttp://www.tldp.org/LDP/abs/html/randomvar.html

通过这个简单的构造,您可以轻松地使用随机性构建强大的脚本,就像在这个漫画中一样......

承诺条 - 俄罗斯轮盘赌

答案2

你可以使用shuf

DESCRIPTION
     Write a random permutation of the input lines to standard output.

     -i, --input-range=LO-HI
            treat each number LO through HI as an input line
     -n, --head-count=COUNT
            output at most COUNT lines

例子:

$ foo=$(shuf -i0-1 -n1)
$ echo $foo
1
$ foo=$(shuf -i0-1 -n1)
$ echo $foo
0
$ foo=$(shuf -i0-1 -n1)
$ echo $foo
0
$ foo=$(shuf -i0-1 -n1)
$ echo $foo
1

答案3

怎么样:

#!/bin/bash
r=$(($RANDOM % 2))
echo $r

甚至:

r=$(($(od -An -N1 -i /dev/random) % 2))

也许:

r=$(seq 0 1 | sort -R  | head -n 1)

或者更简单的说法是:

r=$(($(head -128 /dev/urandom | cksum | cut -c1-10) % 2))

并且:

r=$(apg -a 1 -M n -n 1 -m 8 -E 23456789  | cut -c1)

也:

r=$((0x$(cut -c1-1 /proc/sys/kernel/random/uuid) % 2))

答案4

与现有答案相比,此脚本没有任何优势。仅用于娱乐目的...

从中获取一个字节/dev/urandom(尽管一般不建议向控制台发送任意二进制字符,因为它可能会产生意外/令人困惑的结果):

head -c 1 /dev/urandom

并将其转化为十进制数:

head -c 1 /dev/urandom | od -An -t u1

并得出除以 2 后的余数:

echo $((`head -c 1 /dev/urandom | od -An -t u1` % 2))

相关内容