So verwenden Sie Bash-If-Anweisungen (mit 4 Beispielen)

Veröffentlicht: 2023-05-08
Linux-Laptop mit einem Terminalfenster mit einem Globusmuster im Hintergrund und einem binären Wasserzeichen
Fatmawati Achmad Zaenuri/Shutterstock
Verwenden Sie die if-Anweisung von Linux Bash, um bedingte Ausdrücke mit einer if then fi Struktur zu erstellen. Fügen Sie elif Schlüsselwörter für zusätzliche bedingte Ausdrücke oder das else Schlüsselwort hinzu, um einen Catch-all-Codeabschnitt zu definieren, der ausgeführt wird, wenn keine vorherige bedingte Klausel 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 genommen werden soll, ist die Verwendung einer if Anweisung. Sie können if Anweisungen hören, die if then -Anweisungen oder if then else -Anweisungen bezeichnet werden. Es sind unterschiedliche Namen für dasselbe.

9 Beispiele für for-Schleifen in Linux-Bash-Skripten
RELATED 9 Beispiele für for-Schleifen in Linux-Bash-Skripten

Die if Anweisung sagt, wenn etwas wahr ist, dann tue dies . Aber wenn das Etwas falsch ist, tun Sie 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 finden.

Die if Anweisung ist wahrscheinlich das am häufigsten verwendete Mittel, um eine bedingte Ausführung zu erreichen. 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 Anweisung:

 wenn [diese-bedingung-ist-wahr]
Dann
  Führe-diese-Anweisungen aus
fi

Wenn die Bedingung im Text wahr wird, werden die Skriptzeilen in der then Klausel ausgeführt. Wenn Sie Skripte durchsehen, die von anderen geschrieben wurden, sehen Sie möglicherweise die if Anweisung in folgender Form:

 wenn [diese-bedingung-ist-wahr]; Dann
  Führe-diese-Anweisungen aus
fi

Einige Punkte zu beachten:

  • Die if Anweisung wird abgeschlossen, indem fi geschrieben wird.
  • Nach der ersten Klammer ” [ ” und vor der zweiten Klammer ” ] ” des Bedingungstests muss ein Leerzeichen stehen.
  • Wenn Sie das Schlüsselwort then in dieselbe Zeile wie den Bedingungstest setzen, stellen Sie sicher, dass Sie ein Semikolon verwenden ” ; " nach dem Test.

Wir können eine optionale else Klausel hinzufügen, um Code auszuführen, wenn sich der Bedingungstest als falsch erweist. Die else Klausel benötigt kein then Schlüsselwort.

 wenn [diese-bedingung-ist-wahr]
Dann
  Führe-diese-Anweisungen aus
anders
  führe stattdessen diese Anweisungen aus
fi

Dieses Skript zeigt ein einfaches Beispiel einer if Anweisung, die eine else Klausel verwendet. Der Bedingungstest prüft, ob das Alter des Kunden größer oder gleich 21 ist. Ist dies der Fall, kann der Kunde das Gelände betreten, und die then -Klausel wird ausgeführt. Wenn sie nicht alt genug sind, wird die else Klausel ausgeführt und sie dürfen nicht hinein.

 #!/bin/bash

Kundenalter=25

wenn [ $Kunden_Alter -ge 21 ]
Dann
  echo "Komm rein."
anders
  Echo "Du kannst nicht reinkommen."
fi

Kopieren Sie das obige Skript in einen Editor, speichern Sie es als Datei namens „if-age.sh“ und machen Sie es mit dem Befehl chmod ausführbar. Sie müssen dies mit jedem der Skripte tun, die wir besprechen.

 chmod +x if-age.sh 

Verwenden von chmod, um ein Skript ausführbar zu machen

Lassen Sie uns unser Skript ausführen.

 ./if-age.sh 

Ausführen des Skripts if-age.sh mit auf 25 gesetzter Altersvariable

Jetzt bearbeiten wir die Datei und verwenden ein Alter unter 21.

 Kundenalter=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 

Ausführen des Skripts if-age.sh mit auf 18 gesetzter Altersvariable

Die elif-Klausel

Die elif Klausel fügt zusätzliche bedingte Tests hinzu. Sie können so viele elif Klauseln haben, wie Sie möchten. Sie werden der Reihe nach ausgewertet, bis sich herausstellt, dass einer von ihnen wahr ist. Wenn sich keiner der elif Bedingungstests als wahr erweist, wird die else Klausel, falls vorhanden, ausgeführt.

Dieses Skript fragt nach einer Zahl und sagt Ihnen dann, ob sie ungerade oder gerade ist. Null ist eine gerade Zahl, also müssen wir nichts testen.

Alle anderen Zahlen werden getestet, indem der Modulo einer Division durch zwei ermittelt wird. 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 "Geben Sie eine Zahl ein: "

Nummer lesen

if [ $zahl -eq 0 ]
Dann
  echo "Sie haben Null eingegeben. Null ist eine gerade Zahl."
elif [ $(($number % 2)) -eq 0 ]
Dann
  echo "Sie haben $Zahl eingegeben. Es ist eine gerade Zahl."
anders
  echo "Sie haben $Zahl eingegeben. Es ist eine ungerade Zahl."
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 

Ausführen des if-even.sh-Skripts mit verschiedenen Eingaben

