如何在命令行中获得随机性?

如何在指定的命令列表中随机执行一个命令? 有助于随机选择启动声音,壁纸或执行命令。

一般情况下,如果我有如下执行命令,那么如何获得随机性?

#!/bin/bash    . . .  

然后我想在脚本运行时从上面的可能性中随机执行一个命令

怎么做?

变量$RANDOM (实际上是一个bash函数)返回0到32767之间的随机数。

您通常希望通过将其除以某个数字来限制其范围并取其余数,例如。

 # output a random number 0 to 3 echo $((RANDOM % 4)) 

在这个简单的例子中,对于没有平均分配到32768的任何除数(例如,任何不是2的幂)的任何除数都会略有偏差,但在你的场景中我认为你不会感到困扰略有偏见。

要选择随机文件,您可以将文件命名为:

 file0.jpg file1.jpg file2.jpg file3.jpg 

然后你可以选择一个随机的

 # output a random file from file0.jpg to file3.jpg echo "file$((RANDOM % 4)).jpg" 

根据@neon_overload的答案(使用RANDOM ),
我可以将RANDOM放在示例脚本中,如下所示(4个命令):

 #!/bin/bash random_selection=$((RANDOM % 4)) case $random_selection in 0)  ;; 1)  ;; 2)  ;; 3)  ;; esac 

如果您希望通过外部站点而不是计算机生成的随机性,则可以使用此脚本:

 curl "http://www.random.org/integers/?num=1&min=$1&max=$2&col=1&base=10&format=plain&rnd=new" 

以rand(MIN)(MAX)运行(假设您保存为/ usr / bin / rand)

如果尚未安装curl,则可能必须首先安装curl(sudo apt-get install curl)。

您可以使用GNU coreutils中的 shuf命令。

 NAME shuf - generate random permutations SYNOPSIS shuf [OPTION]... [FILE] shuf -e [OPTION]... [ARG]... shuf -i LO-HI [OPTION]... DESCRIPTION Write a random permutation of the input lines to standard output 

例:

 $ shuf -i 1-5 4 1 2 5 3 

 $ shuf -e Debian Ubuntu Trisquel Trisquel Debian Ubuntu 

现在,要获得一个随机条目,您可以使用-n 1输出第一行。

从1-100打印随机数的示例:

 $ shuf -i 1-100 -n 1 37 

如果您file了以下内容:

 $ cat file command-1 command-2 command-3 command-4 command-5 

您还可以执行以下操作:

 $ shuf file -n 1 command-3