Dieses Tutorial führt Sie durch die Grundlagen von Bash if
Statement und zeigen Ihnen, wie Sie es in Ihren Shell-Skripten verwenden.
Entscheidungsfindung ist eines der grundlegendsten Konzepte der Computerprogrammierung. Wie in jeder anderen Programmiersprache, if
, if..else
, if..elif..else
und verschachteltes if
Anweisungen in Bash werden verwendet, um Code basierend auf einer bestimmten Bedingung auszuführen.
if
Anweisung #
Bash if
Konditionale können verschiedene Formen haben. Das grundlegendste if
Die Anweisung hat folgende Form:
if TEST-COMMAND
then
STATEMENTS
fi
Der if
Anweisung beginnt mit dem if
Schlüsselwort, gefolgt vom bedingten Ausdruck und dem then
Stichwort. Die Anweisung endet mit dem fi
Schlüsselwort.
Wenn der TEST-COMMAND
ergibt True
, die STATEMENTS
hingerichtet wird. Wenn TEST-COMMAND
gibt False
zurück , nichts passiert; die STATEMENTS
ignoriert werden.
Im Allgemeinen empfiehlt es sich, Ihren Code immer einzurücken und Codeblöcke durch Leerzeilen zu trennen. Die meisten Leute entscheiden sich entweder für einen 4-Leerzeichen- oder einen 2-Leerzeichen-Einzug. Einrückungen und Leerzeilen machen Ihren Code lesbarer und übersichtlicher.
Schauen wir uns das folgende Beispielskript an, das prüft, ob eine bestimmte Zahl größer als 10 ist:
#!/bin/bash
echo -n "Enter a number: "
read VAR
if [[ $VAR -gt 10 ]]
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 test
Der Befehl wird als true
ausgewertet weil 15 größer als 10 ist, und das echo
Befehl innerhalb des then
Klausel wird ausgeführt.
The variable is greater than 10.
if..else
Anweisung #
Die Bash if..else
Die Anweisung hat folgende Form:
if TEST-COMMAND
then
STATEMENTS1
else
STATEMENTS2
fi
Wenn der TEST-COMMAND
ergibt True
, die STATEMENTS1
wird durchgeführt. Andernfalls, falls TEST-COMMAND
gibt False
zurück , die STATEMENTS2
wird durchgeführt. Sie können nur einen else
haben Klausel in der Anweisung.
Lassen Sie uns ein else
hinzufügen -Klausel zum vorherigen Beispielskript:
#!/bin/bash
echo -n "Enter a number: "
read VAR
if [[ $VAR -gt 10 ]]
then
echo "The variable is greater than 10."
else
echo "The variable is equal or less than 10."
fi
Wenn Sie den Code ausführen und eine Zahl eingeben, gibt das Skript eine andere Meldung aus, je nachdem, ob die Zahl größer oder kleiner/gleich 10 ist.
if..elif..else
Anweisung #
Die Bash if..elif..else
Die Anweisung hat folgende Form:
if TEST-COMMAND1
then
STATEMENTS1
elif TEST-COMMAND2
then
STATEMENTS2
else
STATEMENTS3
fi
Wenn der TEST-COMMAND1
ergibt True
, die STATEMENTS1
wird durchgeführt. Wenn der TEST-COMMAND2
ergibt True
, die STATEMENTS2
wird durchgeführt. Wenn keiner der Testbefehle zu True
ausgewertet wird , die STATEMENTS2
wird ausgeführt.
Sie können einen oder mehrere elif
haben Klauseln in der Erklärung. Das else
Klausel ist optional.
Die Bedingungen werden nacheinander ausgewertet. Sobald eine Bedingung True
zurückgibt , werden die verbleibenden Bedingungen nicht ausgeführt und die Programmsteuerung bewegt sich zum Ende von if
Aussagen.
Lassen Sie uns ein elif
hinzufügen Klausel zum vorherigen Skript:
#!/bin/bash
echo -n "Enter a number: "
read VAR
if [[ $VAR -gt 10 ]]
then
echo "The variable is greater than 10."
elif [[ $VAR -eq 10 ]]
then
echo "The variable is equal to 10."
else
echo "The variable is less than 10."
fi
Verschachteltes if
Anweisungen #
Bash ermöglicht es Ihnen, if
zu verschachteln Anweisungen innerhalb von if
Aussagen. Sie können mehrere if
platzieren Anweisungen innerhalb eines anderen if
Aussage.
Das folgende Skript fordert Sie auf, drei Zahlen einzugeben und die größte Zahl unter den drei Zahlen auszugeben.
#!/bin/bash
echo -n "Enter the first number: "
read VAR1
echo -n "Enter the second number: "
read VAR2
echo -n "Enter the third number: "
read VAR3
if [[ $VAR1 -ge $VAR2 ]]
then
if [[ $VAR1 -ge $VAR3 ]]
then
echo "$VAR1 is the largest number."
else
echo "$VAR3 is the largest number."
fi
else
if [[ $VAR2 -ge $VAR3 ]]
then
echo "$VAR2 is the largest number."
else
echo "$VAR3 is the largest number."
fi
fi
So sieht die Ausgabe aus:
Enter the first number: 4
Enter the second number: 7
Enter the third number: 2
7 is the largest number.
Im Allgemeinen ist es effizienter, den case
zu verwenden Anweisung statt verschachteltem if
Aussagen. Mehrere Bedingungen #
Das logische OR
und AND
Operatoren erlauben Ihnen, mehrere Bedingungen in if
zu verwenden Aussagen.
Hier ist eine andere Version des Skripts, um die größte Zahl unter den drei Zahlen zu drucken. In dieser Version anstelle des verschachtelten if
-Anweisungen verwenden wir das logische AND
(&&
)-Operator.
#!/bin/bash
echo -n "Enter the first number: "
read VAR1
echo -n "Enter the second number: "
read VAR2
echo -n "Enter the third number: "
read VAR3
if [[ $VAR1 -ge $VAR2 ]] && [[ $VAR1 -ge $VAR3 ]]
then
echo "$VAR1 is the largest number."
elif [[ $VAR2 -ge $VAR1 ]] && [[ $VAR2 -ge $VAR3 ]]
then
echo "$VAR2 is the largest number."
else
echo "$VAR3 is the largest number."
fi
Operatoren testen #
In Bash der test
Der Befehl nimmt eine der folgenden Syntaxformen an:
test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
Um das Skript portabel zu machen, verwenden Sie lieber den alten Test [
Befehl, der auf allen POSIX-Shells verfügbar ist. Die neue aktualisierte Version des test
Befehl [[
(doppelte Klammern) wird auf den meisten modernen Systemen unterstützt, die Bash, Zsh und Ksh als Standard-Shell verwenden.
Um den Testausdruck zu negieren, verwenden Sie das logische NOT
(!
) Operator. Verwenden Sie beim Vergleichen von Zeichenfolgen immer einfache oder doppelte Anführungszeichen, um Probleme mit Worttrennung und Globbing zu vermeiden.
Nachfolgend sind einige der am häufigsten verwendeten Operatoren aufgeführt:
-n
VAR
- True, wenn die Länge vonVAR
größer als Null ist.-z
VAR
- True, wennVAR
ist leer.STRING1 = STRING2
- Wahr, wennSTRING1
undSTRING2
sind gleich.STRING1 != STRING2
- Wahr, wennSTRING1
undSTRING2
sind nicht gleich.INTEGER1 -eq INTEGER2
- Wahr, wennINTEGER1
undINTEGER2
sind gleich.INTEGER1 -gt INTEGER2
- Wahr, wennINTEGER1
ist größer alsINTEGER2
.INTEGER1 -lt INTEGER2
- Wahr, wennINTEGER1
ist kleiner alsINTEGER2
.INTEGER1 -ge INTEGER2
- Wahr, wennINTEGER1
ist gleich oder größer als INTEGER2.INTEGER1 -le INTEGER2
- Wahr, wennINTEGER1
gleich oder kleiner alsINTEGER2
ist .-h
FILE
- Wahr, wenn dieFILE
existiert und ist ein symbolischer Link.-r
FILE
- Wahr, wenn dieFILE
existiert und ist lesbar.-w
FILE
- Wahr, wenn dieFILE
existiert und ist beschreibbar.-x
FILE
- Wahr, wenn dieFILE
existiert und ist ausführbar.-d
FILE
- Wahr, wenn dieFILE
existiert und ist ein Verzeichnis.-e
FILE
- Wahr, wenn dieFILE
existiert und ist eine Datei, unabhängig vom Typ (Knoten, Verzeichnis, Socket usw.).-f
FILE
- Wahr, wenn dieFILE
existiert und ist eine normale Datei (kein Verzeichnis oder Gerät).
Schlussfolgerung #
Der if
, if..else
und if..elif..else
-Anweisungen können Sie den Ablauf der Ausführung des Bash-Skripts steuern, indem Sie bestimmte Bedingungen auswerten.
Wenn Sie Fragen oder Feedback haben, können Sie gerne einen Kommentar hinterlassen.