Wie bekomme ich Zufälligkeit in der Befehlszeile?

11

Wie führe ich zufällig einen Befehl innerhalb der angegebenen Befehlsliste aus? Hilfreich für die zufällige Auswahl von Start-Sound, Hintergrundbild oder Ausführen von Befehlen.

Im Allgemeinen, wenn ich Befehle zur Ausführung wie folgt habe, dann bekomme ich Zufälligkeit:?

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

Dann möchte ich zufällig nur einen Befehl von oben genannten Möglichkeiten ausführen, wenn das Skript ausgeführt wird!

Wie geht das?

    
Pandya 07.07.2014, 07:03
quelle

4 Antworten

22

Die Variable $RANDOM (eigentlich eine Bash-Funktion) gibt eine Zufallszahl von 0 bis einschließlich 32767 zurück.

Normalerweise möchten Sie den Bereich einschränken, indem Sie ihn durch eine Zahl dividieren und den Rest übernehmen, z. B.

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

In diesem vereinfachten Beispiel wird es für jeden Teiler, der sich nicht gleichmäßig in 32768 aufteilt (z. B. alles, was keine Zweierpotenz ist), leicht verzerrt sein, aber in Ihrem Szenario glaube ich nicht, dass Sie d durch eine leichte Verzerrung beunruhigt sein.

Um eine zufällige Datei auszuwählen, würden Sie Ihre Dateien wie folgt benennen:

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

Und dann kannst du mit

ein zufälliges auswählen
# output a random file from file0.jpg to file3.jpg
echo "file$((RANDOM % 4)).jpg"
    
thomasrutter 07.07.2014, 07:18
quelle
7

Nach @neon_overload antwort (mit RANDOM ),
Ich kann RANDOM in Beispielskript folgendermaßen setzen (für 4 Befehle):

#!/bin/bash
random_selection=$((RANDOM % 4))

case $random_selection in

  0)
  <command_1>
  ;;

  1)
  <command_2>
  ;;

  2)
  <command_3>
  ;;

  3)
  <command_4>
  ;;

esac
    
Pandya 07.07.2014 07:47
quelle
2

Wenn Sie die Zufälligkeit über eine externe Site und nicht über eine von Ihrem Computer erzeugte Site möchten, können Sie dieses Skript verwenden:

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

Als Rand (MIN) (MAX) ausführen (vorausgesetzt, Sie speichern unter / usr / bin / rand)

Sie müssen möglicherweise zuerst curl installieren (sudo apt-get install curl), falls es nicht bereits installiert ist.

    
iggyvolz 07.07.2014 18:29
quelle
0

Sie können shuf verwenden Befehl von GNU Coreutils .

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

Beispiel:

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

$ shuf -e Debian Ubuntu Trisquel 
Trisquel
Debian
Ubuntu

Nun, um einen zufälligen Eintrag zu erhalten, können Sie -n 1 verwenden, was die erste Zeile ausgibt.

Beispiel für das Drucken einer Zufallszahl von 1-100:

$ shuf -i 1-100 -n 1
37

Wenn Sie file mit folgendem Inhalt haben:

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

Sie können auch Folgendes tun:

$ shuf file -n 1
command-3
    
Pandya 06.03.2016 10:49
quelle

Tags und Links