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:
-nVAR- True, wenn die Länge vonVARgrößer als Null ist.-zVAR- True, wennVARist leer.STRING1 = STRING2- Wahr, wennSTRING1undSTRING2sind gleich.STRING1 != STRING2- Wahr, wennSTRING1undSTRING2sind nicht gleich.INTEGER1 -eq INTEGER2- Wahr, wennINTEGER1undINTEGER2sind gleich.INTEGER1 -gt INTEGER2- Wahr, wennINTEGER1ist größer alsINTEGER2.INTEGER1 -lt INTEGER2- Wahr, wennINTEGER1ist kleiner alsINTEGER2.INTEGER1 -ge INTEGER2- Wahr, wennINTEGER1ist gleich oder größer als INTEGER2.INTEGER1 -le INTEGER2- Wahr, wennINTEGER1gleich oder kleiner alsINTEGER2ist .-hFILE- Wahr, wenn dieFILEexistiert und ist ein symbolischer Link.-rFILE- Wahr, wenn dieFILEexistiert und ist lesbar.-wFILE- Wahr, wenn dieFILEexistiert und ist beschreibbar.-xFILE- Wahr, wenn dieFILEexistiert und ist ausführbar.-dFILE- Wahr, wenn dieFILEexistiert und ist ein Verzeichnis.-eFILE- Wahr, wenn dieFILEexistiert und ist eine Datei, unabhängig vom Typ (Knoten, Verzeichnis, Socket usw.).-fFILE- Wahr, wenn dieFILEexistiert 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.