2016-03-30 5 views
0

Wie formatiere ich die 2 Bedingungen unten in eine While-Schleife, die sicherstellen sollte, dass Daten eingeben enthält mindestens ein alphabetisches Zeichen und ist nicht bereits im Verzeichnis/dev/null vorhanden.Bash: Wie formatiere ich diese Bedingungen in einer While-Schleife?

#name = "test123" 
read -p "Enter you name: " name 
until [[ "$name" =~ [A-Za-z] ]]; do 
    read -p "Please enter a valid name: " name 
done 
while id -u $name 2>/dev/null>1 ; do # Checks if username already exists 
read -p "Please enter valid input: " 

Ich weiß, dass es verschiedene Möglichkeiten toformat die 2 Argumente in der while-Schleife sind, da sie jedoch auf die 2 Argumente hängt bin ich nicht sicher.

Ich habe diese Quelle gefunden, unter der ich fortfahren könnte, um einen Fehler zu testen, aber ich möchte wissen, warum ich die Bedingung so formatieren.

Bash scripting, multiple conditions in while loop

Antwort

2

Sie können Ihre Schleife wie folgt verwenden:

while read -r -p "Please enter valid input: " name; do 
    [[ $name == *[a-zA-Z]* ]] && { id -u "$name" >/dev/null 2>&1 || break; } 
done 

echo "Got a good name: $name" 
  • read wird in einer while-Schleife verwendet, die Looping wird Kiel bis eine break innerhalb der Schleife ausgeführt wird.
  • $name == *[a-zA-Z]* wird auf Vorhandensein eines Alphabets in Eingang name überprüfen. * wird für Globbing auf beiden Seiten verwendet.
  • id -u Befehl wird 0 zurückgeben, wenn der eingegebene Name in der Benutzerdatenbank gefunden wird und break ausgeführt wird, wenn der Befehl id fehlschlägt (Benutzername ist eindeutig).
  • >/dev/null 2>&1 wird verwendet, um stdout/stderr von id Befehl zu unterdrücken, da wir nur über den Rückkehrstatus von id kümmern.
+0

Könnten Sie bitte die gewählten Optionen zum Lesen erklären und warum haben Sie es so formatiert? – pythontamer

+0

Was tun die Sterne um die Klammern, warum verwenden Sie doppelte eckige Klammern für eine Bedingung und geschweifte Klammern für die nächste. Warum hast du "Pause" eingeschlossen? (Ich weiß, Pause endet die Schleife) – pythontamer

+0

Warum haben Sie diesen Weg verwendet:>/dev/null 2> & 1 – pythontamer

Verwandte Themen