如何在命令行中获得随机性?
如何在指定的命令列表中随机执行一个命令? 有助于随机选择启动声音,壁纸或执行命令。
一般情况下,如果我有如下执行命令,那么如何获得随机性?
#!/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