コマンドラインでランダム性を取得するにはどうすればよいですか?


11

指定されたコマンドリスト内の1つのコマンドをランダムに実行する方法 起動音、壁紙のランダムな選択、またはコマンドの実行に役立ちます。

一般的に、次のように実行するコマンドがある場合、ランダム性を取得するにはどうすればよいですか?

#!/bin/bash
<command_1>
<command_2>
<command_3>
.
.
.
<command_n>

次に、スクリプトの実行時に上記の可能性から1つのコマンドのみをランダム実行します!

どうやってするか?



私はすでにとして追加@Parto 答えの前に
Pandya

私は答えようとはしていませんでしたが、それが使用できる例を示していました。
パート14

回答:


21

変数$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"

1
あなたはそれをあなた自身の答えとして投稿したいと思うかもしれません-それはあなたに評判を得るかもしれません。
thomasrutter 14

の有用な使用RANDOM、私は受け入れました!
パンディア14

1
RANDOM%Nは、RANDOM(32768)の可能な値の数がNで割り切れない限り、等しい分布にはならないことに注意してください。 Nは2です。$ RANDOM%2が0を生成する方法は3つあります($ RANDOMが0、2、4を生成する場合)が、1(1、3)を生成する方法は2つあります。均等な分布の場合、32767より小さいNの最大の倍数を見つけ、それより大きいランダム値を無視する必要があります。4より大きい5を無視する量をいただきたい前の例では、
Doval

@ドーヴァル私は答えで言った、あなたはそれを見ましたか?
トーマスラッター14

@neon_overload私の悪い、私はそのビットを見逃した。
ドーバル14

7

(を使用してRANDOM)@neon_overloadの回答によれば、次のようにスクリプトの例を挿入
でき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

2

コンピューターによって生成されたものではなく、外部サイトを介してランダム性が必要な場合は、次のスクリプトを使用できます。

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)。


0

GNU coreutilsshufからコマンドを使用できます。

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

これで、1つのランダムエントリを取得するために、-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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.