Wenn Sie mit Bash und Shell-Skripten arbeiten, müssen Sie möglicherweise Bedingungen verwenden in Ihrem Skript.
Bei der Programmierung sind Bedingungen von entscheidender Bedeutung:Sie werden verwendet, um zu bestätigen, ob einige Bedingungen wahr sind oder nicht.
In diesem Tutorial konzentrieren wir uns auf eine der bedingten Anweisungen der Bash-Sprache:die Bash if else-Anweisung.
Wir werden sehen, wie Sie diese Anweisung verwenden können, um Ihre Skripte bedingt auszuführen.
Sie werden auch lernen, wie Sie verschachtelte Bash if else verwenden können Anweisungen, um komplexeren Code zu erstellen.
Bash-If-Else-Anweisung
Um eine Bash „if else“-Anweisung auszuführen, müssen Sie vier verschiedene Schlüsselwörter verwenden:if, then, else und fi :
- wenn :stellt die Bedingung dar, die Sie prüfen möchten;
- dann :Wenn die vorherige Bedingung wahr ist, dann führe einen bestimmten Befehl aus;
- sonst :Wenn die vorherige Bedingung falsch ist, dann führe einen anderen Befehl aus;
- fi :schließt die „if, then, else“-Anweisung.
Wenn Sie die „if else“-Anweisung verwenden, müssen Sie Bedingungen in einfache oder doppelte eckige Klammern einschließen
if [[ condition ]]
then
<execute command>
else
<execute another command>
fi
Beachten Sie, dass die „ELSE“-Anweisung optional ist , wenn Sie es weglassen, wird nichts ausgeführt, wenn die Bedingung als falsch ausgewertet wird.
Hinweis :Sie müssen die Bedingung mit einem Leerzeichen von den eckigen Klammern trennen, sonst erhalten Sie möglicherweise einen Syntaxfehler.
If-Else-Beispiele
Jetzt wissen Sie mehr über die Bash „if else“ Anweisung, sehen wir uns an, wie Sie sie in realen Beispielen verwenden können.
In diesem Abschnitt werden wir ein Skript erstellen, das eine Nachricht ausgibt, wenn es vom Root-Benutzer ausgeführt wird.
Wenn das Skript nicht vom Root-Benutzer ausgeführt wird, wird es eine andere benutzerdefinierte Nachricht schreiben.
Um zu überprüfen, ob das Skript von root ausgeführt wird, müssen wir sehen, ob die UID des Aufrufers Null ist.
#!/bin/bash
# If the user is root, its UID is zero.
if [ $UID -eq 0 ]
then
echo "You are root!"
else
echo "You are not root."
fi

Wie bereits erwähnt, ist die Datei „else ”-Anweisung ist nicht obligatorisch.
Wenn wir in unserem zuvor erstellten Skript weglassen, können wir immer noch die erste „dann“-Anweisung ausführen.
#!/bin/bash
# If the user is root, its UID is zero.
if [ $UID -eq 0 ]
then
echo "You are root!"
fi

Was ist nun, wenn Sie Ihren Skripten zusätzliche „if“-Anweisungen hinzufügen möchten?
Bash-If-Elif-Anweisung
Die „Wenn Elif ”-Anweisung wird in Bash verwendet, um Ihren Skripten eine zusätzliche „if“-Anweisung hinzuzufügen.
Um eine Bash „if elif“-Anweisung auszuführen, müssen Sie fünf verschiedene Schlüsselwörter verwenden:if, then, elif, else und fi :
- wenn :stellt die Bedingung dar, die Sie prüfen möchten;
- dann :Wenn die vorherige Bedingung wahr ist, dann führe einen bestimmten Befehl aus;
- elif :wird verwendet, um Ihrer Aussage eine zusätzliche Bedingung hinzuzufügen;
- sonst :Wenn die vorherigen Bedingungen falsch sind, führe einen anderen Befehl aus;
- fi :schließt die „if, elif, then“-Anweisung.
if [[ condition ]]
then
<execute command>
elif [[ condition ]]
then
<execute another command>
else
<execute default command>
fi
Auch hier ist die „ELSE“-Anweisung optional, Sie können sie also weglassen, wenn Sie keine Standardanweisung benötigen.
if [[ condition ]]
then
<execute command>
elif [[ condition ]]
then
<execute another command>
fi
If Elif-Beispiele
In unserem vorherigen Abschnitt haben wir die „if else ”-Anweisung, um zu überprüfen, ob ein Benutzer root ist oder nicht.
In diesem Abschnitt prüfen wir, ob der Benutzer root ist oder ob der Benutzer eine UID von 1002 hat.
Wenn dies nicht der Fall ist, beenden wir das Skript und geben die Eingabeaufforderung an den Benutzer zurück.
if [[ $UID -eq 0 ]]
then
echo "You are root!"
elif [[ $UID -eq 1002 ]]
then
echo "You are user, welcome!"
else
echo "You are not welcome here."
exit 1;
fi

