Website-Suche

Bash-Skript: Beispiel für eine JA/NEIN-Eingabeaufforderung


Interaktive Bash-Skripte enthalten häufig eine Ja- oder Nein-Eingabeaufforderung, um eine Benutzerbestätigung anzufordern, bevor mit einer Reihe von Anweisungen fortgefahren oder der Vorgang abgebrochen wird.

Wenn ein Benutzer die Eingabeaufforderung mit Ja beantwortet, fährt das Bash-Skript in der Regel mit seiner Aufgabe fort, und wenn ein Benutzer mit Nein antwortet, wird das Skript entweder beendet oder wechselt zu einem anderen Teil des Skripts.

In diesem Tutorial erfahren Sie, wie Sie eine Ja/Nein-Eingabeaufforderung in einem Bash-Skript auf einem Linux-System erstellen. Sehen Sie sich einige unserer Beispiele an, um zu erfahren, wie eine Ja/Nein-Eingabeaufforderung funktioniert.

In diesem Tutorial lernen Sie:

  • So erstellen Sie eine Ja- oder Nein-Eingabeaufforderung in Bash
  • So wiederholen Sie eine Ja- oder Nein-Eingabeaufforderung für ungültige Antworten
  • So überprüfen Sie, ob Antworten in Klein- oder Großbuchstaben vorhanden sind

Bash-Skript: Beispiel für eine JA/NEIN-Eingabeaufforderung

  1. Wir lesen die Eingabe von der Befehlszeile, indem wir den Befehl read in unserem Bash-Skript verwenden. Dies wird am besten mit einer case-Anweisung gekoppelt, mit der überprüft werden kann, ob der Benutzer ja oder nein oder etwas anderes eingegeben hat.

    #!/bin/bash
    
    read -p "Do you want to proceed? (yes/no) " yn
    
    case $yn in 
    	yes ) echo ok, we will proceed;;
    	no ) echo exiting...;
    		exit;;
    	* ) echo invalid response;
    		exit 1;;
    esac
    
    echo doing stuff...

    In diesem Skript fragt der Lesebefehl den Benutzer, ob er fortfahren möchte, und wartet auf Eingaben. Die Antwort des Benutzers wird in variablen $yn gespeichert. Die case-Anweisung bestimmt dann, ob der Benutzer yes, no oder etwas anderes eingegeben hat, und fährt entsprechend fort. Hier sind die Ergebnisse, wenn wir das Skript ausführen:

    
    ./test.sh 
    Do you want to proceed? (yes/no) yes
    ok, we will proceed
    doing stuff...
    
    ./test.sh 
    Do you want to proceed? (yes/no) no
    exiting...
    
    ./test.sh 
    Do you want to proceed? (yes/no) fdsfdsf
    invalid response
    
  2. Ein Problem mit dem obigen Skript besteht darin, dass, wenn ein Benutzer fälschlicherweise eine ungültige Antwort eingibt, das Skript nicht versucht, eine korrekte Antwort zu erhalten, und stattdessen mit dem Beenden fortfährt. In einigen Situationen ist dies kein Problem, aber manchmal möchten wir den Benutzer möglicherweise ständig auffordern, eine gültige Ja- oder Nein-Antwort zu erhalten. In diesem Fall können wir unsere Ja/Nein-Eingabeaufforderung einfach in eine while-Schleife einschließen.

    #!/bin/bash
    
    while true; do
    
    read -p "Do you want to proceed? (yes/no) " yn
    
    case $yn in 
    	yes ) echo ok, we will proceed;
    		break;;
    	no ) echo exiting...;
    		exit;;
    	* ) echo invalid response;;
    esac
    
    done
    
    echo doing stuff...

    Beachten Sie, dass es auch notwendig war, die Ja-Klausel unserer Fallaussage mit einem Umbruch zu versehen. Dadurch wird Bash angewiesen, die while-Schleife zu beenden, falls der Benutzer dies bejaht. Wir haben auch den exit-Befehl aus unserer ungültigen Antwortklausel entfernt. Folgendes passiert, wenn wir jetzt ungültige Antworten eingeben:

    
    ./test.sh 
    Do you want to proceed? (yes/no) aaa
    invalid response
    Do you want to proceed? (yes/no) bbb
    invalid response
    Do you want to proceed? (yes/no) yes
    ok, we will proceed
    doing stuff...
    
  3. Anstatt unsere Benutzer zu zwingen, ein vollständiges Ja oder Nein einzugeben, ist es viel konventioneller, auf Linux-Systemen eine Antwort von y oder n zuzulassen. Stellen wir außerdem sicher, dass bei unserer Antwort nicht zwischen Groß- und Kleinschreibung unterschieden wird, sodass entweder ein Groß- oder Kleinbuchstabe eingegeben werden kann.

    #!/bin/bash
    
    while true; do
    
    read -p "Do you want to proceed? (y/n) " yn
    
    case $yn in 
    	[yY] ) echo ok, we will proceed;
    		break;;
    	[nN] ) echo exiting...;
    		exit;;
    	* ) echo invalid response;;
    esac
    
    done
    
    echo doing stuff...

    Sehen Sie sich das Ergebnis unten an. Dies ist für den Benutzer viel bequemer, da er das Wort nicht buchstabieren muss und sich keine Gedanken darüber machen muss, ob die Feststelltaste aktiviert ist oder nicht.

    
    ./test.sh 
    Do you want to proceed? (y/n) Y
    ok, we will proceed
    doing stuff...
    
    ./test.sh 
    Do you want to proceed? (y/n) N
    exiting...
    
    ./test.sh
    Do you want to proceed? (y/n) y
    ok, we will proceed
    doing stuff...
    
    ./test.sh 
    Do you want to proceed? (y/n) n
    exiting...
    

Abschließende Gedanken

In diesem Tutorial haben wir gesehen, wie Sie eine einfache Ja- oder Nein-Eingabeaufforderung in einem Bash-Skript auf einem Linux-System erstellen. Es gibt noch mehr Möglichkeiten, dies zu tun, aber die häufigste ist ein read-Befehl und eine case-Anweisung innerhalb einer while-Schleife. Es ist auch am üblichsten, nach einer Antwort mit einem Buchstaben zu fragen, anstatt ein ganzes Wort einzutippen, obwohl Sie Ihr Skript leicht anpassen können, um beide Arten von Antworten zu akzeptieren.

Verwandte Artikel: