Einführung
Bash-Skripte helfen bei der Automatisierung von Aufgaben auf Ihrem Computer. Der if elif else
-Anweisung in Bash-Skripten ermöglicht das Erstellen von bedingten Fällen und Antworten auf bestimmte Codeergebnisse. Der if
Bedingung hilft, einen Entscheidungsprozess während eines Programms zu automatisieren.
Dieser Artikel erklärt, was der if elif else
ist -Anweisung ist und zeigt die Syntax anhand verschiedener Beispiele.
Voraussetzungen
- Eine Maschine mit Linux-Betriebssystem.
- Zugriff auf die Befehlszeile/das Terminal.
- Zugriff auf einen Texteditor wie Vi/Vim.
Was ist die Bash-if-Anweisung?
Beim Programmieren ist der if
Anweisung ist ein bedingter Ausdruck. Der in der if
-Anweisung wird basierend auf dem Beendigungsstatus ausgewertet . Deshalb:
- Wenn der Befehl erfolgreich ausgeführt wird , ist der Exit-Status 0 .
- Wenn die Anweisung einen Fehler auslöst , ist der Exit-Status eine beliebige Zahl zwischen 1 und 255 .
Die Null für Erfolg und jeder Nicht-Null-Wert für Misserfolg scheint kontraintuitiv zu sein. In den meisten anderen Programmiersprachen steht null für falsch und eins (oder größer) für wahr. Beim Bash-Skripting gibt die UNIX-Konvention jedoch den Exit-Status anstelle eines Wahrheitswerts zurück, und die beiden sollten nicht verwechselt werden.
Testen Sie einen Beispielfehlerbefehl (1 größer als 100) im Terminal, indem Sie Folgendes ausführen:
test 1 -gt 100
Überprüfen Sie den Exit-Status mit dem echo-Befehl:
echo $?
Der Test gibt einen Beendigungscode 1
zurück , was darauf hinweist, dass der Ausdruck fehlgeschlagen ist.
Überprüfen Sie auf ähnliche Weise einen Beispielbefehl, der erfolgreich ausgewertet wird (1000 größer als 100), im Terminal mit:
test 1000 -gt 100
Drucken Sie den Exit-Status, um zu bestätigen, dass der Befehl erfolgreich war:
echo $?
Der Test gibt einen Beendigungscode 0
zurück , der zeigt, dass der Befehl ohne Fehler abgeschlossen wurde.
Bash if-Anweisungsbeispiel
Befolgen Sie die nachstehenden Anweisungen, um ein Bash-Beispielskript mit einem if
zu erstellen Aussage.
1. Öffnen Sie das Terminal (STRG +ALT +T ) und erstellen Sie ein Beispielskript, um zu testen, wie die Bash if
Anweisung funktioniert:
vi test_script.sh
2. Fügen Sie im Skript die folgenden Zeilen hinzu:
echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if test $VAR -gt 100
then
echo "It's greater than 100"
fi
echo Bye!
Jede Zeile im Skript bewirkt Folgendes:
- Zeilen 1-3 Anweisungen zur Eingabe einer Nummer über die Konsole bereitstellen. Die Zahl wird in eine Variable namens
VAR
eingelesen und gedruckt. - Zeile 4 startet das
if
-Anweisung und prüft direkt danach den Exit-Status für den Befehl ($VAR -gt 100
). - Zeilen 5-6 signalisiert den Start von auszuführenden Befehlen nur, wenn die Anweisung in Zeile 4 erfolgreich abgeschlossen wird (mit einem Exit-Status 0), was bedeutet, dass wir eine Zahl größer als 100 eingegeben haben.
- Zeile 7 signalisiert das Ende des
if
Erklärung. - Zeile 8 außerhalb der Anweisung liegt und wie erwartet ausgeführt wird, unabhängig von
if
Ergebnis.
3. Speichern und schließen Sie Vim:
:wq
4. Als nächstes machen Sie die Datei ausführbar:
chmod +x test_script.sh
5. Zuletzt führen Sie das Skript aus mit:
./test_script.sh
Das Skript gibt basierend auf der eingegebenen Zahl eine andere Meldung aus. Führen Sie das Skript mehrmals aus und testen Sie es auf andere Zahlen, um das Verhalten zu bestätigen.
Bash if-Anweisungssyntax
Die grundlegende Syntax für eine Bash if
Anweisung ist:
if <commands>
then
<commands>
fi
Jedes Schlüsselwort hat eine bestimmte Funktion:
if
signalisiert den Beginn der Aussage. Der Befehl direkt danach ist derjenige, in dem die Überprüfung des Ausgangsstatus angewendet wird.then
führt die Befehle nur aus, wenn die vorherige Überprüfung erfolgreich abgeschlossen wurde.fi
schließt die if-Anweisung.
Das Einschließen des Testbefehls in unterschiedliche Klammern führt zu unterschiedlichen Ausführungsmethoden für if
Erklärung. Die folgende Tabelle enthält eine kurze Beschreibung sowie einen Anwendungsfall für jeden Klammertyp.
Syntax | Was es ist | Wann zu verwenden |
---|---|---|
if ( <commands> ) | Subshell in einem Subprozess ausgeführt. | Wenn die Befehle die aktuelle Shell oder Umgebung betreffen. Die Änderungen bleiben nicht erhalten, wenn die Subshell abgeschlossen ist. |
if (( <commands> )) | Bash-Erweiterung. | Verwendung für arithmetische Operationen und Variablenmanipulation im C-Stil. |
if [ <commands> ] | Integriert in POSIX, Alias für test <commands> . | Zahlen vergleichen und prüfen, ob eine Datei existiert. |
if [[ <commands> ]] | Bash-Erweiterung, eine erweiterte Version von einfachen eckigen Klammern. | Zeichenfolge, die einem Platzhaltermuster entspricht. |
Nachfolgend finden Sie Beispiele für Bash-Skripte, die jeden Klammertyp mit einer ausführlicheren Erklärung verwenden.
Einfache Klammern-Syntax
Durch die Verwendung von einfachen Klammern in Bash-Skripten wird eine Subshell erstellt. In Kombination mit if
-Anweisung wird der Unterprozess beendet, bevor das Programm fortgesetzt wird. Der if
analysiert den Exit-Status und handelt entsprechend.
Die Bash if
Anweisung mit einfachen Klammern sieht die Syntax wie folgt aus:
if ( <commands> )
then
<commands>
fi
Probieren Sie das folgende Beispiel aus, um zu sehen, wie sich der Unterprozess zusammen mit if
verhält Aussage:
1. Erstellen Sie das Skript mit Vim:
vi single_parentheses.sh
2. Fügen Sie dem Skript die folgenden Codezeilen hinzu:
outer_variable=Defined
echo Before if:
echo inner_variable = $inner_variable
echo outer_variable = $outer_variable
if (
echo Inside subshell:
inner_variable=Defined
echo inner_variable = $inner_variable
outer_variable=Changed
echo outer_variable = $outer_variable
)
then
echo After then:
echo inner_variable = $iner_variable
echo outer_variable = $outer_variable
fi
echo After fi:
echo inner_variable = $inner_variable
echo outer_variable = $outer_variable
Das Programm macht folgendes:
- Zeile 1 erstellt eine Variable namens
outer_variable
in dem wir einen StringDefined
speichern . - Zeilen 2-4 gib die Variablen auf der Konsole aus. In diesem Moment
outer_variable
hat eine Zeichenfolge darin gespeichert, währendinner_variable
ist leer. - Zeile 5 startet das
if
-Anweisung und einen Unterprozess, getrennt durch einfache Klammern. - Zeile 6-11 Speichern Sie eine Zeichenfolge innerhalb der
inner_variable
und ändern Sie dieouter_variable
zu einer anderen Saite. Beide Werte werden auf der Konsole ausgegeben, und der Unterprozess endet mit einem Exit-Code. In diesem Fall endet der Teilprozess erfolgreich mit einem Exit-Code0
. - Zeile 12-16 nach dem Unterprozess ausführen und die Variablenwerte drucken. Die Werte ändern sich jedoch wieder zu dem, was sie vor dem
if
waren Erklärung. Der Subprozess speichert die Werte nur lokal und nicht global. - Zeilen 16-19 nach den Befehlen im
then
ausführen Klausel. Außerhalb der Anweisung bleiben die Werte unverändert.
3. Speichern Sie das Skript und schließen Sie den Editor:
:wq
4. Machen Sie das Skript ausführbar:
chmod +x single_parentheses.sh
5. Führen Sie zuletzt das Beispiel aus, um die Ergebnisse zu testen:
./single_parentheses.sh
Die Ausgabe gibt die Variablenzustände aus, während das Programm fortschreitet.
Doppelte Klammern-Syntax
Die Syntax mit doppelten Klammern für eine Bash if
Anweisung ist:
if (( <commands> ))
then
<commands>
fi
Das Konstrukt mit doppelten Klammern in Bash erlaubt:
- Arithmetische Auswertung . Definieren einer Variablen als
a=$(( 1+1 ))
berechnet die Gleichung und setzta
bis 2. - Variablenmanipulation im C-Stil. Beispiel:Inkrementieren von Variablen mit
(( a++ ))
.
Bei Verwendung der Syntax mit doppelten Klammern in einem if
Aussage verhält sich die Auswertung anders. Angenommen, der Ausdruck ergibt 0
, dann das if
Test nicht bestanden.
Probieren Sie das folgende Beispiel aus, um zu sehen, wie doppelte Klammern funktionieren:
1. Erstellen Sie ein Bash-Skript im Terminal:
vi double_parentheses.sh
2. Fügen Sie den folgenden Code zu double_parentheses.sh hinzu :
variable=-2
echo Before first if: $variable
if (( variable++ ))
then
echo Incremented ++ style: $variable
fi
echo After first if: $variable
if (( variable=variable+1 ))
then
echo Incremented arithmetically $variable
fi
echo After second if: $variable
Jede Zeilennummer im Skript bewirkt Folgendes:
- Zeile 1 definiert eine Variable und setzt den Wert auf
-2
. - Zeilen 3-5 erhöht den Wert im C-Stil in doppelten Klammern und überprüft den Wert. Wenn die Variable nicht Null ist, gibt if eine Nachricht an die Konsole aus.
- Zeilen 8-10 erhöht die Variable unter Verwendung der regulären arithmetischen Notation um eins und gibt eine Meldung aus, wenn die Variable nicht Null ist.
3. Speichern Sie das Skript und schließen Sie Vim:
:wq
4. Ändern Sie die Skriptberechtigungen in ausführbar:
chmod +x double_parentheses.sh
5. Führen Sie das Skript aus, um die Ergebnisse anzuzeigen:
./double_parentheses.sh
Syntax mit einzelnen Klammern
Die einfache Klammer ist ein anderer Name für test
Befehl und ein Standard-POSIX-Dienstprogramm, das für alle Shells verfügbar ist. Die grundlegende Syntax ist:
if [ <commands> ]
then
<commands>
fi
Die erste Bash if
Beispiel in diesem Tutorial (test_script.sh ) funktioniert genauso gut mit der alternativen Syntax:
echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if [ $VAR -gt 100 ]
then
echo "It's greater than 100"
fi
echo Bye!
Führen Sie das Skript aus, um zu bestätigen, dass die Ausgabe gleichwertig ist. Führen Sie für die vollständige Dokumentation und Details zur Verwendung der Klammersyntax den Befehl man auf test
aus Dienstprogramm:
man test
Double-Bracket-Syntax
Die Syntax mit doppelten Klammern in Bash if
scripts ist die beste Option, wenn Portabilität nicht erforderlich ist. Die doppelten Klammern sind den einfachen Klammern überlegen und beinhalten viele erweiterte Optionen. Die Syntax lautet:
if [[ <commands> ]]
then
<commands>
fi
Probieren Sie das folgende Beispiel aus, um zu sehen, wie der Wildcard-String-Abgleich in einem if
funktioniert Befehl:
1. Erstellen Sie eine Shell-Skriptdatei namens double_brackets :
vi double_brackets.sh
2. Fügen Sie den folgenden Code hinzu:
if [[ $USER == k* ]]
then
echo Hello $USER
fi
echo Bye!
3. Das Skript prüft, ob der Anfangsbuchstabe des Benutzernamens k
ist und sendet eine Hallo-Nachricht, wenn dies der Fall ist. Speichern und schließen Sie das Skript:
:wq
4. Machen Sie die Datei mit chmod ausführbar:
chmod +x double_brackets.sh
5. Führen Sie das Programm aus mit:
./double_brackets.sh
Andere Arten von bedingten Bash-Anweisungen
Der if
-Anweisung führt nur eine bedingte Prüfung durch. Ändern Sie if
mit anderen Arten von Bash-Bedingungen, um komplexe Bewertungen zu erstellen.
if else-Anweisung
Der if else
-Anweisung bietet eine Methode zum Definieren verschiedener Aktionen basierend auf der Ausgabe der geprüften Bedingung. Die grundlegende Syntax ist:
if <command>
then
<commands>
else
<commands>
fi
Das folgende Beispiel zeigt, wie die if else
Bedingte Werke:
1. Erstellen Sie ein neues Skript mit Vim:
vi if_else.sh
2. Fügen Sie den folgenden Code in das Skript ein:
echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if [ $VAR -gt 100 ]
then
echo "It's greater than 100"
else
echo "It's less than 100"
fi
echo Bye!
Die Anweisung prüft die Befehlsausgabe in Zeile 4 und druckt eine beschreibende Nachricht basierend auf dem Ergebnis:
- Wenn die eingegebene Zahl größer als 100 ist , springt das Programm in Zeile 6 und druckt die Nachricht.
- Wenn die Zahl kleiner als 100 ist , die Nachricht im
else
Klausel (Zeile 8 ) wird auf der Konsole ausgegeben.
3. Speichern Sie das Skript und schließen Sie Vim:
:wq
4. Machen Sie das Skript ausführbar:
chmod +x if_else.sh
5. Zuletzt führen Sie das Skript mehrmals aus und testen es auf verschiedene Werte:
./if_else.sh
if elif-Anweisung
Der elif
-Klausel kombiniert mit if else
-Anweisung erstellt mehrere Bedingungsprüfungen. Der if elif
erstellt eine Reihe von Prüfungen mit unterschiedlichen Ergebnissen. Die Syntax lautet:
if <command>
then
<commands>
elif <command>
then
<commands>
else
<commands>
fi
So erstellen Sie ein Skript mit elif
:
1. Erstellen Sie eine Shell-Datei namens elif :
vi elif.sh
2. In der elif.sh Datei, fügen Sie den folgenden Beispielcode hinzu:
echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if [ $VAR -gt 100 ]
then
echo "It's greater than 100"
elif [ $VAR -lt 100 ]
then
echo "It's less than 100"
else
echo "It's exactly 100"
fi
echo Bye!
Das Beispiel fügt ein elif
hinzu prüfen Sie in Zeile 7 um zu sehen, ob die eingegebene Zahl kleiner als 100 ist. Wenn die Anweisungen in den Zeilen 4 und 7 beide fehlschlagen, springt das Programm zur else-Klausel.
3. Speichern und schließen Sie die Datei:
:wq
4. Erstellen Sie die Datei elif.sh ausführbare Datei:
chmod +x elif.sh
5. Führen Sie das Skript mehrmals aus und prüfen Sie das Verhalten für verschiedene Nummern:
./elif.sh
Fügen Sie mehrere elif
hinzu Klauseln, um die Anweisung für weitere detaillierte Prüfungen zu verzweigen. Für Fälle, in denen der if
und elif
Musterserie wächst, ist es besser, einen case
zu verwenden Aussage.
Verschachtelte if-Anweisung
Verschachteltes if
-Anweisungen fügen innerhalb des if
eine Verzweigung hinzu . Insbesondere wenn ein Befehl die erste if-Prüfung besteht, durchläuft er eine neue Prüfung, um das Ergebnis weiter zu filtern. Die Syntax lautet:
if <commands>
then
if <commands>
then
<commands>
fi
fi
Das verschachtelte if wird häufig verwendet, um mehrdimensionale Arrays zu durchsuchen. Vermeiden Sie jedoch mehr als zwei oder drei verschachtelte if
Anweisungen zur Verringerung der Programmkomplexität. Überdenken Sie die Logik des Codes, wenn der verschachtelte if
wächst weiter in die Tiefe.