Herzlichen Glückwunsch, jetzt wissen Sie, wie Sie die Funktion „if elif“ verwenden ” Aussage!
Was nun, wenn Sie mehrere Bedingungen unter derselben „if“-Anweisung haben möchten?
Mehrere Bedingungen in If Else
Um mehrere Bedingungen in dieselbe „if else“-Anweisung zu schreiben, müssen Sie Ihre Bedingungen mit einem „AND“-Operator oder einem „OR“-Operator trennen.
# AND operator used in if else.
if [[ <condition_1> && <condition_2> ]];
then
<execute command>
fi
# OR operator used in if else.
if [[ <condition_1> || <condition_2> ]];
then
<execute_command>
else
<execute_another_command>
fi
Wenn Sie beispielsweise ein Skript schreiben möchten, das überprüft, ob Sie der Root-Benutzer sind und ob Sie die richtigen Parameter angegeben haben, würden Sie Folgendes schreiben:
#!/bin/bash
# If the user is root and the first parameter provided is 0.
if [[ $UID -eq 0 && $1 -eq 0 ]];
then
echo "You provided the correct parameters"
else
echo "Wrong parameters, try again"
fi

Verschachtelte If-Else-Anweisungen
In manchen Fällen möchte man verschachtelte Bedingungen implementieren, um Bedingungen unter Vorbedingungen prüfen zu lassen.
Um verschachtelte „if else“-Anweisungen zu haben, müssen Sie einfach die „if“-Anweisung in eine andere „if“-Anweisung einfügen und Ihre verschachtelte Anweisung vor der einschließenden schließen.
if [[ condition ]]
then
if [[ other condition ]]
then
<execute command>
else
<execute another command>
fi
fi
Hinweis :Stellen Sie sicher, dass Sie für jede „if“-Anweisung, die Sie öffnen, eine abschließende „fi“-Anweisung haben. Ein einzelnes „fi“ reicht einfach nicht für mehrere „if“-Anweisungen.
Beispiele für verschachtelte Anweisungen
Nehmen wir als Beispiel an, Sie möchten überprüfen, ob der Benutzer root ist, bevor Sie überprüfen, ob das erste bereitgestellte Argument null ist.
Um das zu lösen, würden Sie eine verschachtelte „if, then, else“-Anweisung auf folgende Weise schreiben:
#!/bin/bash
if [[ $UID -eq 0 ]]
then
if [[ $1 -eq 0 ]]
then
echo "You are allowed to execute this script."
else
echo "You should have provided 0 as the first argument."
fi
fi

Bash-Tests
Wie Sie wahrscheinlich bemerkt haben, haben wir in den vorherigen Abschnitten den „-eq“-Operator verwendet, um einen Variablenwert mit einer Zahl zu vergleichen.
Wir haben eine einfache Gleichheitsprüfung durchgeführt, aber was ist, wenn Sie eine Ungleichheitsprüfung wünschen?
Was wäre, wenn Sie beispielsweise prüfen möchten, ob ein Wert größer als eine bestimmte Zahl ist?
Dazu benötigen Sie Bash-Tests .
Bash-Tests sind eine Reihe von Operatoren, die Sie in Ihren Bedingungsanweisungen verwenden können, um Werte miteinander zu vergleichen.
Bash-Tests können durch Ausführen des Befehls „help test“ aufgelistet werden.
$ help test

