Benutzereingabe in Skripten
Teil des Abschnitts Grundlagen der Terminal-Journey von Coddy — Lektion 69 von 82.
Variablen sind nützlich, aber manchmal möchten Sie, dass Ihr Skript den Benutzer während der Ausführung nach Informationen fragt. Der read-Befehl hält das Skript an und wartet darauf, dass der Benutzer etwas eingibt, und speichert diese Eingabe dann in einer Variablen.
So funktioniert es:
#!/bin/bash
echo "What is your name?"
read name
echo "Hello, $name!"Wenn dieses Skript ausgeführt wird, gibt es die Frage aus, wartet darauf, dass der Benutzer seinen Namen eingibt und Enter drückt, und begrüßt ihn dann. Der Befehl read nimmt alles entgegen, was der Benutzer eingibt, und speichert es in der Variablen name.
Sie können die Eingabeaufforderung übersichtlicher gestalten, indem Sie das Flag -p verwenden, das die Eingabeaufforderungsmeldung und die Eingabe in derselben Zeile kombiniert:
#!/bin/bash
read -p "Enter your name: " name
echo "Hello, $name!"Dies zeigt Enter your name: an und wartet in derselben Zeile auf die Eingabe, was eleganter aussieht. Das Flag -p nimmt den Aufforderungstext als Argument entgegen, gefolgt von dem Variablennamen, in dem die Eingabe gespeichert werden soll.
Benutzereingaben machen Skripte interaktiv und anpassungsfähig. Anstatt Werte fest im Code zu hinterlegen, können Sie ein einzelnes Skript schreiben, das je nach den Eingaben des Benutzers bei jedem Ausführen unterschiedlich reagiert.
Aufgabe
EinfachErstellen Sie ein Shell-Skript namens greeter.sh, das den Benutzer nach seiner Lieblingsfarbe fragt und dann eine Nachricht mit seiner Eingabe anzeigt.
Ihr Skript sollte:
- Mit der Shebang-Zeile beginnen (
#!/bin/bash) readmit dem Flag-pverwenden, um folgenden Prompt anzuzeigen:What is your favorite color?- Die Eingabe in einer Variable namens
colorspeichern echoverwenden, um Folgendes auszugeben:Nice! [color] is a great color!(wobei [color] die Eingabe des Benutzers ist)
Machen Sie das Skript ausführbar und führen Sie es dann mit blue als Eingabe aus. Dieses Terminal ist nicht interaktiv — es kann nicht anhalten und auf Ihre Eingabe warten — leiten Sie die Antwort daher über eine Pipe an das Skript weiter:
echo "blue" | ./greeter.shIhre Ausgabe sollte wie folgt aussehen:
Nice! blue is a great color!Hinweis: Der Prompt
What is your favorite color?wird hier nicht angezeigt.read -pgibt seinen Prompt nur aus, wenn die Eingabe über eine Tastatur erfolgt, und hier kommt sie aus der Pipe.
Tipp: Erstellen Sie das Skript Zeile für Zeile mit
echound Umleitung. Verwenden Sieread -p "What is your favorite color? " color, um nach der Eingabe zu fragen und sie zu erfassen, und dannecho "Nice! $color is a great color!", um das Ergebnis anzuzeigen.
Probier es selbst
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
4Verzeichnisse
Ein Verzeichnis erstellenEin Verzeichnis kopierenEin Verzeichnis verschieben und umbenennenEin Verzeichnis löschenZusammenfassung - Verzeichnisoperationen7Dateiinhalt
Head und TailWortanzahlSort-BefehlUniq-BefehlGrep GrundlagenGrep mit FlagsZusammenfassung - Textdetektiv10Log-Analyzer-Projekt
ProjektübersichtAnzeigen der Logdatei13Grundlagen der Shell-Skripte
Was ist ein Shell-SkriptEin Skript erstellen und ausführenVariablen in SkriptenBenutzereingabe in SkriptenIf-AnweisungFor-SchleifeWhile-SchleifeZusammenfassung - Zahlenraten2Navigation
Arbeitsverzeichnis anzeigenDateien auflistenVerzeichnis wechselnAbsolute vs. relative PfadeHome- und Root-VerzeichnisZusammenfassung - Den Weg finden8Umleitung
StandardausgabeIn eine Datei überschreibenAn eine Datei anhängenStandardeingabeStandardfehlerausgabeZusammenfassung – Log-Builder3Dateien
Eine Datei erstellenEine Datei lesenEine Datei kopierenEine Datei verschieben und umbenennenEine Datei löschenZusammenfassung - Dateioperationen6Wildcards und Muster
Die Sternchen-WildcardDie Fragezeichen-WildcardKlammer-WildcardsWildcards kombinierenZusammenfassung - Selektive Operationen9Pipes
Was ist eine PipeVerkettung zweier BefehleVerkettung mehrerer BefehlePipe mit GrepZusammenfassung - Daten-Pipeline