Variable wird zufällig aus drei Zahlen ausgewählt (10, 100 und 1000)

Variable wird zufällig aus drei Zahlen ausgewählt (10, 100 und 1000)

Ist es möglich, eine Variable zu haben, die eine Zufallszahl aus drei vorher festgelegten Zahlen auswählt?

Probe:

var= 10 or 100 or 1000

Antwort1

Verwenden Sie ein Array, um die Werte zu speichern und wählen Sie mithilfe der integrierten Variable zwischen ihnen aus $RANDOM. Beispiel:

x[0]=10     # One decade
x[1]=100    # One century
x[2]=1000   # One millennium

for ((i=1; i < 20; ++i)); do echo -n " ${x[$RANDOM%3]}"; done; echo
1000 10 10 10 10 100 10 100 100 10 10 100 100 100 10 1000 1000 1000 10

Die Qualität der Zufälligkeit wird nicht die bestmögliche sein (lesen Sie /dev/urandomdazu Bytes von), aber für ein Skript sollte sie mehr als gut genug sein.

Anmerkung 1:Wie in den Kommentaren angemerkt wurde, kann man statt der individuellen Initialisierung der Array-Elemente natürlich auch ein Array-Literal verwenden: x=(10 100 1000).

Anmerkung 2:Anstatt die Anzahl der Elemente im Array fest zu codieren, kann ein Radom-Element durch extrahiert werden ${x[$RANDOM%${#x[@]}]}.

Antwort2

Wenn SieSchlag(oderzshoderksh93) können Sie einfach Folgendes tun:

echo "$((10**($RANDOM%3+1)))"

oder

var=$((10**($RANDOM%3+1)))

um es zuzuordnenvar

Antwort3

Sie können auch die GNU Coreutils verwendenshufDienstprogramm:

a=$(shuf -n1 -e 10 100 1000)

Die Verwendung RANDOMgemäß den anderen Antworten ist jedoch mit ziemlicher Sicherheit schneller.

Antwort4

Hier ist eine etwas kryptische Möglichkeit:

printf -v var '1%0*d' $(( RANDOM % 3 + 1 )) 0

Dadurch wird der Zufallswert nach $varBedarf zugewiesen. Die printfFormatzeichenfolge lautet 1%0Nd- dies bewirkt, dass mit führenden Nullen 0gedruckt wird , wobei eine zufällige Ganzzahl im Intervall ist .NN[1,3]

verwandte Informationen