Lesebefehl: So überprüfen Sie, ob der Benutzer etwas eingegeben hat

Ich versuche, eine if else-Anweisung zu erstellen, um zu überprüfen, ob der Benutzer etwas eingegeben hat Es sollte die Befehle durchlaufen, und wenn nicht, möchte ich eine Hilfeanweisung wiederholen.

Kommentare

  • Mit read, normalerweise muss der Benutzer Enter drücken, bevor das Skript fortgesetzt wird. Anschließend können Sie die Eingabe testen …

Antwort

Ein Beispiel (ziemlich einfach) lautet wie folgt: Es wird eine Datei mit dem Namen userinput erstellt, die den folgenden Code enthält.

#!/bin/bash # create a variable to hold the input read -p "Please enter something: " userInput # Check if string is empty using -z. For more "help test" if [[ -z "$userInput" ]]; then printf "%s\n" "No input entered" exit 1 else # If userInput is not empty show what the user typed in and run ls -l printf "You entered %s " "$userInput" ls -l fi 

Um Bash zu lernen, empfehle ich Ihnen, den folgenden Link zu überprüfen: http://mywiki.wooledge.org/

Antwort

Wenn Sie wissen möchten, ob der Benutzer eine bestimmte Zeichenfolge eingegeben hat, kann dies hilfreich sein:

#!/bin/bash while [[ $string != "string" ]] || [[ $string == "" ]] # While string is different or empty... do read -p "Enter string: " string # Ask the user to enter a string echo "Enter a valid string" # Ask the user to enter a valid string done command 1 # If the string is the correct one, execute the commands command 2 command 3 ... ... 

Antwort

Wenn mehrere Auswahlmöglichkeiten gültig sind, stellen Sie eine while-Bedingung ein, die mit dem regulären Ausdruck übereinstimmt:

Zum Beispiel:

#!/bin/bash while ! [[ "$image" =~ ^(rhel74|rhel75|cirros35)$ ]] do echo "Which image do you want to use: rhel74 / rhel75 / cirros35 ?" read -r image done 

Es wird so lange nach Eingaben gefragt, bis eine der drei Auswahlmöglichkeiten eingegeben wird.

Kommentare

  • Es wäre besser, eine select -Anweisung in bash zu verwenden, wenn das Problem darin bestand, die Auswahl auf einen Satz von zu beschränken Optionen.
  • @Kusalananda, anstatt -1 zu geben, geben Sie ein aktuelles Beispiel! Mein Vorschlag funktioniert gut. Zeigen Sie, dass Ihr Vorschlag auch gut ist. Geben Sie ' nicht nur -1, weil Sie können – ' ist für andere Leser wirklich nicht hilfreich.
  • Hier ist ' ein Beispiel: select image in rhel74 rhel75 cirros35; do [ -n "$image" ] && break; done
  • @Kusalananda jetzt ist dies sehr hilfreich, danke! Ich hätte auch [ -z "$image" ] && select ... hinzugefügt, um die gesamte Auswahl zu überspringen, wenn $ image bereits festgelegt ist.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.