Einführung
Dieses Lab führt Sie in das Einlesen von Benutzereingaben in Linux-Shell-Skripten ein. Das Einlesen von Eingaben ist eine grundlegende Fähigkeit für die Erstellung interaktiver Shell-Skripte, die auf Benutzereingaben reagieren können. Indem Sie lernen, wie Sie den Befehl read verwenden, können Sie Daten sammeln und verarbeiten, die von Benutzern eingegeben werden, wodurch Ihre Skripte vielseitiger und benutzerfreundlicher werden.
In diesem Lab lernen Sie, wie Sie Benutzereingaben lesen, diese Eingaben in Ihren Skripten verarbeiten und interaktive Shell-Skripte erstellen, die dynamisch auf verschiedene Benutzereingaben reagieren können. Diese Fähigkeiten sind unerlässlich für das Schreiben effektiver Befehlszeilentools und Skripte in Linux-Umgebungen.
Grundlegendes Einlesen von Eingaben
Der Befehl read ist ein integrierter Shell-Befehl, der eine Zeile von Eingaben von der Standard-Eingabe (normalerweise der Tastatur) liest und diese an Variablen zuweist. Dies ermöglicht es Skripten, Benutzereingaben zu empfangen und zu verarbeiten.
In diesem Schritt erstellen Sie ein einfaches Skript, das Benutzereingaben liest und diese wieder an den Benutzer ausgibt.
Stellen Sie zunächst sicher, dass Sie sich im Projektverzeichnis befinden:
cd /home/labex/projectErstellen Sie eine neue Skriptdatei mit dem Namen
input_reader.sh:touch input_reader.shMachen Sie das Skript ausführbar:
chmod +x input_reader.shÖffnen Sie die Skriptdatei mit dem nano-Texteditor:
nano input_reader.shFügen Sie dem Skript den folgenden Code hinzu:
#!/bin/bash ## Ein einfaches Skript zur Demonstration des grundlegenden Eingabeeinlesens echo "Bitte geben Sie Ihren Namen ein:" read name echo "Hallo, $name! Willkommen beim Einlesen von Eingaben in Linux."Dieses Skript:
- Beginnt mit einem Shebang (
#!/bin/bash), der angibt, dass das Skript mit bash ausgeführt werden soll - Zeigt eine Eingabeaufforderung an, die den Benutzer nach seinem Namen fragt
- Nutzt den Befehl
read, um das, was der Benutzer eingibt, aufzufangen und in einer Variablen namensnamezu speichern - Zeigt eine Begrüßung an, die den vom Benutzer eingegebenen Namen enthält
- Beginnt mit einem Shebang (
Speichern Sie die Datei, indem Sie
Strg+Odrücken, bestätigen Sie den Dateinamen mitEnterund verlassen Sie nano, indem SieStrg+Xdrücken.Führen Sie das Skript aus, um es zu testen:
./input_reader.shSie sollten eine Ausgabe ähnlich der folgenden sehen:
Bitte geben Sie Ihren Namen ein: John Hallo, John! Willkommen beim Einlesen von Eingaben in Linux.Die tatsächliche Ausgabe wird den Namen anzeigen, den Sie eingegeben haben, anstelle von "John".
Der Befehl read wartet auf Benutzereingaben und speichert diese in einer oder mehreren Variablen. In diesem Beispiel wurde die Eingabe in einer einzelnen Variablen namens name gespeichert. Später lernen Sie, wie Sie mit einem einzigen read-Befehl mehrere Eingaben erfassen können.
Verwendung von read in Schleifen
In diesem Schritt verbessern Sie Ihr Skript, um kontinuierlich Eingaben mithilfe einer Schleife zu lesen, bis eine bestimmte Abbruchbedingung erfüllt ist. Dieses Muster wird häufig in interaktiven Skripten verwendet, bei denen Sie mehrere Informationen vom Benutzer sammeln müssen.
Öffnen Sie Ihr Skript zum Bearbeiten:
nano input_reader.shErsetzen Sie den vorhandenen Inhalt durch den folgenden Code:
#!/bin/bash ## Verbessertes Skript mit einer Schleife für mehrere Eingaben echo "Geben Sie mehrere Eingaben ein (geben Sie 'exit' ein, um zu beenden):" while true; do ## Eingabeaufforderung anzeigen echo -n "> " read input ## Prüfen, ob der Benutzer beenden möchte if [[ "$input" == "exit" ]]; then echo "Beende den Eingabeleser." break fi ## Die Eingabe verarbeiten echo "Sie haben eingegeben: $input" done echo "Vielen Dank, dass Sie den Eingabeleser verwendet haben!"Dieses Skript:
- Nutzt eine
while true-Schleife, um eine Endlosschleife zu erstellen, die kontinuierlich Eingaben akzeptiert - Zeigt vor jeder Eingabe eine Eingabeaufforderung (
>) an, indemecho -nverwendet wird, was ein Zeilenumbruch verhindert - Liest die Benutzereingabe in die Variable
input - Prüft, ob die Eingabe "exit" ist, und bricht die Schleife ab, wenn dies der Fall ist
- Andernfalls gibt es die Eingabe wieder an den Benutzer aus
- Zeigt schließlich eine Dankesnachricht nach dem Verlassen der Schleife an
- Nutzt eine
Speichern Sie die Datei, indem Sie
Strg+Odrücken, bestätigen Sie den Dateinamen mitEnterund verlassen Sie nano, indem SieStrg+Xdrücken.Führen Sie das verbesserte Skript aus:
./input_reader.shSie sollten eine Ausgabe ähnlich der folgenden sehen:
Geben Sie mehrere Eingaben ein (geben Sie 'exit' ein, um zu beenden): > hello Sie haben eingegeben: hello > world Sie haben eingegeben: world > exit Beende den Eingabeleser. Vielen Dank, dass Sie den Eingabeleser verwendet haben!
Diese Schleifenstruktur ist besonders nützlich, wenn Sie mehrere Eingaben nacheinander verarbeiten müssen, beispielsweise beim Erstellen einer einfachen Befehlszeilen-Schnittstelle oder eines Daten-Eingabewerkzeugs. Die break-Anweisung wird verwendet, um die Schleife zu verlassen, wenn der Benutzer "exit" eingibt. Sie können jedoch die Bedingung ändern, um die Schleife basierend auf beliebigen Kriterien zu beenden.
Eingaben mit Hinweisen und Standardwerten lesen
In diesem Schritt lernen Sie, wie Sie Standardwerte für Eingaben festlegen und die Option -p verwenden, um sauberere Eingabeaufforderungen zu erstellen. Dies ist nützlich, wenn Sie Benutzern die Möglichkeit geben möchten, einfach die Eingabetaste zu drücken, um einen vorgeschlagenen Wert zu akzeptieren.
Öffnen Sie Ihr Skript zum Bearbeiten:
nano input_reader.shErsetzen Sie den vorhandenen Inhalt durch den folgenden Code:
#!/bin/bash ## Skript, das das Einlesen mit Standardwerten demonstriert ## Verwenden der -p-Flagge für die Eingabeaufforderung und Festlegen eines Standardwerts mit dem ||-Operator read -p "Geben Sie Ihr Land ein (Standard: USA): " country country=${country:-USA} echo "Land festgelegt auf: $country" ## Ein weiteres Beispiel mit einem Standardwert read -p "Geben Sie Ihre bevorzugte Programmiersprache ein (Standard: Bash): " language language=${language:-Bash} echo "Programmiersprache festgelegt auf: $language" ## Kombination mit einem Timeout mithilfe der -t-Option echo "Schnelle Antwort erforderlich:" read -t 5 -p "Was ist Ihre Lieblingsfarbe? (Sie haben 5 Sekunden, Standard: Blau): " color color=${color:-Blue} echo "Lieblingsfarbe festgelegt auf: $color"Dieses Skript:
- Nutzt die
-p-Flagge, um eine Eingabeaufforderung innerhalb desselbenread-Befehls anzuzeigen, wodurch der Code kompakter wird - Wendet die Syntax
${variable:-default}an, um einen Standardwert festzulegen, wenn die Benutzereingabe leer ist - Demonstriert die
-t-Option, die ein Timeout für die Eingabe festlegt (in diesem Beispiel 5 Sekunden)
- Nutzt die
Speichern Sie die Datei, indem Sie
Strg+Odrücken, bestätigen Sie den Dateinamen mitEnterund verlassen Sie nano, indem SieStrg+Xdrücken.Führen Sie das Skript aus, um es zu testen:
./input_reader.shVersuchen Sie diese Szenarien:
- Geben Sie einen Ländernamen ein, wenn Sie dazu aufgefordert werden, und drücken Sie dann die Eingabetaste
- Drücken Sie einfach die Eingabetaste (ohne etwas einzugeben), um den Standardwert zu akzeptieren
- Bei dem Timeout-Beispiel warten Sie länger als 5 Sekunden, um zu sehen, was passiert
Beispielausgabe beim Akzeptieren der Standardwerte:
Geben Sie Ihr Land ein (Standard: USA): Land festgelegt auf: USA Geben Sie Ihre bevorzugte Programmiersprache ein (Standard: Bash): Programmiersprache festgelegt auf: Bash Schnelle Antwort erforderlich: Was ist Ihre Lieblingsfarbe? (Sie haben 5 Sekunden, Standard: Blau): Lieblingsfarbe festgelegt auf: Blue
Die -p-Option von read ermöglicht es Ihnen, eine Eingabeaufforderung im selben Befehl anzugeben, wodurch Ihre Skripte sauberer und lesbarer werden. Die Syntax ${variable:-default} ist eine leistungsstarke Shell-Funktion, die einen Standardwert einsetzt, wenn die Variable nicht gesetzt oder leer ist. Dies ist ideal für die Bereitstellung von Standardoptionen in Skripten.
Sichere Eingaben und mehrere Variablen lesen
In diesem letzten Schritt lernen Sie zwei weitere fortgeschrittene Techniken:
Einlesen sicherer Eingaben (wie Passwörter) ohne Anzeige der Zeichen auf dem Bildschirm
Einlesen mehrerer Variablen mit einem einzigen
read-BefehlÖffnen Sie Ihr Skript zum Bearbeiten:
nano input_reader.shErsetzen Sie den vorhandenen Inhalt durch den folgenden Code:
#!/bin/bash ## Skript, das sicheres Einlesen von Eingaben und das Einlesen mehrerer Variablen demonstriert ## Sicheres Einlesen von Eingaben mit der -s-Flagge (keine Echo-Ausgabe) echo "Beispiel für sichere Eingabe:" read -p "Benutzername: " username read -s -p "Passwort: " password echo ## Füge eine neue Zeile nach der Passworteingabe hinzu echo "Eingegebener Benutzername: $username" echo "Passwortlänge: ${#password} Zeichen" ## Einlesen mehrerer Variablen auf einmal echo -e "\nBeispiel für mehrere Variablen:" read -p "Geben Sie Vorname, Nachname und Alter ein (getrennt durch Leerzeichen): " first_name last_name age echo "Vorname: $first_name" echo "Nachname: $last_name" echo "Alter: $age" ## Einlesen mit einem benutzerdefinierten Trennzeichen echo -e "\nBeispiel für benutzerdefiniertes Trennzeichen:" read -p "Geben Sie durch Kommas getrennte Werte ein: " -d "," value1 echo ## Füge eine neue Zeile hinzu echo "Erster Wert vor dem Komma: $value1" echo -e "\nVielen Dank, dass Sie dieses Lab zum Einlesen von Eingaben unter Linux abgeschlossen haben!"Dieses Skript:
- Nutzt die
-s-Flagge beiread, um die Eingabe zu verbergen (nützlich für Passwörter oder andere sensible Informationen) - Zeigt, wie man mehrere Variablen aus einer einzigen Eingabezeile einliest, indem man mehrere Variablennamen an den
read-Befehl übergibt - Demonstriert die
-d-Flagge, um ein benutzerdefiniertes Trennzeichen anzugeben (anstelle des Standardzeilenumbruchs)
- Nutzt die
Speichern Sie die Datei, indem Sie
Strg+Odrücken, bestätigen Sie den Dateinamen mitEnterund verlassen Sie nano, indem SieStrg+Xdrücken.Führen Sie das Skript aus, um es zu testen:
./input_reader.shBeispielausgabe (Ihre Eingaben werden unterschiedlich sein):
Beispiel für sichere Eingabe: Benutzername: john_doe Passwort: Eingegebener Benutzername: john_doe Passwortlänge: 8 Zeichen Beispiel für mehrere Variablen: Geben Sie Vorname, Nachname und Alter ein (getrennt durch Leerzeichen): John Doe 30 Vorname: John Nachname: Doe Alter: 30 Beispiel für benutzerdefiniertes Trennzeichen: Geben Sie durch Kommas getrennte Werte ein: test, Erster Wert vor dem Komma: test Vielen Dank, dass Sie dieses Lab zum Einlesen von Eingaben unter Linux abgeschlossen haben!
Sicherheit ist wichtig, wenn Sie sensible Informationen wie Passwörter verarbeiten. Die -s-Flagge stellt sicher, dass die eingegebenen Zeichen nicht auf dem Bildschirm angezeigt werden. Beachten Sie, dass im Passwortbeispiel das Skript nur die Länge des Passworts zur Überprüfung anzeigt, nicht das eigentliche Passwort.
Das gleichzeitige Einlesen mehrerer Variablen kann Ihre Skripte effizienter und benutzerfreundlicher machen. Wenn der read-Befehl mehrere Variablennamen erhält, teilt er die Eingabe basierend auf der IFS (Internal Field Separator)-Umgebungsvariablen auf, die standardmäßig auf Leerzeichen (Leerzeichen, Tabulatoren und Zeilenumbrüche) festgelegt ist.
Die -d-Flagge ermöglicht es Ihnen, das Trennzeichen zu ändern, das das Ende der Eingabe signalisiert. Standardmäßig stoppt read bei einem Zeilenumbruch (wenn Sie die Eingabetaste drücken), aber Sie können es auf ein beliebiges Zeichen ändern, wie z. B. ein Komma im Beispiel.
Zusammenfassung
In diesem Lab haben Sie die wichtigsten Techniken zum Lesen und Verarbeiten von Benutzereingaben in Linux-Bash-Skripten gelernt:
Grundlegendes Einlesen von Eingaben: Verwenden des
read-Befehls, um Benutzereingaben in Variablen zu speichern.Schleifenbasierte Eingabe: Implementieren von Schleifen, um kontinuierlich Eingaben zu lesen, bis eine bestimmte Bedingung erfüllt ist.
Standardwerte und Eingabeaufforderungen: Festlegen von Standardwerten für Eingaben und Erstellen sauberer Skripte mit eingebetteten Eingabeaufforderungen.
Fortgeschrittene Techniken: Einlesen sicherer Eingaben ohne Anzeige auf dem Bildschirm, Erfassen mehrerer Variablen in einem einzigen Befehl und Verwenden von benutzerdefinierten Trennzeichen.
Diese Fähigkeiten zum Einlesen von Eingaben sind grundlegend für die Erstellung interaktiver Shell-Skripte, die sich an Benutzereingaben anpassen, angemessene Standardwerte bereitstellen und verschiedene Datentypen verarbeiten können. Sie können diese Techniken nun anwenden, um reaktionsfähigere und benutzerfreundlichere Befehlszeilentools und Skripte zu erstellen.
Wenn Sie Ihre Linux-Fähigkeiten weiter entwickeln möchten, sollten Sie erwägen, diese Eingabe-Lesemethoden mit anderen Bash-Funktionen wie bedingten Anweisungen, Funktionen und Dateioperationen zu kombinieren, um komplexere und leistungsfähigere Tools für die Automatisierung und Systemverwaltung zu erstellen.



