Benutzereingabe in Skripten
Teil des Abschnitts Grundlagen der Terminal-Journey von Coddy. Lektion 69 von 82.
Variablen sind nützlich, aber manchmal soll dein Skript den Benutzer während der Ausführung nach Informationen fragen. Der Befehl read 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, was der Benutzer eingibt, und speichert es in der Variablen name.
Du kannst die Eingabeaufforderung übersichtlicher gestalten, indem du das Flag -p verwendest, das die Eingabeaufforderung 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 eine Eingabe, was professioneller wirkt. Das Flag -p nimmt den Eingabeaufforderungstext als Argument, gefolgt vom Variablennamen, in dem die Eingabe gespeichert werden soll.
Benutzereingaben machen Skripte interaktiv und anpassungsfähig. Anstatt Werte fest zu codieren, kannst du ein Skript schreiben, das je nach den Angaben des Benutzers bei jeder Ausführung anders funktioniert.
Aufgabe
EinfachErstelle ein Shell-Skript namens greeter.sh, das den Benutzer nach seiner Lieblingsfarbe fragt und anschließend eine Nachricht mit seiner Eingabe anzeigt.
Dein Skript sollte:
- Mit der Shebang-Zeile beginnen (
#!/bin/bash) readmit dem Flag-pverwenden, um folgende Eingabeaufforderung 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)
Mach das Skript ausführbar und führe es anschließend mit blue als Eingabe aus. Dieses Terminal ist nicht interaktiv und kann nicht anhalten und darauf warten, dass du etwas eingibst. Leite die Antwort daher über eine Pipe an das Skript weiter:
echo "blue" | ./greeter.shDeine Ausgabe sollte folgendermaßen aussehen:
Nice! blue is a great color!Hinweis: Die Eingabeaufforderung
What is your favorite color?wird hier nicht angezeigt.read -pgibt seine Eingabeaufforderung nur aus, wenn die Eingabe von einer Tastatur kommt, hier kommt sie jedoch über die Pipe.
Setze jede von dir geschriebene Zeile in einfache Anführungszeichen:
echo 'echo "Hello $name"' >> script.sh. Einfache Anführungszeichen verhindern, dass die Shell$nameersetzt, während die Datei geschrieben wird. Dadurch behält das Skript die Variable und erweitert sie bei der Ausführung. Doppelte Anführungszeichen würden den Wert sofort ersetzen.
Tipp: Erstelle das Skript Zeile für Zeile, indem du
echomit einer Umleitung verwendest. Nutzeread -p "What is your favorite color? " color, um zur Eingabe aufzufordern und die Eingabe zu erfassen, und anschließendecho "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Übe selbstständig: Terminal-Playground