GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash if elif else Statement:Ein umfassendes Tutorial

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 String Defined speichern .
  • Zeilen 2-4 gib die Variablen auf der Konsole aus. In diesem Moment outer_variable hat eine Zeichenfolge darin gespeichert, während inner_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 die outer_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-Code 0 .
  • 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 setzt a 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.


Linux
  1. So verwenden Sie die Bedingungsanweisung if else in Bash-Skript

  2. Ein einfaches Bash-Vervollständigungs-Tutorial?

  3. Bash-If-Else-Anweisung mit Beispielen

  4. 4 Beispiele für Awk-If-Anweisungen ( if, if else, if else if, :? )

  5. 4 Beispiele für Bash-If-Anweisungen ( If then fi, If then else fi, If elif else fi, Nested if )

Bash Exit-Befehl und Exit-Codes

Bash-Scripting-Tutorial für Anfänger

Bash Heredoc-Tutorial für Anfänger

Bash-Skripting – Case-Statement

Bash If Else Syntax mit Beispielen

Bash If Else und andere bedingte Anweisungen verstehen