Gibt es die Möglichkeit in ein Bash Skript einen Zufallsgenerator einzubauen, der aus festgelegten Variablen eine Zufällige ausgibt?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Hallo

Gibt es die Möglichkeit in ein Bash Skript einen Zufallsgenerator einzubauen, der aus festgelegten Variablen eine Zufällige ausgibt?

Ja, das geht am Einfachsten mit einer Datei, nennen wir sie mittagessen und dem Beispielinhalt folgendermaßen befüllt:

Ikea
Döner
Asia
Bäcker
Fisch
Fleisch

Dann einfach so eine zufällige Zeile auswählen:

cat mittagessen|sort --random-sort | head -n 1

Die Einschränkungen musst Du dann nur mit einer if-Anweisung eingrenzen.

Linuxhase

Zufallsgenerator

In bash kannst einfach $RANDOM nehmen - jedes mal, wenn du die Variable ließt steht da neuer Wert drinnen.

Willst Zahlen von 0-3 (da nur 4 Auswahlmöglichkeiten), nimmst den modulo-Trick (also Zufallszahl modulo 4 nehmen) - bestimmt schon mal gesehen.

Bash und Mathe - meiner Meinung nach am schönsten - die doppelten (( )). Also

$(($RANDOM%4))

liefert dir deine Zufallszahl von 0 bis 3.

Desweiteren hab ich einen Arbeitskollegen der kein Ikea mag und einen der keinen Döner mag.

Das machts interessant. Am schönsten wahrscheinlich, wenn du eine funktion schreibst und mit Arrays arbeitest.

http://tldp.org/LDP/abs/html/functions.html

http://tldp.org/LDP/abs/html/arrays.html

Also:

Erstellst Array "Ikea, Döner, Asiamann, Bäcker" und einen zweiten "Asiamann, Bäcker".

Dann implementierst eine bash-funktion: "returnRandomElementOfArray" - und rufst die entweder mit Array1 oder Array2 auf.

Und da will ich dir jetzt nicht den ganzen Spaß nehmen ;). Kannst dich ja melden, wenn du irgendwo nicht weiterkommst.

Gruß, Tuxgamer

Danke erstmal :D so werd ichs morgen mal probieren, hab das skript leider nicht hier, nur auf arbeit. 

1
@Justinzockt99

Du brauchst aber mindestens 4 Arrays!

Warum?

Nehmen wir an wir haben 3 Mitarbeiter: Hans, Peter und Michael

Peter mag alles, Michael kein Ikea und Hans kein Döner!

Wenn Hans alleine geht, gibt es zu Auswahl:
Chinese, Bäcker, Ikea

Wenn Michael alleine geht:
Chinese, Bäcker, Döner

Wenn Peter alleine geht:
Döner, Ikea, Chinese, Bäcker

Wenn alle gehen:
Bäcker, Chinese!

1

Hast du kein Beispiel parat das wir sehen, wie weit du denn überhaupt bist?=)

Du kannst auch Zahlen zwischen 1 und 5 generieren lassen (RANDOM) und diese Zahlen den Variablen zuweisen

1=Döner
2=IKEA
3=...

und dadurch dann alles wählen lassen.

Wäre eigentlich schon die Lösung deines 1. Problems ;)

Das 2. Problem, dass jemand etwas nicht mag, müsstest du wohl mit einbeziehen, in dem du auswählen musst welche Mitarbeiter denn anwesend sind.

Per Checkliste etc. kannst du ja alle an hacken und sagen:

if [ "$checkliste" = "Mitarbeiter" ]; then

Döner, Pizza,....

else

Döner, IKEA, Pizza

fi

Grüße,

iMPerFekTioN

Oh auch ne gute idee, beispiel kann ich euch morgen geben :)

1
@Justinzockt99

Versuchs mal so..

Voraussetzung: kdialog ist installiert!

#!/bin/bash
auswahl=$( kdialog --checklist "Wähle die Mitarbeiter aus" rudi "Rudi" off bernd "Bernd" off melle "Melissa" off)
echo $auswahl | sed s/\"//g

if [[ "$auswahl" == *"rudi"* ]] && [[ "$auswahl" == *"melle"* ]] && [[ "$auswahl" == *"bernd"* ]]; then
echo "no"
array[0]="Bäcker"
array[1]="Chinetzen"
array[2]="Döner"
array[3]="Ikea"

size=${#array[@]}
index=$(($RANDOM % $size))
echo ${array[$index]}

elif [[ "$auswahl" == *"rudi"* ]] && [[ "$auswahl" == *"melle"* ]]; then
echo "yes3"
array[0]="Bäcker"
array[1]="Chinetzen"

size=${#array[@]}
index=$(($RANDOM % $size))
echo ${array[$index]}

elif [[ "$auswahl" == *"rudi"* ]]; then
echo "yes2"
array[0]="Bäcker"
array[1]="Chinetzen"
array[2]="Döner"

size=${#array[@]}
index=$(($RANDOM % $size))
echo ${array[$index]}

elif [[ "$auswahl" == *"melle"* ]] ; then
echo "yes1"
array[0]="Bäcker"
array[1]="Chinetzen"
array[2]="Ikea"

size=${#array[@]}
index=$(($RANDOM % $size))
echo ${array[$index]}

fi
1
@Justinzockt99

FALLS du Linux benutzt, kannst du das mit

sudo apt-get install kdialog

installieren!

Sonst kannst du das auch so, ohne Dialog abfragen, hier ist jetzt aber wichtig das die Namen korrekt geschrieben werden!:

#!/bin/bash

echo "Bitte gib die Namen der Mitarbeiter ein, die heute mit zum Essen kommen wollen!"
read auswahl


if [[ "$auswahl" == *"rudi"* ]] && [[ "$auswahl" == *"melle"* ]] && [[ "$auswahl" == *"bernd"* ]]; then
echo "no"
array[0]="Bäcker"
array[1]="Chinetzen"
array[2]="Döner"
array[3]="Ikea"

size=${#array[@]}
index=$(($RANDOM % $size))
echo ${array[$index]}

elif [[ "$auswahl" == *"rudi"* ]] && [[ "$auswahl" == *"melle"* ]]; then
echo "yes3"
array[0]="Bäcker"
array[1]="Chinetzen"

size=${#array[@]}
index=$(($RANDOM % $size))
echo ${array[$index]}

elif [[ "$auswahl" == *"rudi"* ]]; then
echo "yes2"
array[0]="Bäcker"
array[1]="Chinetzen"
array[2]="Döner"

size=${#array[@]}
index=$(($RANDOM % $size))
echo ${array[$index]}

elif [[ "$auswahl" == *"melle"* ]] ; then
echo "yes1"
array[0]="Bäcker"
array[1]="Chinetzen"
array[2]="Ikea"

size=${#array[@]}
index=$(($RANDOM % $size))
echo ${array[$index]}

fi
0

Was möchtest Du wissen?