English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Shell unterstützt wie andere Programmiersprachen auch mehrere Operatoren, einschließlich:
Arithmetische Operatoren
"Kein Escape-Zeichen "\"" erforderlich.
0: a ist kleiner oder gleich b
String-Operatoren
Datei-Test-Operatoren
Bash unterstützt keine einfachen mathematischen Operationen nativ, aber es können andere Befehle verwendet werden, um dies zu erreichen, wie zum Beispiel awk und expr, von denen expr am häufigsten verwendet wird.
expr ist ein Ausdrucksrechenwerkzeug, das zur Berechnung von Ausdrücken verwendet werden kann.
zwei Zahlen addiert werden:Achte darauf, dass hier das Backslash ` verwendet wird und nicht das einfache Anführungszeichen '):
#!/bin/bash val=`expr 2 + 2` echo "Die Summe der beiden Zahlen beträgt: $val"
执行脚本,输出结果如下所示:
Die Summe der beiden Zahlen beträgt: 4
Zwei wichtige Punkte:
Es müssen Leerzeichen zwischen Ausdrücken und Operatoren sein, zum Beispiel 2+2 Falsch, muss folgendermaßen geschrieben werden 2 + 2ist anders als in den meisten uns bekannten Programmiersprachen.
Ein vollständiger Ausdruck muss in Anführungszeichen (`) stehen, achte darauf, dass dieses Zeichen nicht der gebräuchliche einfache Anführungszeichen ist, der sich unter der Esc-Taste befindet.
Die nachstehende Tabelle zeigt die gebräuchlichen arithmetischen Operatoren, unter der Annahme, dass die Variable a 10,Variable b ist 2Die folgende Tabelle zeigt die häufig verwendeten booleschen Operatoren, wobei die Variable a
Operatoren | Beschreibung | Beispiel |
---|---|---|
+ | Addition | `expr $a + $b` ergibt 30. |
- | Subtraktion | `expr $a - $b` ergibt -10. |
* | `expr $a \",* $b` ergibt 200. | |
/ | Division | `expr $b / $a` ergibt 2. |
% | Rest | `expr $b % $a` ergibt 0. |
= | Zuweisung | a=$b gibt den Wert der Variable b der Variable a zu. |
== | Gleich. Verwendet zur Vergleich von zwei Zahlen, gibt true zurück, wenn sie gleich sind. | [ $a == $b ] gibt false zurück. |
!= | Ungleich. Verwendet zur Vergleich von zwei Zahlen, ist eine Ungleichheit vorhanden, gibt true zurück. | [ $a != $b ] gibt true zurück. |
Hinweis:Die bedingte Ausdrucksbedingung muss in eckigen Klammern stehen und muss mit Leerzeichen versehen sein, zum Beispiel: [$a==$b] ist falsch, muss folgendermaßen geschrieben werden [ $a == $b ].
Beispiele für arithmetische Operatoren:
#!/bin/bash # Autor: Grund教程 # url:de.oldtoolbag.com a=10 b=20 + $b` echo "a + b : $val" - $b` echo "a - b : $val" val=`expr $a \",* $b` echo "a * b : $val" val=`expr $b / $a` echo "b / a : $val" val=`expr $b %% $a` echo "b %% a : $val" if [ $a == $b ] then echo "a ist gleich b" fi if [ $a != $b ] then echo "a ist nicht gleich b" fi
执行脚本,输出结果如下所示:
a + b : 30 a - b : -10 a * b : 200 b / a : 2 b %% a : 0 a ist nicht gleich b
Hinweis:
Multiplikationsoperator (\*)*Der Multiplikationsoperator (\*) muss vor dem Backslash (\) stehen, um die Multiplikation durchzuführen;
if...then...fi ist ein bedingtes Statement, das später erläutert wird.
Die Syntax von expr in MAC ist:$((表达式))$((Ausdruck)))*hier im Ausdruck "
Relationale Operatoren
Relationale Operatoren unterstützen nur Zahlen, nicht Zeichenketten, es sei denn, der Wert der Zeichenkette ist eine Zahl. 10,Variable b ist 2Die folgende Tabelle zeigt die häufig verwendeten booleschen Operatoren, wobei die Variable a
Operatoren | Beschreibung | Beispiel |
---|---|---|
-le \$b: a ist größer als b" | Die folgende Tabelle zeigt die häufig verwendeten relationalen Operatoren, wobei die Variable a | [ $a -Überprüft, ob die beiden Zahlen gleich sind, gibt gleich true zurück. |
-eq | eq \$b ] gibt false zurück. | [ $a -Überprüft, ob die beiden Zahlen ungleich sind, gibt ungleich true zurück. |
-gt | ne \$b ] gibt true zurück. | [ $a -Überprüft, ob die linke Zahl größer als die rechte Zahl ist, falls ja, gibt true zurück. |
-lt | gt \$b ] gibt false zurück. | [ $a -Überprüft, ob die linke Zahl kleiner als die rechte Zahl ist, falls ja, gibt true zurück. |
-0: a ist nicht größer als b | lt \$b ] gibt true zurück. | [ $a -Überprüft, ob die linke Zahl größer oder gleich der rechten Zahl ist, falls ja, gibt true zurück. |
-0: a ist kleiner als b | ge \$b ] gibt false zurück. | [ $a -Überprüft, ob die linke Zahl kleiner oder gleich der rechten Zahl ist, falls ja, gibt true zurück. |
le \$b ] gibt true zurück.
#!/bin/bash # author:基础教程网 # url:de.oldtoolbag.com a=10 b=20 if [ $a -Beispiele für relationale Operatoren: then le \$b: a ist kleiner oder gleich b" -eq \$b] else le \$b: a ist kleiner oder gleich b" -eq \$b : a ist gleich b" fi if [ $a -eq \$b: a ist ungleich b" then le \$b: a ist kleiner oder gleich b" -ne \$b] else le \$b: a ist kleiner oder gleich b" -ne \$b: a ist ungleich b" fi if [ $a -ne \$b : a ist gleich b" then le \$b: a ist kleiner oder gleich b" -gt \$b] else le \$b: a ist kleiner oder gleich b" -gt \$b: a ist größer als b" fi if [ $a -gt \$b: a ist nicht kleiner als b" then le \$b: a ist kleiner oder gleich b" -lt \$b] else le \$b: a ist kleiner oder gleich b" -lt \$b: a ist kleiner als b" fi if [ $a -lt \$b: a ist nicht größer als b" then le \$b: a ist kleiner oder gleich b" -ge \$b] else le \$b: a ist kleiner oder gleich b" -ge \$b: a ist größer oder gleich b" fi if [ $a -ge \$b: a ist kleiner als b" then le \$b: a ist kleiner oder gleich b" -le \$b] else le \$b: a ist kleiner oder gleich b" -echo "\$a fi
执行脚本,输出结果如下所示:
10 -le \$b: a ist größer als b" 2ne 10 -eq 2ne 10 -gt 20: a ist ungleich b 10 -lt 2ge 10 -0: a ist nicht größer als b 2ge 10 -0: a ist kleiner als b 2le
Boolesche Operatoren 10,Variable b ist 2Die folgende Tabelle zeigt die häufig verwendeten booleschen Operatoren, wobei die Variable a
Operatoren | Beschreibung | Beispiel |
---|---|---|
0: | ! | [ ! false ] gibt true zurück. |
-o | oder-Operation, gibt true zurück, wenn mindestens ein Ausdruck true ist. | [ $a -lt 20 -o $b -gt 100 ] gibt true zurück. |
-a | und-Operation, gibt true zurück, wenn beide Ausdrücke true sind. | [ $a -lt 20 -a $b -gt 100 ] gibt false zurück. |
Beispiele für boolesche Operatoren:
#!/bin/bash # Autor: Grund教程 # url:de.oldtoolbag.com a=10 b=20 if [ $a != $b ] then echo "$a != $b : a ist ungleich b" else echo "\$a == \$b: a ist gleich b" fi if [ $a -lt 100 -a $b -gt 15 ] then echo "$a kleiner 100 : und $b größer 15 : Gibt true zurück" else echo "$a kleiner 100 : und $b größer 15 : Gibt false zurück" fi if [ $a -lt 100 -o $b -gt 100 ] then echo "$a kleiner 100 : oder $b größer 100 : Gibt true zurück" else echo "$a kleiner 100 : oder $b größer 100 : Gibt false zurück" fi if [ $a -lt 5 -o $b -gt 100 ] then echo "$a kleiner 5 oder $b größer 100 : Gibt true zurück" else echo "$a kleiner 5 oder $b größer 100 : Gibt false zurück" fi
执行脚本,输出结果如下所示:
10 != 20 : a ist ungleich b 10 kleiner 100 : Und 20 : Größer 15 : Gibt true zurück 10 kleiner 100 : Oder 20 : Größer 100 : Gibt true zurück 10 kleiner 5 oder 20 : Größer 100 : Gibt false zurück
Nachfolgend werden die logischen Operatoren in Shell vorgestellt, wobei die Variable a 10,Variable b ist 20:
Operatoren | Beschreibung | Beispiel |
---|---|---|
&& | Logisches AND | [[ $a -lt 100 && $b -gt 100 ]] gibt false zurück |
|| | Logisches OR | [[ $a -lt 100 || $b -gt 100 ]] gibt true zurück |
Beispiel für logische Operatoren:
#!/bin/bash # author:基础教程网 # url:de.oldtoolbag.com a=10 b=20 if [[ $a -lt 100 && $b -gt 100 ]] then echo "Gibt true zurück" else echo "Gibt false zurück" fi if [[ $a -lt 100 || $b -gt 100 ]] then echo "Gibt true zurück" else echo "Gibt false zurück" fi
执行脚本,输出结果如下所示:
Gibt false zurück Gibt true zurück
Die folgende Tabelle listet häufig verwendete String-Operatoren auf, wobei die Variable a "abc" und die Variable b "efg" angenommen werden:
Operatoren | Beschreibung | Beispiel |
---|---|---|
= | Überprüft, ob zwei Strings gleich sind, gibt true zurück, wenn gleich. | [ $a = $b ] gibt false zurück. |
!= | Überprüft, ob zwei Strings ungleich sind, gibt true zurück, wenn ungleich. | [ $a != $b ] gibt true zurück. |
-z | Überprüft, ob die Länge des Strings 0 ist, gibt true zurück, wenn 0. | [ -z $a ] gibt false zurück. |
-n | Überprüft, ob die Länge des Strings nicht 0 ist, gibt true zurück, wenn nicht 0. | [ -n "$a" ] gibt true zurück. |
$ | Überprüft, ob der String leer ist, gibt true zurück, wenn nicht leer. | [ $a ] gibt true zurück. |
Beispiel für Stringoperationen:
#!/bin/bash # author:基础教程网 # url:de.oldtoolbag.com a="abc" b="efg" if [ $a = $b ] then echo "$a = $b : a ist gleich b" else echo "$a = $b: a ist ungleich b" fi if [ $a != $b ] then echo "$a != $b : a ist ungleich b" else echo "$a != $b: a ist gleich b" fi if [ -z $a ] then echo "}}-z $a : Die Länge des Strings ist 0" else echo "}}-z $a : Die Länge des Strings ist nicht 0" fi if [ -n "$a" ] then echo "}}-n $a : Die Länge des Strings ist nicht 0" else echo "}}-n $a : die Länge der Zeichenkette ist 0" fi if [ $a ] then echo "$a : die Zeichenkette ist nicht leer" else echo "$a : die Zeichenkette ist leer" fi
执行脚本,输出结果如下所示:
abc = efg: a ist nicht gleich b abc != efg : a ist nicht gleich b -z abc : die Länge der Zeichenkette ist nicht 0 -n abc : die Länge der Zeichenkette ist nicht 0 abc : die Zeichenkette ist nicht leer
Die Datei-Test-Operatoren werden verwendet, um verschiedene Attribute von Unix-Dateien zu überprüfen.
Die Eigenschaftsüberprüfung wird wie folgt beschrieben:
Operator | Beschreibung | Beispiel |
---|---|---|
-b file | Überprüft, ob die Datei eine Blockgerätedatei ist. Wenn ja, gibt true zurück. | [ -b $file ] gibt false zurück. |
-c file | Überprüft, ob die Datei ein Zeichengerätedatei ist. Wenn ja, gibt true zurück. | [ -c $file ] gibt false zurück. |
-d file | Überprüft, ob die Datei ein Verzeichnis ist. Wenn ja, gibt true zurück. | [ -d $file ] gibt false zurück. |
-f file | Überprüft, ob die Datei ein reguläres Datei ist (weder ein Verzeichnis noch ein Gerätedatei), wenn ja, gibt true zurück. | [ -f $file ] gibt true zurück. |
-g file | Überprüft, ob die Datei den SGID-Bit gesetzt hat. Wenn ja, gibt true zurück. | [ -g $file ] gibt false zurück. |
-k file | Überprüft, ob die Datei den Sticky Bit gesetzt hat. Wenn ja, gibt true zurück. | [ -k $file ] gibt false zurück. |
-p file | Überprüft, ob die Datei ein named Pipe ist. Wenn ja, gibt true zurück. | [ -p $file ] gibt false zurück. |
-u file | Überprüft, ob die Datei den SUID-Bit gesetzt hat. Wenn ja, gibt true zurück. | [ -u $file ] gibt false zurück. |
-r file | Überprüft, ob die Datei lesbar ist. Wenn ja, gibt true zurück. | [ -r $file ] gibt true zurück. |
-w file | Überprüft, ob die Datei beschreibbar ist. Wenn ja, gibt true zurück. | [ -w $file ] gibt true zurück. |
-x file | Überprüft, ob die Datei ausführbar ist. Wenn ja, gibt true zurück. | [ -x $file ] gibt true zurück. |
-s file | Überprüft, ob die Datei leer ist (ob die Dateigröße größer als 0 ist), wenn nicht leer, gibt true zurück. | [ -s $file ] gibt true zurück. |
-e file | Überprüft, ob die Datei (einschließlich des Verzeichnisses) existiert. Wenn ja, gibt true zurück. | [ -e $file ] gibt true zurück. |
其他检查符:
-S: 判断某文件是否 socket。
-L: 检测文件是否存在并且是一个符号链接。
#!/bin/bash # author:基础教程网 # url:de.oldtoolbag.com file="/var/www/w3codebox/test.sh" if [ -r $file ] then echo "文件可读" else echo "文件不可读" fi if [ -w $file ] then echo "文件可写" else echo "文件不可写" fi if [ -x $file ] then echo "文件可执行" else echo "文件不可执行" fi if [ -f $file ] then echo "文件为普通文件" else echo "文件为特殊文件" fi if [ -d $file ] then echo "文件是个目录" else echo "文件不是个目录" fi if [ -s $file ] then echo "文件不为空" else echo "文件为空" fi if [ -e $file ] then echo "文件存在" else echo "文件不存在" fi
执行脚本,输出结果如下所示:
文件可读 文件可写 文件可执行 文件为普通文件 文件不是个目录 文件不为空 文件存在