![如何在命令行中获取随机性?](https://linux22.com/image/857519/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%91%BD%E4%BB%A4%E8%A1%8C%E4%B8%AD%E8%8E%B7%E5%8F%96%E9%9A%8F%E6%9C%BA%E6%80%A7%EF%BC%9F.png)
如何在指定的命令列表中随机执行一条命令?有助于随机选择启动声音、壁纸或执行命令。
一般来说,如果我有如下执行命令,那么我如何获得随机性:?
#!/bin/bash
<command_1>
<command_2>
<command_3>
.
.
.
<command_n>
然后我想随机仅执行一个命令从上述脚本运行时的可能性来看!
怎么做?
答案1
该变量$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"
答案2
根据@neon_overload 的回答(使用RANDOM
),
我可以RANDOM
输入如下示例脚本(针对 4 个命令):
#!/bin/bash
random_selection=$((RANDOM % 4))
case $random_selection in
0)
<command_1>
;;
1)
<command_2>
;;
2)
<command_3>
;;
3)
<command_4>
;;
esac
答案3
如果您希望通过外部站点而不是由您的计算机生成的随机性,则可以使用此脚本:
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(sudo apt-get install curl)。
答案4
您可以使用shuf
命令来自GNU 核心实用程序。
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