Beim Schreiben von Bash-Tests haben Sie im Wesentlichen drei Möglichkeiten:
- Bedingungen in Dateien und Verzeichnisse schreiben :wenn sie existieren, wenn sie eine Zeichendatei, eine Gerätedatei und so weiter sind;
- Bedingungen auf Zahlen schreiben :wenn sie einander gleich sind, wenn einer größer ist als der andere;
- Bedingungen in Strings schreiben :wenn eine String-Variable gesetzt ist oder wenn zwei Strings gleich sind.
Bash-Dateibedingungen
Bash-Dateibedingungen werden verwendet, um zu prüfen, ob eine Datei existiert oder nicht, ob sie gelesen, geändert oder ausgeführt werden kann.
Bash-Dateitests werden in der folgenden Tabelle beschrieben:
Operator | Beschreibung |
-e | Überprüft, ob die Datei existiert oder nicht |
-d | Überprüft, ob die Datei ein Verzeichnis ist |
-b | Überprüft, ob die Datei ein Blockgerät ist |
-c | Überprüft, ob die Datei ein Zeichengerät ist |
f1 -nt f2 | Wenn Datei f1 neuer ist als Datei f2 |
f1 -ot f2 | Wenn Datei f1 älter ist als Datei f2 |
-r | Datei kann gelesen werden (Leseberechtigung) |
-w | Datei kann geändert werden (Schreibberechtigung) |
-x | Datei kann ausgeführt werden (Ausführberechtigung) |
Um beispielsweise zu überprüfen, ob eine Datei ein Verzeichnis ist, würden Sie das folgende Skript schreiben
#!/bin/bash
# Checking the first argument provided
if [[ -d $1 ]]
then
echo "This is a directory"
else
echo "Not a directory"
fi

Bash-Zahlenbedingungen
Bash-Zahlenbedingungen werden verwendet, um zwei Zahlen zu vergleichen:wenn sie gleich sind, wenn eine größer als eine andere oder niedriger als eine andere ist.
Hier ist eine Tabelle der am häufigsten verwendeten Bash-Zahlenbedingungen:
Operator | Beschreibung |
num1 -eq num2 | Überprüfen Sie, ob die Zahlen gleich sind |
num1 -ne num2 | Überprüfen Sie, ob die Zahlen nicht gleich sind |
num1 -lt num2 | Überprüfen, ob num1 kleiner als num2 ist |
num1 -le num2 | Kleiner oder gleich num2 |
num1 -gt num2 | Größer als Zahl2 |
num1 -ge num2 | Größer oder gleich num2 |
Um zum Beispiel zu prüfen, ob eine Zahl ungleich Null ist, würden Sie schreiben:
#!/bin/bash
# Checking the first argument provided
if [[ $1 -eq 0 ]]
then
echo "You provided zero as the first argument."
else
echo "You should provide zero."
fi
Bash-String-Bedingungen
Bash-String-Bedingungen werden verwendet, um zu prüfen, ob zwei Strings gleich sind oder ob ein String leer ist.
Hier ist eine Tabelle der wichtigsten Bash-String-Bedingungen:
Operator | Beschreibung |
str1 = str2 | Überprüft, ob Zeichenketten gleich sind oder nicht |
str1 != str2 | Überprüft, ob Zeichenfolgen unterschiedlich sind |
-z str1 | Überprüft, ob str1 leer ist |
-n str1 | Überprüft, ob str1 nicht leer ist |
Um beispielsweise zu überprüfen, ob ein Benutzer einen Wert für Ihr Skript bereitgestellt hat, würden Sie schreiben:
#!/bin/bash
# Checking the first argument provided
if [[ -n $1 ]]
then
echo "You provided a value"
else
echo "You should provide something"
fi
Schlussfolgerung
Im heutigen Tutorial haben Sie etwas über die Bash „If Else“-Anweisung gelernt
Sie haben anhand von Beispielen gesehen, dass Sie komplexere Anweisungen erstellen können:unter Verwendung von elif- und verschachtelten Anweisungen.
Schließlich haben Sie Bash-Tests entdeckt, was sie sind und wie sie verwendet werden, um Bedingungen in Skripten zu überprüfen.
Wenn Sie an Linux-Systemadministration interessiert sind, haben wir einen vollständigen Abschnitt auf der Website, der diesem gewidmet ist, also schauen Sie ihn sich unbedingt an!