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
Wir lesen die Eingabe von der Befehlszeile, indem wir den Befehl
readin unserem Bash-Skript verwenden. Dies wird am besten mit einer case-Anweisung gekoppelt, mit der überprüft werden kann, ob der Benutzerjaoderneinoder 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 derLesebefehl den Benutzer, ob er fortfahren möchte, und wartet auf Eingaben. Die Antwort des Benutzers wird invariablen $yngespeichert. Diecase-Anweisungbestimmt dann, ob der Benutzeryes,nooder 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 responseEin 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-Schleifeeinschließ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-KlauselunsererFallaussagemit einemUmbruchzu versehen. Dadurch wird Bash angewiesen, diewhile-Schleifezu beenden, falls der Benutzer dies bejaht. Wir haben auch denexit-Befehlaus 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...Anstatt unsere Benutzer zu zwingen, ein vollständiges
JaoderNeineinzugeben, ist es viel konventioneller, auf Linux-Systemen eine Antwort vonyodernzuzulassen. 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.
