2016-09-21 4 views
0

ich eine Zufallszahl aus gegebener ListeBash Zufallszahl aus Pool von Zahlen

Zum Beispiel erzeugen will, wenn ich den Zahlen

1,22,33,400,400,23,12,53 etc. 

gebe ich mag eine Zufallszahl aus den gegebenen Zahlen wählen .

+2

Setzen Sie sie in ein Array, rand mod die Größe des Arrays. – 123

Antwort

1

Konnte kein genaues Duplikat davon finden. Also hier geht mein Versuch, genau was 123 in Kommentaren erwähnt. Die Lösung ist über Shell-Varianten hinweg portierbar und verwendet keine shell Binaries, um die Leistung zu vereinfachen.

Sie können die folgenden Befehle direkt auf der Konsole ausführen.

# Read the elements into bash array, with IFS being the de-limiter for input 
IFS="," read -ra randomNos <<< "1,22,33,400,400,23,12,53" 

# Print the random numbers using the '$RANDOM' variable built-in modulo with 
# array length. 
printf "%s\n" "${randomNos[ $RANDOM % ${#randomNos[@]}]}" 

sich nach den Kommentaren unten, wenn Sie eine bestimmte Liste von Zahlen aus einem Bereich ignorieren auszuwählen; tun den Ansatz wie unten

#!/bin/bash 

# Initilzing the ignore list with the numbers you have mentioned 
declare -A ignoreList='([21]="1" [25]="1" [53]="1" [80]="1" [143]="1" [587]="1" [990]="1" [993]="1")' 

# Generating the random number 
randomNumber="$(($RANDOM % 1023))" 

# Printing the number if it is not in the ignore list 
[[ ! -n "${ignoreList["$randomNumber"]}" ]] && printf "%s\n" "$randomNumber" 

Sie können es wie in einer bash Variablen speichern

randomPortNumber=$([[ ! -n "${ignoreList["$randomNumber"]}" ]] && printf "%s\n" "$randomNumber") 

Denken Sie daran, assoziativ-Arrays bash Version ≥4 arbeiten müssen.

+2

Ich glaube nicht, dass Arrays über Shells portierbar sind. –

+1

Warum verwenden Sie lesen, anstatt ein normales Array zu machen? – 123

+1

@ 123: Ja, ich hätte das tun können, wollte demonstrieren, wie die genaue Komma-getrennte Eingabe in ein Ergebnis wie dieses verwandelt werden könnte. – Inian