English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Shell 基本运算符

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.

Arithmetische Operatoren

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 "

"Kein Escape-Zeichen "\"" erforderlich.

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

0: a ist kleiner oder gleich b

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

Logische Operatoren

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

String-Operatoren

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

Datei-Test-Operatoren

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: 检测文件是否存在并且是一个符号链接。

在线示例

变量 file 表示文件 /var/www/w3codebox/test.sh,它的大小为 100 字节,具有 rwx 权限。下面的代码,将检测该文件的各种属性:
#!/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

执行脚本,输出结果如下所示:

文件可读
文件可写
文件可执行
文件为普通文件
文件不是个目录
文件不为空
文件存在