Das funktioniert alles bestens.

Verschiedene Formen des Bedingungstests

Die eckigen Klammern „ [] “, die wir für unsere bedingten Tests verwendet haben, sind eine Abkürzung für den Aufruf des test . Aus diesem Grund stehen alle Vergleiche und Tests, die test unterstützt, für Ihre if Anweisung zur Verfügung.

Dies sind nur einige davon:

  • ! expression : True, wenn der Ausdruck falsch ist.
  • -n Zeichenfolge : Wahr, wenn die Länge der Zeichenfolge größer als Null ist.
  • -z Zeichenfolge : Wahr, wenn die Länge der Zeichenfolge Null ist. Das heißt, es ist eine leere Zeichenfolge.
  • string1 = string2 : Wahr, wenn string1 mit string2 identisch ist.
  • string1 != string2 : True, wenn string1 nicht gleich string2 ist.
  • integer1 -eq integer2 : True, wenn integer1 numerisch gleich integer2 ist
  • integer1 -qt integer2 : True, wenn integer1 numerisch größer als integer2 ist
  • integer1 -lt integer2 : True, wenn integer1 numerisch kleiner als integer2 ist
  • -d Verzeichnis : Wahr, wenn das Verzeichnis existiert.
  • -e Datei : True, wenn die Datei existiert.
  • -s file : True, wenn die Datei mit einer Größe von mehr als Null existiert.
  • -r file : True, wenn die Datei existiert und die Leseberechtigung gesetzt ist.
  • -w file : True, wenn die Datei existiert und die Schreibberechtigung gesetzt ist.
  • -x Datei : Wahr, 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 identisch. Das Gleichheitszeichen führt einen zeichenweisen Textvergleich durch. Der Gleichheitstest führt einen numerischen Vergleich durch.

Wir können dies sehen, indem wir das test auf der Befehlszeile verwenden.

 test "diese Zeichenfolge" = "diese Zeichenfolge"
 test "diese Zeichenfolge" = "diese Zeichenfolge"
 Test 1 = 001
 test 1 -eq 001

In jedem Fall verwenden wir den echo Befehl, um den Rückgabecode des letzten Befehls auszugeben. Null bedeutet wahr, Eins bedeutet falsch.

Verwenden des Testprogramms auf der Befehlszeile, um verschiedene Vergleiche zu testen

Die 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 haben sie denselben Wert – eins –, sodass der Operator -eq eine wahre Antwort zurückgibt.

Wenn Sie Wildcard-Matching in Ihrem bedingten Test verwenden möchten, verwenden Sie die Syntax mit doppelten Klammern „ [[ ]] “.

 #!/bin/bash

wenn [[ $USER == *ve ]]
Dann
  echo "Hallo $USER"
anders
  echo "$USER endet nicht auf 've'"
fi

Dieses Skript überprüft den Kontonamen des aktuellen Benutzers. Wenn es auf „ ve “ endet, gibt es den Benutzernamen aus. Wenn es nicht auf „ ve “ endet, teilt Ihnen das Skript dies mit und endet.

 ./if-wild.sh 

Ausführen des Skripts if-wild.sh mit Platzhaltersuche im bedingten Test der if-Anweisung

RELATED: Conditional Testing in Bash: if, then, else, elif

Verschachtelte If-Anweisungen

Sie können eine if Anweisung in eine andere if Anweisung einfügen.

Das ist vollkommen akzeptabel, aber das Verschachteln 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 von if Anweisungen verschachteln, 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 Ladens 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, führt die verschachtelte if Anweisung einen zweiten Test durch. Wenn der Tag Mittwoch ist, sagt es uns, dass es nur morgens geöffnet ist.

 #!/bin/bash

# den Tag als Zahl 1..7 erhalten
Tag=$(Datum +"%u")

if [ $day -le 6 ]
Dann
  ## Der Laden ist geöffnet
  if [ $day -eq 3 ]
  Dann
    # Mittwoch ist ein halber Tag
    echo "Mittwochs öffnen wir nur vormittags."
  anders
    # normale Wochentage und Samstag
   Echo "Wir haben den ganzen Tag geöffnet."
  fi
anders
  # sonntags nicht geöffnet
  Echo "Es ist Sonntag, wir haben geschlossen."
fi

Kopieren Sie dieses Skript in einen Editor, speichern Sie es als Datei namens „if-shop.sh“ und machen Sie es mit dem Befehl chmod ausführbar.

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 

Ausführen des if-shop.sh-Skripts, wobei die Computeruhr auf einen Wochentag, dann auf einen Mittwoch und dann auf einen Sonntag eingestellt ist

VERWANDT: So verwenden Sie bedingte Tests mit doppelten Klammern in Linux

Der Fall Für wenn

Die bedingte Ausführung macht Programmieren und Skripten leistungsfähiger, und die bescheidene if Anweisung ist möglicherweise die am häufigsten verwendete Methode, um den Ausführungspfad innerhalb von Code zu ändern. 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. Die if Anweisung ist großartig, aber lassen Sie sie nicht das einzige Werkzeug in Ihrer Tasche sein. Sehen Sie sich insbesondere die case Anweisung an, die in einigen Szenarien eine Lösung sein kann.

VERWANDT: Verwendung von Case-Anweisungen in Bash-Skripten