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


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 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 abgeschlossen fi.
  • 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

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.

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

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

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

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

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.

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

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

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

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

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



source-107

Leave a Reply