![Linux-Laptop mit einem Terminalfenster mit einem Globusmuster im Hintergrund und einem binären Wasserzeichen](https://www.howtogeek.com/wp-content/uploads/2023/02/fatmawati-achmad-zaenuri-321627716.png?width=1198&trim=1,1&bg-color=000&pad=1,1)
Verwenden Sie die if-Anweisung von Linux Bash, um bedingte Ausdrücke mit an zu erstellen if
then
fi
Struktur. Hinzufügen elif
Schlüsselwörter für zusätzliche bedingte Ausdrücke oder die else
Schlüsselwort, um einen Catch-all-Codeabschnitt zu definieren, der ausgeführt wird, wenn keine vorherige Bedingungsklausel ausgeführt wurde.
Alle nicht-trivialen Bash-Skripte müssen Entscheidungen treffen. Die if-Anweisung von Bash lässt Ihr Linux-Skript Fragen stellen und je nach Antwort verschiedene Codeabschnitte ausführen. So funktionieren sie.
Was ist bedingte Ausführung?
In allen außer den trivialsten Bash-Skripten muss der Ausführungsfluss je nach Ergebnis einer Entscheidung einen anderen Pfad durch das Skript nehmen. Dies wird als bedingte Ausführung bezeichnet.
Eine Möglichkeit zu entscheiden, welcher Ausführungszweig gewählt werden soll, ist die Verwendung von an if
Stellungnahme. Sie könnten hören if
Aussagen genannt if then
Aussagen bzw if then else
Aussagen. Es sind unterschiedliche Namen für dasselbe.
Der if
Aussage besagt, wenn etwas wahr ist, dann tue es Das. Aber wenn etwas falsch ist, tu es Das stattdessen. Das „Etwas“ kann vieles sein, z. B. der Wert einer Variablen, das Vorhandensein einer Datei oder ob zwei Zeichenfolgen übereinstimmen.
Die bedingte Ausführung ist für jedes sinnvolle Skript von entscheidender Bedeutung. Ohne sie sind Sie sehr eingeschränkt in dem, was Sie mit Ihrem Skript erreichen können. Wenn es keine sinnvollen Entscheidungen treffen kann, werden Sie nicht in der Lage sein, reale Probleme zu nehmen und praktikable Lösungen zu produzieren.
Der if
-Anweisung ist wahrscheinlich das am häufigsten verwendete Mittel, um eine bedingte Ausführung zu erhalten. So verwenden Sie es in Bash-Skripten.
VERWANDT: So überprüfen Sie, ob eine Datei in Linux-Bash-Skripten vorhanden ist
Ein einfaches Beispiel für eine If-Anweisung
Dies ist die kanonische Form der einfachsten if
Stellungnahme:
if [ this-condition-is-true ] then execute-these-statements fi
Wenn die Bedingung im Text wahr wird, werden die Skriptzeilen in der then
Klausel ausgeführt werden. Wenn Sie Skripte durchsehen, die von anderen geschrieben wurden, sehen Sie möglicherweise die if
Aussage so geschrieben:
if [ this-condition-is-true ]; then execute-these-statements fi
Einige Punkte zu beachten:
- Der
if
Die Erklärung wird schriftlich abgeschlossenfi
. - Es muss ein Leerzeichen vorhanden sein nach die erste Klammer ”
[
” and before the second bracket ”]
“ des Bedingungstests. - Wenn Sie das setzen
then
Schlüsselwort in der gleichen Zeile wie der bedingte Test, stellen Sie sicher, dass Sie ein Semikolon verwenden ”;
” nach dem Test.
Wir können optional hinzufügen else
-Klausel, um Code auszuführen, wenn sich der Bedingungstest als falsch erweist. Der else
Klausel braucht kein a then
Stichwort.
if [ this-condition-is-true ] then execute-these-statements else execute-these-statements-instead fi
Dieses Skript zeigt ein einfaches Beispiel für eine if
Anweisung, die ein verwendet else
Klausel. Der Bedingungstest überprüft, ob das Alter des Kunden größer oder gleich 21 ist. Wenn dies der Fall ist, kann der Kunde das Gelände betreten und die then
Klausel ausgeführt wird. Wenn sie nicht alt genug sind, die else
Klausel ausgeführt wird, und sie dürfen nicht hinein.
#!/bin/bash customer_age=25 if [ $customer_age -ge 21 ] then echo "Come on in." else echo "You can't come in." fi
Kopieren Sie das obige Skript in einen Editor, speichern Sie es als Datei namens „if-age.sh“ und verwenden Sie die chmod
Befehl, um es ausführbar zu machen. Sie müssen dies mit jedem der Skripte tun, die wir besprechen.
chmod +x if-age.sh
Lassen Sie uns unser Skript ausführen.
./if-age.sh
Jetzt bearbeiten wir die Datei und verwenden ein Alter unter 21.
customer_age=18
Nehmen Sie diese Änderung an Ihrem Skript vor und speichern Sie Ihre Änderungen. Wenn wir es jetzt ausführen, gibt die Bedingung false zurück und die else-Klausel wird ausgeführt.
./if-age.sh
Die elif-Klausel
Der elif
-Klausel fügt zusätzliche bedingte Tests hinzu. Sie können so viele haben elif
Klauseln wie Sie möchten. Sie werden der Reihe nach ausgewertet, bis sich herausstellt, dass einer von ihnen wahr ist. Wenn keiner der elif
Bedingte Tests erweisen sich als wahr, die else
Klausel, falls vorhanden, wird ausgeführt.
Dieses Skript fragt nach einer Zahl und sagt Ihnen dann, ob sie ungerade oder gerade ist. Null ist eine gerade Zahlalso müssen wir nichts testen.
Alle anderen Zahlen werden getestet, indem die gefunden werden modulo einer Division durch zwei. In unserem Fall ist das Modulo der Bruchteil des Ergebnisses einer Division durch zwei. Wenn es keinen Bruchteil gibt, ist die Zahl genau durch zwei teilbar. Daher ist es eine gerade Zahl.
#!/bin/bash echo -n "Enter a number: " read number if [ $number -eq 0 ] then echo "You entered zero. Zero is an even number." elif [ $(($number % 2)) -eq 0 ] then echo "You entered $number. It is an even number." else echo "You entered $number. It is an odd number." fi
Um dieses Skript auszuführen, kopieren Sie es in einen Editor und speichern Sie es als “if-even.sh”. Verwenden Sie dann chmod, um es ausführbar zu machen.
Lassen Sie uns das Skript ein paar Mal ausführen und seine Ausgabe überprüfen.
./if-even.sh
Das funktioniert alles bestens.
Verschiedene Formen des Bedingungstests
Die Klammern“ []
” Wir haben für unsere bedingten Tests eine Abkürzung für den Aufruf von verwendet test
Programm. Deswegen die ganzen Vergleiche und Tests test
Unterstützungen stehen Ihnen zur Verfügung if
Stellungnahme.
Das ist nur ein paar von ihnen:
- ! Ausdruck: True, wenn der Ausdruck falsch ist.
- -n Zeichenfolge: True, wenn die Länge des Strings größer als Null ist.
- -z Zeichenfolge: True, wenn die Länge der Zeichenfolge Null ist. Das heißt, es ist eine leere Zeichenfolge.
- Zeichenfolge1 = Zeichenfolge2: Wahr, wenn Zeichenfolge1 mit Zeichenfolge2 identisch ist.
- Zeichenfolge1 != Zeichenfolge2: True, wenn string1 nicht gleich string2 ist.
- Ganzzahl1 -eq Ganzzahl2: True, wenn integer1 numerisch gleich integer2 ist
- Ganzzahl1 -qt Ganzzahl2: True, wenn integer1 numerisch größer als integer2 ist
- Ganzzahl1 -lt Ganzzahl2: True, wenn integer1 numerisch kleiner als integer2 ist
- -d Verzeichnis: True, wenn das Verzeichnis existiert.
- -E-Datei: True, wenn die Datei existiert.
- -s-Datei: True, wenn die Datei mit einer Größe von mehr als Null existiert.
- -r Datei: True, wenn die Datei existiert und die Leseberechtigung gesetzt ist.
- -w Datei: True, wenn die Datei existiert und die Schreibberechtigung gesetzt ist.
- -x Datei: True, wenn die Datei existiert und die Ausführungsberechtigung gesetzt ist.
In der Tabelle können „Datei“ und „Verzeichnis“ Verzeichnispfade enthalten, entweder relative oder absolute.
Das Gleichheitszeichen „=
“ und der Gleichheitstest -eq
Sind nicht das gleiche. Das Gleichheitszeichen bewirkt a Charakter für Charakter Textvergleich. Der Gleichheitstest führt a numerisch Vergleich.
Wir können dies sehen, indem wir die verwenden test
Programm auf der Kommandozeile.
test "this string" = "this string"
test "this string" = "that string"
test 1 = 001
test 1 -eq 001
Wir verwenden jeweils die echo
Befehl, um den Rückkehrcode des letzten Befehls auszugeben. Null bedeutet wahr, Eins bedeutet falsch.
Verwendung des Gleichheitszeichens ” =
“ gibt uns eine falsche Antwort, wenn wir 1 mit 001 vergleichen. Das ist richtig, weil es sich um zwei verschiedene Zeichenfolgen handelt. Numerisch sie haben den gleichen Wert – eins – also die -eq
Der Operator gibt eine wahre Antwort zurück.
Wenn Sie in Ihrem bedingten Test Wildcard-Matching verwenden möchten, verwenden Sie die doppelte Klammer ” [[ ]]
” Syntax.
#!/bin/bash if [[ $USER == *ve ]] then echo "Hello $USER" else echo "$USER does not end in 've'" fi
Dieses Skript überprüft den Kontonamen des aktuellen Benutzers. Wenn es auf „ve
“, druckt es den Benutzernamen. Wenn es nicht endet in ” ve
“, sagt das Drehbuch und endet.
./if-wild.sh
VERWANDT: Bedingtes Testen in Bash: if, then, else, elif
Verschachtelte If-Anweisungen
Sie können ein setzen if
Aussage in einem anderen if
Stellungnahme.
Das ist vollkommen akzeptabel, aber Verschachtelung if
-Anweisungen führt zu Code, der weniger leicht zu lesen und schwieriger zu warten ist. Wenn Sie feststellen, dass Sie mehr als zwei oder drei Ebenen verschachteln if
-Anweisungen müssen Sie wahrscheinlich die Logik Ihres Skripts neu organisieren.
Hier ist ein Skript, das den Tag als Zahl von eins bis sieben erhält. Eins ist Montag, sieben ist Sonntag.
Es teilt uns die Öffnungszeiten eines Geschäfts mit. Wenn es ein Wochentag oder Samstag ist, meldet es, dass das Geschäft geöffnet ist. Wenn es ein Sonntag ist, meldet es, dass der Laden geschlossen ist.
Wenn der Laden geöffnet ist, wird das verschachtelt if
Aussage macht einen zweiten Test. Wenn der Tag Mittwoch ist, sagt es uns, dass es nur morgens geöffnet ist.
#!/bin/bash # get the day as a number 1..7 day=$(date +"%u") if [ $day -le 6 ] then ## the shop is open if [ $day -eq 3 ] then # Wednesday is half-day echo "On Wednesdays we open in the morning only." else # regular week days and Saturday echo "We're open all day." fi else # not open on Sundays echo "It's Sunday, we're closed." fi
Kopieren Sie dieses Skript in einen Editor, speichern Sie es als Datei namens „if-shop.sh“ und machen Sie es mit dem ausführbar chmod
Befehl.
Wir haben das Skript einmal ausgeführt und dann die Uhr des Computers auf Mittwoch geändert und das Skript erneut ausgeführt. Wir änderten dann den Tag auf einen Sonntag und liefen es noch einmal.
./if-shop.sh
./if-shop.sh
./if-shop.sh
VERWANDT: So verwenden Sie bedingte Tests mit doppelter Klammer in Linux
Der Fall Für wenn
Die bedingte Ausführung ist das, was der Programmierung und Skripterstellung und den Bescheidenen Macht verleiht if
-Anweisung ist möglicherweise die am häufigsten verwendete Methode, um den Ausführungspfad innerhalb des Codes zu wechseln. Aber das bedeutet nicht, dass es immer die Antwort ist.
Guten Code zu schreiben bedeutet, zu wissen, welche Möglichkeiten man hat und welche man am besten nutzt, um eine bestimmte Anforderung zu lösen. Der if
Aussage ist großartig, aber lassen Sie es nicht das einzige Werkzeug in Ihrer Tasche sein. Achten Sie insbesondere auf die case
Anweisung, die in einigen Szenarien eine Lösung sein kann.
VERWANDT: So verwenden Sie Case-Anweisungen in Bash-Skripten