In diesem Tutorial führen wir Sie durch die Grundlagen der Bash – Anweisung und zeigen Ihnen, wie Sie sie in Ihren Shell-Skripten verwenden.

Die Entscheidungsfindung ist eines der grundlegendsten Konzepte der Computerprogrammierung. Wie in jeder anderen Programmiersprache könnenif,if..else,if..elif..else und verschachtelteif Anweisungen in Bash verwendet werden, um Code basierend auf einer bestimmten Bedingung auszuführen.,

if-Anweisung #

Bash Bedingungen können unterschiedliche Formen haben. Die grundlegendsteif – Anweisung hat die folgende Form:

if TEST-COMMANDthen STATEMENTSfi

Die if – Anweisung beginnt mit dem Schlüsselwort if, gefolgt vom bedingten Ausdruck und dem Schlüsselwort then. Die Anweisung endet mit dem Schlüsselwort fi.,

Wenn die TEST-COMMAND zu True ausgewertet wird, wird die STATEMENTS ausgeführt. Wenn TEST-COMMAND False zurückgibt, passiert nichts, die STATEMENTS wird ignoriert.

Im Allgemeinen ist es eine gute Praxis, Ihren Code immer einzurücken und Codeblöcke mit Leerzeilen zu trennen. Die meisten Leute wählen entweder 4-Raum oder 2-Raum Einrückung zu verwenden. Einrückungen und Leerzeilen machen Ihren Code besser lesbar und organisiert.,

Schauen wir uns das folgende Beispielskript an, das prüft, ob eine bestimmte Zahl größer als 10 ist:

#!/bin/bashecho -n "Enter a number: "read VARif ]then echo "The variable is greater than 10."fi

Speichern Sie den Code in einer Datei und führen Sie ihn über die Befehlszeile aus:

bash test.sh

Das Skript fordert Sie auf, eine Zahl einzugeben. Wenn Sie beispielsweise 15 eingeben, wird der Befehl test zu true ausgewertet, da 15 größer als 10 ist und der Befehl innerhalb der Klausel then ausgeführt wird.

The variable is greater than 10.

wenn..,else Anweisung #

Die Bash if..else Anweisung hat die folgende Form:

if TEST-COMMANDthen STATEMENTS1else STATEMENTS2fi

Wenn die TEST-COMMAND ausgewertet wird True, die STATEMENTS1 wird ausgeführt. Andernfalls wird, wenn TEST-COMMAND False zurückgibt, die STATEMENTS2 ausgeführt. Sie können nur eineelse Klausel in der Anweisung haben.,

Fügen wir dem vorherigen Beispielskript eine else – Klausel hinzu:

Wenn Sie den Code ausführen und eine Zahl eingeben, druckt das Skript eine andere Nachricht, je nachdem, ob die Zahl größer oder kleiner / gleich 10 ist.

wenn..elif..else Anweisung #

Die Bash if..elif..else Anweisung nimmt die folgende Form an:

if TEST-COMMAND1then STATEMENTS1elif TEST-COMMAND2then STATEMENTS2else STATEMENTS3fi

Wenn die TEST-COMMAND1 True auswertet, wird die STATEMENTS1 ausgeführt werden., Wenn die TEST-COMMAND2 ausgewertet True, STATEMENTS2 ausgeführt werden. Wenn keiner der Testbefehle True auswertet, wird die STATEMENTS2 ausgeführt.

Sie können eine oder mehrere elif Klauseln in der Anweisung haben. else – Klausel ist optional.

Die Bedingungen werden sequentiell ausgewertet., Sobald eine Bedingung True zurückgibt, werden die verbleibenden Bedingungen nicht ausgeführt, und die Programmsteuerung wird an das Ende der – Anweisungen verschoben.

Fügen wir dem vorherigen Skript eine elif – Klausel hinzu:

Verschachtelte if-Anweisungen #

Bash ermöglicht das Verschachteln von if – Anweisungen innerhalb von if – Anweisungen. Sie können mehrere if Anweisung in einem anderen if Anweisung platzieren.,

Das folgende Skript fordert Sie auf, drei Zahlen einzugeben und druckt die größte Zahl unter den drei Zahlen.

So sieht die Ausgabe aus:

Enter the first number: 4Enter the second number: 7Enter the third number: 27 is the largest number.
Im Allgemeinen ist es effizienter, diecase – Anweisung anstelle der verschachtelten – Anweisungen zu verwenden.

Mehrere Bedingungen #

Mit den logischen Operatoren OR und AND können Sie mehrere Bedingungen in den Anweisungen verwenden.,

Hier ist eine andere Version des Skripts, um die größte Zahl unter den drei Zahlen zu drucken. In dieser Version verwenden wir anstelle der verschachtelten – Anweisungen den logischen Operator AND (&&).

Testoperatoren #

In Bash verwendet der Befehl test eine der folgenden Syntaxformen:

test EXPRESSION]

Um das Skript portabel zu machen, verwenden Sie lieber den alten Befehl [, der auf allen POSIX-Shells verfügbar ist., Die neue aktualisierte Version des Befehls test [[ (doppelte Klammern) wird auf den meisten modernen Systemen mit Bash, Zsh und Ksh als Standard-Shell unterstützt.

Um den Testausdruck zu negieren, verwenden Sie den logischen Operator NOT (!). Verwenden Sie beim Vergleich von Zeichenfolgen immer einfache oder doppelte Anführungszeichen, um Probleme beim Teilen und Globalisieren von Wörtern zu vermeiden.,

im folgenden sind einige der am häufigsten verwendeten Operatoren:

  • -n VAR – True, wenn die Länge von VAR größer als null ist.
  • -z VAR – True, wenn die VAR leer ist.
  • STRING1 = STRING2 – Wahr, wenn STRING1 und STRING2 gleich sind.
  • STRING1 != STRING2 – True wenn STRING1 und STRING2 nicht gleich sind.,
  • INTEGER1 -eq INTEGER2 – True if INTEGER1 and INTEGER2 are equal.
  • INTEGER1 -gt INTEGER2 – True if INTEGER1 is greater than INTEGER2.
  • INTEGER1 -lt INTEGER2 – True if INTEGER1 is less than INTEGER2.
  • INTEGER1 -ge INTEGER2 – True if INTEGER1 is equal or greater than INTEGER2.
  • INTEGER1 -le INTEGER2 – True if INTEGER1 is equal or less than INTEGER2.,
  • -h FILE – True if the FILE exists and is a symbolic link.
  • -r FILE – True if the FILE exists and is readable.
  • -w FILE – True if the FILE exists and is writable.
  • -x FILE – True if the FILE exists and is executable.,
  • -d FILE – True, wenn die FILE existiert und ist ein Verzeichnis.
  • -e FILE – True wenn die FILE existiert und eine Datei ist, unabhängig vom Typ (Knoten, Verzeichnis, Socket usw.).
  • -f FILE – True wenn die FILE existiert und eine reguläre Datei ist (kein Verzeichnis oder Gerät).,

Schlussfolgerung #

Mit den Anweisungen , if..else und if..elif..else können Sie den Ablauf der Ausführung des Bash-Skripts steuern, indem Sie bestimmte Bedingungen auswerten.