Erstellen Sie interaktive Bash-Skripte mit Ja-, Nein- und Abbrechen-Aufforderung
Interaktive Shell-Skripte können Systemverwaltungsaufgaben effizienter und benutzerfreundlicher machen. Durch die Einbindung von Ja-, Nein- und Abbrechen-Aufforderungen können Sie sicherstellen, dass Skripte nur mit ausdrücklicher Benutzerbestätigung ausgeführt werden, wodurch unbeabsichtigte Aktionen verhindert werden. In diesem Leitfaden werden wir lernen, interaktive Bash-Skripte mit Ja-, Nein- und Abbrechen-Aufforderungen unter Linux zu erstellen.
Einführung
Wenn Sie Bash-Shell-Skripte schreiben, können Sie sie nützlicher machen, indem Sie den Benutzer nach Eingaben fragen. Dies macht das Skript interaktiver und benutzerfreundlicher.
Eine Möglichkeit, dies zu tun, besteht darin, den Befehl read zu verwenden, der es Ihnen ermöglicht, den Benutzer nach Eingaben zu fragen und seine Antwort in einer Variablen zu speichern.
Durch die Kombination des read-Befehls mit bedingten Anweisungen, wie if- und case-Anweisungen, können Sie Ihr Skript unterschiedliche Aktionen basierend auf der Antwort des Benutzers ausführen lassen.
In diesem Tutorial behandeln wir:
- Was ist der
read-Befehl, - Wie man den
read-Befehl verwendet, um Benutzereingaben zu erfassen, - Verwendung von
if- undcase-Anweisungen zur Handhabung verschiedener Antworten, - Und praktische Beispiele zur Erstellung interaktiver Bash-Skripte.
Am Ende dieses Leitfadens werden Sie in der Lage sein, interaktive Bash-Skripte zu schreiben, die Benutzer auffordern können, Vorgänge fortzusetzen, abzubrechen oder zu stornieren.
Was ist der Befehl read in Bash?
Der read-Befehl in Bash wird verwendet, um eine Eingabezeile vom Benutzer oder aus einer Datei zu lesen und sie einer oder mehreren Variablen zuzuweisen. Dieser Befehl ist in der Shell-Skript-Erstellung sehr nützlich, um Benutzereingaben zu erhalten oder Textdateien zu verarbeiten.
Wie der read-Befehl funktioniert
Wenn du read benutzt, stoppt das Skript und wartet darauf, dass der Benutzer etwas eingibt und Enter drückt. Alles, was der Benutzer eingibt, wird in einer Variablen gespeichert, die du später in deinem Skript verwenden kannst.
Warum ist es nützlich?
- Es macht Ihre Skripte interaktiv.
- Sie können Informationen vom Benutzer erhalten, um anzupassen, wie Ihr Skript funktioniert.
- Es ist großartig, um Menüs zu erstellen oder um eine Bestätigung zu bitten, bevor man etwas Wichtiges tut.
Beispiele für die Verwendung
- Nach dem Namen eines Benutzers fragen, um Nachrichten zu personalisieren.
- Vor dem Fortfahren mit einer Aktion eine Ja-/Nein-Antwort erhalten.
- Ein einfaches Menü erstellen, in dem Benutzer Optionen auswählen können.
Grundlagen des read-Befehls
1. Syntax:
read [options] variable_nameOptionen :
-r: Verhindert, dass Rückwärtsschrägstriche als Escape-Zeichen interpretiert werden. Beispiel:read -r response-p: Ermöglicht es Ihnen, eine Eingabeaufforderung anzuzeigen, ohneechozu benötigen. Beispiel:read -p "Wie heißen Sie? " name-s: Verbirgt, was der Benutzer eingibt (gut für Passwörter). Beispiel:read -s -p "Geben Sie Ihr Passwort ein: " password-t: Legt ein Zeitlimit für die Eingabe fest.-n: Begrenzt die Anzahl der Zeichen, die der Benutzer eingeben kann.
2. Benutzereingaben lesen:
Die gebräuchlichste Verwendung des read-Befehls besteht darin, den Benutzer während der Skriptausführung zur Eingabe aufzufordern.
Schauen Sie sich das folgende Beispiel an:
echo "Please enter your name:"
read name
echo "Hello, $name!"Hier,
echo "Bitte geben Sie Ihren Namen ein:"zeigt eine Eingabeaufforderung an.read namewartet darauf, dass der Benutzer etwas eingibt und die Eingabetaste drückt. Die Eingabe wird in der Variablennamegespeichert.echo "Hallo, $name!"zeigt die Eingabe des Benutzers zurück an ihn.
3. Verwendung einer Eingabeaufforderung:
Sie können die Option -p verwenden, um eine Eingabeaufforderung mit dem Befehl echo anzuzeigen
read -p "How old are you? " age
echo "I am $age years old."4. Mehrere Variablen lesen:
Sie können mehrere Eingaben in verschiedenen Variablen in einer einzigen Zeile lesen.
echo "Enter your first name and last name:"
read first_name last_name
echo "Hello, $first_name $last_name!"Hier ist ein weiteres Beispiel zum Lesen mehrerer Werte:
read -p "Enter your favorite color and animal: " color animal
echo "Your favorite color is $color and your favorite animal is $animal."5. Verwendung eines Standardwerts:
Sie können einen Standardwert angeben, wenn der Benutzer nichts eingibt.
read -p "Enter your favorite blog [OSTechNix]: " blog
blog=${blog:-OSTechNix}
echo "My favorite blog is $blog."6. Festlegen eines Zeitlimits für Eingaben:
Sie können ein Zeitlimit für die Benutzereingabe mit dem -t-Flag wie unten festlegen:
read -t 5 -p "Quick! Type your lucky number (5 seconds): " lucky_number
echo "Your lucky number is $lucky_number"Wenn Sie innerhalb von 5 Sekunden keine Eingabe machen, wird der read-Befehl einfach beendet.
7. Ein Passwort eingeben (Eingabe wird ausgeblendet):
Sie können das -s Flag verwenden, um sensible Informationen wie Passwörter zu erhalten. Sie werden keine Eingaben sehen, während Sie das Passwort eingeben. Geben Sie das Passwort einfach ein und drücken Sie ENTER.
read -s -p "Enter a password: " password
echo # This just prints a newline
echo "Password received (but not shown for security)"Hier ist ein Beispielausschnitt des read-Befehls, um den Benutzer aufzufordern, zu bestätigen, ob er mit einem Systemupdate fortfahren, den Vorgang abbrechen oder stornieren möchte:
prompt_for_input() {
while true; do
echo -n "Do you want to update the system? (y/n/c): "
read -r response
case "$response" in
[Yy]* )
echo "You selected Yes."
return 0
;;
[Nn]* )
echo "You selected No."
return 1
;;
[Cc]* )
echo "You selected Cancel."
return 2
;;
* )
echo "Invalid input. Please enter y, n, or c."
;;
esac
done
}Das ist, was das obige Skript macht:
echo -n "Möchten Sie das System aktualisieren? (j/n/c): "zeigt eine Eingabeaufforderung ohne Zeilenumbruch am Ende an.read -r responsewartet darauf, dass der Benutzer eine Antwort (y, n oder c) eingibt, und speichert sie in der Variablenresponse.- Die
case-Anweisung verarbeitet die Antwort und bestimmt, welche Aktion basierend auf der Eingabe des Benutzers durchgeführt werden soll.
Wie Sie sehen können, macht der Befehl read Ihre Skripte interaktiv. Sie können Informationen vom Benutzer erhalten, um anzupassen, wie Ihr Skript funktioniert. Er ist ideal, um Menüs zu erstellen oder um eine Bestätigung zu fragen, bevor Sie etwas Wichtiges tun.
Erstellen Sie interaktive Bash-Skripte unter Verwendung von Ja-, Nein- und Abbrechen-Operationen
Hier habe ich drei Beispielscripts gegeben, um interaktive Scripts unter Verwendung des read-Befehls und bedingter Anweisungen zu erstellen.
Beispiel 1: Ein interaktives Shell-Skript zur Aktualisierung eines Debian-basierten Systems
Angenommen, Sie möchten Ihren Debian-Linux-Server aktualisieren. Bevor Sie mit dem Update fortfahren, möchten Sie den Benutzer auffordern, zu bestätigen, ob er fortfahren, abbrechen oder den Vorgang stornieren möchte.
Hier ist ein Beispiel-Bash-Skript für diese Aufgabe:
Erklärung des Skripts:
1. Fordern Sie den Benutzer auf: Das Skript fordert den Benutzer auf, zu bestätigen, ob das Softwarepaket aktualisiert werden soll.
2. Erfassen Sie die Benutzereingabe: Der read-Befehl erfasst die Eingabe des Benutzers.
3. Verarbeiten Sie die Eingabe: Die case-Anweisung verarbeitet die Antwort des Benutzers und bestimmt, ob er Ja, Nein oder Abbrechen ausgewählt hat.
4. Aktualisieren Sie die Software:
- Wenn der Benutzer Ja wählt (
[Yy]*), fährt das Skript mit dem Software-Update mitsudo apt-get update && sudo apt-get upgrade -yfort. - Wenn der Benutzer Nein (
[Nn]*) wählt, gibt das Skript eine Nachricht aus, die angibt, dass das Update abgebrochen wurde. - Wenn der Benutzer Abbrechen (
[Cc]*) auswählt, gibt das Skript eine Nachricht aus, die darauf hinweist, dass das Update abgebrochen wurde.
- Ungültige Eingabeverarbeitung: Wenn der Benutzer etwas anderes als y, n oder c eingibt, fordert das Skript ihn erneut auf, bis er eine gültige Antwort gibt.
Um es zu verwenden, kopieren Sie einfach den obigen Code in eine Textdatei, zum Beispiel debupdate.sh. Machen Sie sie ausführbar:
chmod +x debupdate.shFühren Sie das Skript mit dem Befehl aus:
./debupdate.shBeispielausgabe:
Das Skript fährt nur dann mit der Aktualisierung des Systems fort, wenn der Benutzer y eingibt.
Do you want to update the software package? (y/n/c): y
You selected Yes.
Proceeding with the software update...
[sudo] password for ostechnix:
Hit:5 http://deb.debian.org/debian bullseye InRelease
Get:6 http://deb.debian.org/debian bullseye-updates InRelease [44.1 kB]
Get:7 http://deb.debian.org/debian bullseye-backports InRelease [49.0 kB]
Hit:9 http://security.debian.org/debian-security bullseye-security InRelease
Fetched 95.5 kB in 11s (8,768 B/s)
Reading package lists... Done
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Software update completed successfully.Dies ist nur ein Beispiel, um den Zweck des read-Befehls zu veranschaulichen. Er kann für Benutzer nützlich sein, die sicherstellen müssen, dass Updates nur mit expliziter Bestätigung angewendet werden.
Natürlich müssen Sie kein Skript für den Befehl sudo apt-get update && sudo apt-get upgrade schreiben. Es ist nur eine Einzeilige und Sie können sie in Ihrem Terminal ausführen, ohne ein Skript zu benötigen.
Beispiel 2: Alte Protokolldateien löschen
Angenommen, Sie sind ein Systemadministrator und müssen ein Skript schreiben, um alte Protokolldateien von einem Server zu entfernen. Sie möchten sicherstellen, dass der Benutzer sich der Folgen des Ausführens des Skripts bewusst ist und ihm die Möglichkeit geben, den Vorgang abzubrechen.
Warnung: Führen Sie dieses Skript nicht blind auf Ihrem System aus. Dieses Skript löscht Dateien, die ÄLTER als 30 Tage sind, aus Ihrem
/var/log/-Verzeichnis. Dies dient nur zu Demonstrationszwecken. Sie müssen den Speicherort des Verzeichnisses ändern, bevor Sie es ausführen.
Hier ist ein Beispieldrehbuch:
In diesem Beispiel macht das Skript:
- Warn den Benutzer vor den Konsequenzen des Ausführens des Skripts.
- Fragt den Nutzer, ob er bestätigen möchte, dass er fortfahren will.
- Wenn der Benutzer 'y' eingibt, entfernt das Skript alle Protokolldateien, die älter als 30 Tage sind, mithilfe des
find-Befehls. - Wenn der Benutzer 'n' eingibt, bricht das Skript die Operation ab und zeigt eine Nachricht an.
- Wenn der Benutzer 'c' eingibt, beendet das Skript ohne weitere Aktion.
- Wenn der Benutzer etwas anderes eingibt, zeigt das Skript eine Fehlermeldung an und fordert den Benutzer erneut auf.
Dieses Skript bietet ein Sicherheitsnetz, um das versehentliche Löschen wichtiger Protokolldateien zu verhindern, und gibt dem Benutzer die Möglichkeit, seine Handlungen zu überdenken.
Dieses Skript dient nicht nur zum Löschen alter Protokolldateien. Sie können dieses Skript verwenden, um Dateien zu finden und zu löschen, die älter als X Tage sind, aus jedem Verzeichnis. Bearbeiten Sie einfach dieses Skript und ändern Sie den Speicherort des Protokollverzeichnisses auf etwas anderes.
Beispiel 3: Dateien von einem Verzeichnis in ein anderes kopieren
Angenommen, Sie schreiben ein Skript, um Dateien von einem Quellverzeichnis in ein Zielverzeichnis zu kopieren. Sie möchten den Benutzer auffordern, die Operation zu bestätigen, bevor Sie fortfahren, insbesondere wenn das Zielverzeichnis bereits Dateien mit denselben Namen enthält.
Hier ist ein Beispieldrehbuch:
Aktualisieren Sie die Werte von SOURCE_DIR und DEST_DIR in Ihrem Skript. Stellen Sie außerdem sicher, dass der Benutzer die entsprechenden Berechtigungen für den Zielort hat.
In diesem Beispiel macht das Skript:
- Informiert den Benutzer über den Vorgang und seine möglichen Folgen (Überschreiben von Dateien).
- Fragt den Nutzer, ob er bestätigen möchte, dass er fortfahren will.
- Wenn der Benutzer 'y' eingibt, kopiert das Skript alle Dateien aus dem Quellverzeichnis in das Zielverzeichnis mit dem
cp-Befehl. - Wenn der Benutzer 'n' eingibt, bricht das Skript die Operation ab und zeigt eine Nachricht an.
- Wenn der Benutzer 'c' eingibt, beendet das Skript ohne etwas zu tun.
- Wenn der Benutzer etwas anderes eingibt, zeigt das Skript eine Fehlermeldung an und fordert den Benutzer erneut auf.
Dieses Skript bietet ein Sicherheitsnetz, um ein versehentliches Überschreiben von Dateien zu verhindern, und ermöglicht es dem Benutzer, seine Handlungen zu überdenken.
Fazit
In diesem Tutorial haben wir gelernt, wie man interaktive Bash-Shell-Skripte erstellt, die den Benutzer Fragen mit Ja, Nein oder Abbrechen stellen und dann seine Antwort verwenden, um Entscheidungen zu treffen.
Zu Demonstrationszwecken haben wir den Befehl read verwendet, um Benutzereingaben zu erhalten, und dann if- und case-Anweisungen verwendet, um die Antwort des Benutzers zu beurteilen und die entsprechende Aktion auszuführen.
Dies ist nicht der einzige Weg, interaktive Shell-Skripte in Linux zu erstellen, aber es ist eine effektive Methode. Es gibt auch andere Möglichkeiten, aber ich bevorzuge die Verwendung des read-Befehls wegen seiner Einfachheit.
Interessierst du dich für Bash-Scripting? Wir haben eine Menge Bash-Scripting-Tutorials für Anfänger und fortgeschrittene Benutzer veröffentlicht. Schau dir den folgenden Link an, um Bash-Scripting bequem zu lernen:
- Einführung in Bash-Skripting | Bash-Shell-Skripting-Tutorial für Anfänger




