Linux-Eingabe-Lesen

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/VersionControlandTextEditorsGroup(["Version Control and Text Editors"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicSystemCommandsGroup -.-> linux/read("Input Reading") linux/BasicSystemCommandsGroup -.-> linux/exit("Shell Exiting") linux/BasicFileOperationsGroup -.-> linux/touch("File Creating/Updating") linux/BasicFileOperationsGroup -.-> linux/chmod("Permission Modifying") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/VersionControlandTextEditorsGroup -.-> linux/nano("Simple Text Editing") subgraph Lab Skills linux/echo -.-> lab-271367{{"Linux-Eingabe-Lesen"}} linux/read -.-> lab-271367{{"Linux-Eingabe-Lesen"}} linux/exit -.-> lab-271367{{"Linux-Eingabe-Lesen"}} linux/touch -.-> lab-271367{{"Linux-Eingabe-Lesen"}} linux/chmod -.-> lab-271367{{"Linux-Eingabe-Lesen"}} linux/cd -.-> lab-271367{{"Linux-Eingabe-Lesen"}} linux/nano -.-> lab-271367{{"Linux-Eingabe-Lesen"}} end

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.

  1. Stellen Sie zunächst sicher, dass Sie sich im Projektverzeichnis befinden:

    cd /home/labex/project
  2. Erstellen Sie eine neue Skriptdatei mit dem Namen input_reader.sh:

    touch input_reader.sh
  3. Machen Sie das Skript ausführbar:

    chmod +x input_reader.sh
  4. Öffnen Sie die Skriptdatei mit dem nano-Texteditor:

    nano input_reader.sh
  5. Fü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 namens name zu speichern
    • Zeigt eine Begrüßung an, die den vom Benutzer eingegebenen Namen enthält
  6. Speichern Sie die Datei, indem Sie Strg+O drücken, bestätigen Sie den Dateinamen mit Enter und verlassen Sie nano, indem Sie Strg+X drücken.

  7. Führen Sie das Skript aus, um es zu testen:

    ./input_reader.sh

    Sie 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.

  1. Öffnen Sie Ihr Skript zum Bearbeiten:

    nano input_reader.sh
  2. Ersetzen 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, indem echo -n verwendet 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
  3. Speichern Sie die Datei, indem Sie Strg+O drücken, bestätigen Sie den Dateinamen mit Enter und verlassen Sie nano, indem Sie Strg+X drücken.

  4. Führen Sie das verbesserte Skript aus:

    ./input_reader.sh

    Sie 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.

Einlesen von Eingaben mit Hinweisen und Standardwerten

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.

  1. Öffnen Sie Ihr Skript zum Bearbeiten:

    nano input_reader.sh
  2. Ersetzen 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 desselben read-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)
  3. Speichern Sie die Datei, indem Sie Strg+O drücken, bestätigen Sie den Dateinamen mit Enter und verlassen Sie nano, indem Sie Strg+X drücken.

  4. Führen Sie das Skript aus, um es zu testen:

    ./input_reader.sh

    Versuchen 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.

Einlesen sicherer Eingaben und mehrerer Variablen

In diesem letzten Schritt lernen Sie zwei weitere fortgeschrittene Techniken:

  1. Einlesen sicherer Eingaben (wie Passwörter) ohne Anzeige der Zeichen auf dem Bildschirm

  2. Einlesen mehrerer Variablen mit einem einzigen read-Befehl

  3. Öffnen Sie Ihr Skript zum Bearbeiten:

    nano input_reader.sh
  4. Ersetzen 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 bei read, 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)
  5. Speichern Sie die Datei, indem Sie Strg+O drücken, bestätigen Sie den Dateinamen mit Enter und verlassen Sie nano, indem Sie Strg+X drücken.

  6. Führen Sie das Skript aus, um es zu testen:

    ./input_reader.sh

    Beispielausgabe (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:

  1. Grundlegendes Einlesen von Eingaben: Verwenden des read-Befehls, um Benutzereingaben in Variablen zu speichern.

  2. Schleifenbasierte Eingabe: Implementieren von Schleifen, um kontinuierlich Eingaben zu lesen, bis eine bestimmte Bedingung erfüllt ist.

  3. Standardwerte und Eingabeaufforderungen: Festlegen von Standardwerten für Eingaben und Erstellen sauberer Skripte mit eingebetteten Eingabeaufforderungen.

  4. 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.