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.
case
– 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 vonVAR
größer als null ist. -
-z
VAR
– True, wenn dieVAR
leer ist. -
STRING1 = STRING2
– Wahr, wennSTRING1
undSTRING2
gleich sind. -
STRING1 != STRING2
– True wennSTRING1
undSTRING2
nicht gleich sind., -
INTEGER1 -eq INTEGER2
– True ifINTEGER1
andINTEGER2
are equal. -
INTEGER1 -gt INTEGER2
– True ifINTEGER1
is greater thanINTEGER2
. -
INTEGER1 -lt INTEGER2
– True ifINTEGER1
is less thanINTEGER2
. -
INTEGER1 -ge INTEGER2
– True ifINTEGER1
is equal or greater than INTEGER2. -
INTEGER1 -le INTEGER2
– True ifINTEGER1
is equal or less thanINTEGER2
., -
-h
FILE
– True if theFILE
exists and is a symbolic link. -
-r
FILE
– True if theFILE
exists and is readable. -
-w
FILE
– True if theFILE
exists and is writable. -
-x
FILE
– True if theFILE
exists and is executable., -
-d
FILE
– True, wenn dieFILE
existiert und ist ein Verzeichnis. -
-e
FILE
– True wenn dieFILE
existiert und eine Datei ist, unabhängig vom Typ (Knoten, Verzeichnis, Socket usw.). -
-f
FILE
– True wenn dieFILE
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.