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

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

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

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

#!/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

相关内容