Bash-Ausdruck ist die Kombination von Operatoren, Features oder Werten, die verwendet werden, um eine bedingte Bash-Anweisung zu bilden. Bedingter Ausdruck kann ein binärer oder unärer Ausdruck sein, der numerische, Zeichenfolgen oder beliebige Befehle enthält, deren Rückgabestatus bei Erfolg Null ist.
Es gibt mehrere Bedingungsausdrücke, die zum Testen mit den Dateien verwendet werden könnten. Im Folgenden finden Sie einige hilfreiche Bedingungsausdrücke.
- [ -e Dateipfad ] Gibt wahr zurück, wenn die Datei existiert.
- [ -x Dateipfad ] Gibt wahr zurück, wenn die Datei existiert und ausführbar ist.
- [ -S Dateipfad ] Gibt wahr zurück, wenn die Datei existiert und es sich um eine Socket-Datei handelt.
- [ expr1 -a expr2 ] Gibt wahr zurück, wenn beide Ausdrücke wahr sind.
- [ expr1 -o expr2 ] Gibt wahr zurück, wenn einer der Ausdrücke 1 oder 2 wahr ist.
Weitere bedingte Ausdrücke zum Überprüfen der Dateien, Zeichenfolgen und Zahlen finden Sie auf der Bash-Manpage.
Bash-Beispiel 1. Dateiexistenz prüfen
Das folgende Bash-Shell-Skript-Code-Snippet ruft den Dateinamen mit seinem absoluten Pfad ab und prüft, ob die Datei existiert oder nicht und gibt die entsprechenden Informationen aus.
$ cat exist.sh #! /bin/bash file=$1 if [ -e $file ] then echo -e "File $file exists" else echo -e "File $file doesnt exists" fi $ ./exist.sh /usr/bin/boot.ini File /usr/bin/boot.ini exists
Lesen Sie unseren vorherigen Artikel, um die verschiedenen Arten von Bash-if-Anweisungen zu verstehen.
Bash-Beispiel 2. Zahlen vergleichen
Das folgende Skript liest zwei Integer-Zahlen vom Benutzer und prüft, ob beide Zahlen gleich oder größer oder kleiner sind.
$ cat numbers.sh #!/bin/bash echo "Please enter first number" read first echo "Please enter second number" read second if [ $first -eq 0 ] && [ $second -eq 0 ] then echo "Num1 and Num2 are zero" elif [ $first -eq $second ] then echo "Both Values are equal" elif [ $first -gt $second ] then echo "$first is greater than $second" else echo "$first is lesser than $second" fi $ ./numbers.sh Please enter first number 1 Please enter second number 1 Both Values are equal $ ./numbers.sh Please enter first number 3 Please enter second number 12 3 is lesser than 12
Wenn Sie mit Bash-Skripting noch nicht vertraut sind, lesen Sie unser Bash-Einführungstutorial.
Bash-Beispiel 3. Grundlegender arithmetischer Rechner
Dieses Beispiel liest eine Eingabe, die eine Art arithmetische Operation ist, die für Bash-Variablen (inp1 und inp2) ausgeführt werden soll. Die arithmetische Operation kann Addition, Subtraktion oder Multiplikation sein..
$ cat calculator.sh #!/bin/bash inp1=12 inp2=11 echo "1. Addition" echo "2. Subtraction" echo "3. Multiplication" echo -n "Please choose a word [1,2 or 3]? " read oper if [ $oper -eq 1 ] then echo "Addition Result " $(($inp1 + $inp2)) else if [ $oper -eq 2 ] then echo "Subtraction Result " $(($inp1 - $inp2)) else if [ $oper -eq 3 ] then echo "Multiplication Result " $(($inp1 * $inp2)) else echo "Invalid input" fi fi fi $ ./calculator.sh 1. Addition 2. Subtraction 3. Multiplication Please choose a word [1,2 or 3]? 4 Invalid input
Zu wissen, wie man die Bash-Spezialparameter ( $*, $@, $#, $$, $!, $?, $-, $_ ) verwendet, wird Ihnen das Scripting-Leben erleichtern.
Bash-Beispiel 4. IP-Adresse lesen und pingen
Das folgende Skript wird verwendet, um die IP-Adresse zu lesen und zu prüfen, ob die IP-Adresse erreichbar ist, und die entsprechende Meldung auszugeben.
$ cat ipaddr.sh #!/bin/bash echo "Enter the Ipaddress" read ip if [ ! -z $ip ] then ping -c 1 $ip if [ $? -eq 0 ] ; then echo "Machine is giving ping response" else echo "Machine is not pinging" fi else echo "IP Address is empty" fi $ ./ipaddr.sh Enter the Ipaddress 10.176.191.106 Pinging 10.176.191.106 with 32 bytes of data: Reply from 10.176.191.106: bytes=32 time<1ms TTL=128 Ping statistics for 10.176.191.106: Packets: Sent = 1, Received = 1, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms Machine is giving ping response
In diesem Beispiel gibt -z true zurück, wenn die IP-Adresse eine Länge von null hat. Wenn der Bedingung ein ! (negieren) Operator, wenn der Ausdruck falsch ist, tritt er in den if-Teil ein und wird ausgeführt. Wenn also die IP-Adresse nicht null ist, wird sie eingegeben und überprüft, ob die IP-Adresse erreichbar ist.
Bash-Beispiel 5. Installationsskript
Das Installationsskript der meisten Pakete erlaubt es nicht, diese als Root-Benutzer auszuführen. Das Skript überprüft den ausführenden Benutzer und gibt den Fehler aus.
Mit dem folgenden Skript können Sie das Oracle-Installationsskript nur ausführen, wenn der Benutzer, der es ausführt, kein Root ist.
$ cat preinstaller.sh #!/bin/bash if [ `whoami` != 'root' ]; then echo "Executing the installer script" ./home/oracle/databases/runInstaller.sh else echo "Root is not allowed to execute the installer script" fi Executing the script as a root user, # ./preinstaller.sh Root is not allowed to execute the installer script
In diesem Beispiel wird die Ausgabe des Befehls whoami mit dem Wort „root“ verglichen. Für Zeichenkettenvergleich ==, !=, < und sollten verwendet werden und für den numerischen Vergleich sollten eq, ne,lt und gt verwendet werden.
Bash-Beispiel 6. Erweiterte Klammern
In allen obigen Beispielen haben wir nur einfache Klammern verwendet, um den bedingten Ausdruck einzuschließen, aber Bash erlaubt doppelte Klammern, die als erweiterte Version der Syntax mit einzelnen Klammern dienen.
$ cat enhanced.sh #!/bin/bash echo "Enter the string" read str if [[ $str == *condition* ]] then echo "String "$str has the word \"condition\" fi $ ./enhanced.sh Enter the string conditionalstatement String conditionalstatement has the word "condition"
- [ ist ein Synonym für Testbefehl. Selbst wenn es in die Shell integriert ist, erstellt es einen neuen Prozess.
- [[ ist eine neue verbesserte Version davon, die ein Schlüsselwort ist, kein Programm.
- [[ wird von Korn und Bash verstanden.
- Wenn im obigen Beispiel die Variable $str irgendwo den Ausdruck „Bedingung“ enthält, ist die Bedingung wahr.
- Dies ist die Globbing-Funktion der Shell, die nur unterstützt wird, wenn Sie [[ (doppelte Klammern) verwenden und daher viele Argumente nicht in Anführungszeichen setzen müssen.