Shell-Grundoperatoren
Wie andere Programmiersprachen unterstützt Shell eine Vielzahl von Operatoren, darunter:
- Arithmetische Operatoren
- Vergleichsoperatoren
- Boolesche Operatoren
- String-Operatoren
- Dateitest-Operatoren
Die native Bash unterstützt keine einfachen mathematischen Operationen, aber sie können durch andere Befehle wie awk und expr implementiert werden; expr wird am häufigsten verwendet.
expr ist ein Werkzeug zur Berechnung von Ausdrücken, das zum Auswerten von Ausdrücken verwendet werden kann.
Zum Beispiel das Addieren zweier Zahlen (Beachten Sie die Verwendung von Backticks`nicht einfache Anführungszeichen'):
Beispiele
val=`expr 2 + 2`
echo Die Summe der beiden Zahlen ist:$val"
Führen Sie das Skript aus, und das Ausgabeergebnis lautet wie folgt:
两数之和为 : 4
Zwei Punkte sind zu beachten:
- Zwischen Ausdrücken und Operatoren müssen Leerzeichen stehen. Zum Beispiel ist 2+2 falsch; es muss als 2 + 2 geschrieben werden. Dies unterscheidet sich von den meisten Programmiersprachen, mit denen wir vertraut sind.
- Der vollständige Ausdruck muss von` `` eingeschlossen werden. Beachten Sie, dass dieses Zeichen nicht das häufig verwendete einfache Anführungszeichen ist; es befindet sich unter der Esc-Taste.
Arithmetische Operatoren
Die folgende Tabelle listet die häufig verwendeten arithmetischen Operatoren auf, wobei angenommen wird, dass Variable a den Wert 10 und Variable b den Wert 20 hat:
| Operator | Beschreibung | Beispiel |
|---|---|---|
| + | Addition | `expr $a + $b` ergibt 30. |
| - | Subtraktion | `expr $a - $b` ergibt -10. |
| * | Multiplikation | `expr $a \* $b` ergibt 200. |
| / | Division | `expr $b / $a` ergibt 2. |
| % | Modulo | `expr $b % $a` ergibt 0. |
| = | Zuweisung | a=$b weist der Variablen a den Wert der Variablen b zu. |
| == | Gleich. Wird verwendet, um zwei Zahlen zu vergleichen; gibt true zurück, wenn sie gleich sind. | [ $a == $b ] gibt false zurück. |
| != | Ungleich. Wird verwendet, um zwei Zahlen zu vergleichen; gibt true zurück, wenn sie nicht gleich sind. | [ $a != $b ] gibt true zurück. |
Hinweis:Bedingte Ausdrücke sollten zwischen eckigen Klammern mit Leerzeichen stehen, zum Beispiel:[$a==$b]ist falsch; es muss geschrieben werden als[ $a == $b ]。
Beispiele
Ein Beispiel für arithmetische Operatoren ist wie folgt:
Beispiele
# Autor:Example
# url:www.example.com
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
val=`expr $a - $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 ]
dann
echo a ist gleich b
fi
if [ $a != $b ]
dann
echo a ist nicht gleich b
fi
Führen Sie das Skript aus, und das Ausgabeergebnis lautet wie folgt:
a + b : 30 a - b : -10 a * b : 200 b / a : 2 b % a : 0 a 不等于 b
Hinweis:
- Dem Multiplikationszeichen (*) muss ein Backslash (\) vorangestellt werden, um eine Multiplikation durchzuführen;
- if...then...fi ist eine bedingte Anweisung, die später erklärt wird.
- Unter MAC ist die expr-Syntax in der Shell:$((expression)), hier benötigt das '*' im Ausdruck das Escape-Zeichen '\' nicht.
Relationale Operatoren
Relationale Operatoren unterstützen nur Zahlen, keine Zeichenketten, es sei denn, der Wert der Zeichenkette ist eine Zahl.
Die folgende Tabelle listet die häufig verwendeten relationalen Operatoren auf, wobei angenommen wird, dass Variable a 10 und Variable b 20 ist:
| Operator | Beschreibung | Beispiel |
|---|---|---|
| -eq | Prüft, ob zwei Zahlen gleich sind; gibt true zurück, wenn sie gleich sind. | [ $a -eq $b ] gibt false zurück. |
| -ne | Prüft, ob zwei Zahlen ungleich sind; gibt true zurück, wenn sie ungleich sind. | [ $a -ne $b ] gibt true zurück. |
| -gt | Prüft, ob die Zahl links größer als die rechts ist; wenn ja, gibt true zurück. | [ $a -gt $b ] gibt false zurück. |
| -lt | Prüft, ob die Zahl links kleiner als die rechts ist; wenn ja, gibt true zurück. | [ $a -lt $b ] gibt true zurück. |
| -ge | Prüft, ob die Zahl auf der linken Seite größer oder gleich der Zahl auf der rechten Seite ist; wenn ja, gibt true zurück. | [ $a -ge $b ] gibt false zurück. |
| -le | Prüft, ob die Zahl auf der linken Seite kleiner oder gleich der Zahl auf der rechten Seite ist; wenn ja, gibt true zurück. | [ $a -le $b ] gibt true zurück. |
Beispiele
Ein Beispiel für Vergleichsoperatoren ist wie folgt:
Beispiele
# Autor:Example
# url:www.example.com
a=10
b=20
if [ $a -eq $b ]
dann
echo "$a -eq $b: a ist gleich b
else
echo "$a -eq $b: a ist nicht gleich b
fi
if [ $a -ne $b ]
dann
echo "$a -ne $b: a ist nicht gleich b
else
echo "$a -ne $b: a ist gleich b
fi
if [ $a -gt $b ]
dann
echo "$a -gt $b: a ist größer als b
else
echo "$a -gt $b: a ist nicht größer als b
fi
if [ $a -lt $b ]
dann
echo "$a -lt $b: a ist kleiner als b
else
echo "$a -lt $b: a ist nicht kleiner als b
fi
if [ $a -ge $b ]
dann
echo "$a -ge $b: a ist größer oder gleich b
else
echo "$a -ge $b: a ist kleiner als b
fi
if [ $a -le $b ]
dann
echo "$a -le $b: a ist kleiner oder gleich b
else
echo "$a -le $b: a ist größer als b
fi
Führen Sie das Skript aus, und das Ausgabeergebnis lautet wie folgt:
10 -eq 20: a 不等于 b 10 -ne 20: a 不等于 b 10 -gt 20: a 不大于 b 10 -lt 20: a 小于 b 10 -ge 20: a 小于 b 10 -le 20: a 小于或等于 b
Boolesche Operatoren
Die folgende Tabelle listet die häufig verwendeten booleschen Operatoren auf, wobei für die Variablen a = 10 und b = 20 gilt:
| Operator | Beschreibung | Beispiel |
|---|---|---|
| ! | Negationsoperation; gibt false zurück, wenn der Ausdruck true ist, andernfalls gibt sie true zurück. | [ ! false ] gibt true zurück. |
| -o | ODER-Operation; gibt true zurück, wenn ein Ausdruck true ist. | [ $a -lt 20 -o $b -gt 100 ] gibt true zurück. |
| -a | UND-Operation; gibt nur dann true zurück, wenn beide Ausdrücke true sind. | [ $a -lt 20 -a $b -gt 100 ] gibt false zurück. |
Beispiele
Ein Beispiel für boolesche Operatoren ist wie folgt:
Beispiele
# Autor:Example
# url:www.example.com
a=10
b=20
if [ $a != $b ]
dann
echo "$a != $b: a ist nicht gleich b
else
echo "$a == $b: a ist gleich b
fi
if [ $a -lt 100 -a $b -gt 15 ]
dann
echo "$aist kleiner als 100 und$bgrößer als 15 : gibt true zurück
else
echo "$aist kleiner als 100 und$bgrößer als 15 : gibt false zurück
fi
if [ $a -lt 100 -o $b -gt 100 ]
dann
echo "$aist kleiner als 100 oder$bgrößer als 100 : gibt true zurück
else
echo "$aist kleiner als 100 oder$bgrößer als 100 : gibt false zurück
fi
if [ $a -lt 5 -o $b -gt 100 ]
dann
echo "$aist kleiner als 5 oder$bgrößer als 100 : gibt true zurück
else
echo "$aist kleiner als 5 oder$bgrößer als 100 : gibt false zurück
fi
Führen Sie das Skript aus, und das Ausgabeergebnis lautet wie folgt:
10 != 20 : a 不等于 b 10 小于 100 且 20 大于 15 : 返回 true 10 小于 100 oder 20 大于 100 : 返回 true 10 小于 5 oder 20 大于 100 : 返回 false
Logische Operatoren
Das Folgende stellt Shells logische Operatoren vor, wobei Variable a 10 und Variable b 20 ist:
| Operator | 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 |
Beispiele
Ein Beispiel für logische Operatoren ist wie folgt:
Beispiele
# Autor:Example
# url:www.example.com
a=10
b=20
if [[ $a -lt 100 && $b -gt 100 ]]
dann
echo return true
else
echo return false
fi
if [[ $a -lt 100 || $b -gt 100 ]]
dann
echo return true
else
echo return false
fi
Führen Sie das Skript aus, die Ausgabe ist wie folgt:
返回 false 返回 true
String-Operatoren
Die folgende Tabelle listet häufig verwendete String-Operatoren auf, wobei die Variable a "abc" und die Variable b "efg" ist:
| Operator | Beschreibung | Beispiel |
|---|---|---|
| = | Prüft, ob zwei Strings gleich sind; gibt true zurück, wenn sie gleich sind. | [ $a = $b ] gibt false zurück. |
| != | Prüft, ob zwei Strings nicht gleich sind; gibt true zurück, wenn sie nicht gleich sind. | [ $a != $b ] gibt true zurück. |
| -z | Prüft, ob die Stringlänge 0 ist; gibt true zurück, wenn sie 0 ist. | [ -z $a ] gibt false zurück. |
| -n | Prüft, ob die Stringlänge nicht 0 ist; gibt true zurück, wenn sie nicht 0 ist. | [ -n "$a" ] gibt true zurück. |
| $ | Prüft, ob der String nicht leer ist; gibt true zurück, wenn er nicht leer ist. | [ $a ] gibt true zurück. |
Beispiele
Ein Beispiel für String-Operatoren ist wie folgt:
Beispiele
# Autor: Beispiel
# url:www.example.com
a="abc"
b="efg"
if [ $a = $b ]
dann
echo "$a = $b: a ist gleich b"
else
echo "$a = $b: a ist nicht gleich b"
fi
if [ $a != $b ]
dann
echo "$a != $b: a ist nicht gleich b"
else
echo "$a != $b: a ist gleich b"
fi
if [ -z $a ]
dann
echo "-z $a: Stringlänge ist 0"
else
echo "-z $a: Stringlänge ist nicht 0"
fi
if [ -n "$a" ]
dann
echo "-n $a: Stringlänge ist nicht 0"
else
echo "-n $a: Stringlänge ist 0"
fi
if [ $a ]
dann
echo "$a: String ist nicht leer"
else
echo "$a: String ist leer"
fi
Führen Sie das Skript aus, die Ausgabe ist wie folgt:
abc = efg: a 不等于 b abc != efg : a 不等于 b -z abc : 字符串长度不为 0 -n abc : 字符串长度不为 0 abc : 字符串不为空
Dateitestoperatoren
Dateitestoperatoren werden verwendet, um verschiedene Attribute von Unix-Dateien zu prüfen.
Die Beschreibungen zur Attributerkennung sind wie folgt:
| Operator | Beschreibung | Beispiel |
|---|---|---|
| -b file | Prüfe, ob die Datei eine Blockgerätedatei ist; wenn ja, gib true zurück. | [ -b $file ] gibt false zurück. |
| -c file | Prüfe, ob die Datei eine Zeichengerätedatei ist; wenn ja, gib true zurück. | [ -c $file ] gibt false zurück. |
| -d file | Prüfe, ob die Datei ein Verzeichnis ist; wenn ja, gib true zurück. | [ -d $file ] gibt false zurück. |
| -f file | Prüfe, ob die Datei eine reguläre Datei ist (weder ein Verzeichnis noch eine Gerätedatei); wenn ja, gib true zurück. | [ -f $file ] gibt true zurück. |
| -g file | Prüfen Sie, ob das SGID-Bit für die Datei gesetzt ist; wenn ja, geben Sie true zurück. | [ -g $file ] gibt false zurück. |
| -k file | Prüfen Sie, ob das Sticky-Bit für die Datei gesetzt ist; wenn ja, geben Sie true zurück. | [ -k $file ] gibt false zurück. |
| -p file | Prüfen Sie, ob die Datei eine benannte Pipe ist; wenn ja, geben Sie true zurück. | [ -p $file ] gibt false zurück. |
| -u file | Prüfen Sie, ob das SUID-Bit für die Datei gesetzt ist; wenn ja, geben Sie true zurück. | [ -u $file ] gibt false zurück. |
| -r file | Prüfen Sie, ob die Datei lesbar ist; wenn ja, geben Sie true zurück. | [ -r $file ] gibt true zurück. |
| -w file | Prüfen Sie, ob die Datei beschreibbar ist; wenn ja, geben Sie true zurück. | [ -w $file ] gibt true zurück. |
| -x file | Prüfen Sie, ob die Datei ausführbar ist; wenn ja, geben Sie true zurück. | [ -x $file ] gibt true zurück. |
| -s file | Prüfen Sie, ob die Datei leer ist (ob die Dateigröße größer als 0 ist); geben Sie true zurück, wenn sie nicht leer ist. | [ -s $file ] gibt true zurück. |
| -e file | Prüfen Sie, ob die Datei (einschließlich Verzeichnisse) existiert; wenn ja, geben Sie true zurück. | [ -e $file ] gibt true zurück. |
Weitere Prüfoperatoren:
- -S: Prüft, ob eine Datei ein Socket ist.
- -L: Prüft, ob die Datei existiert und ein symbolischer Link ist.
Beispiele
The variable file represents a file/var/www/example/test.sh, sie hat eine Größe von 100 bytes und hatrwxBerechtigungen. Der folgende Code prüft verschiedene Attribute dieser Datei:
Beispiele
# Autor: Beispiel
# url:www.example.com
file="/var/www/example/test.sh"
if [ -r $file ]
dann
echo "Datei ist lesbar"
else
echo "Datei ist nicht lesbar"
fi
if [ -w $file ]
dann
echo "Datei ist beschreibbar"
else
echo "Datei ist nicht beschreibbar"
fi
if [ -x $file ]
dann
echo "Datei ist ausführbar"
else
echo "Datei ist nicht ausführbar"
fi
if [ -f $file ]
dann
echo "Datei ist eine reguläre Datei"
else
echo "Datei ist eine spezielle Datei"
fi
if [ -d $file ]
dann
echo "Datei ist ein Verzeichnis"
else
echo "Datei ist kein Verzeichnis"
fi
if [ -s $file ]
dann
echo "Datei ist nicht leer"
else
echo "Datei ist leer"
fi
if [ -e $file ]
dann
echo "Datei existiert"
else
echo "Datei existiert nicht"
fi
Führen Sie das Skript aus, die Ausgabe ist wie folgt:
File is readable File is writable File is executable File is a regular file File is not a directory File is not empty File exists
Inkrement- und Dekrement-Operatoren
Obwohl die Shell selbst keine ++- und --Operatoren wie C, C++ oder Java besitzt, kann dieselbe Funktionalität auf andere Weise implementiert werden. Im Folgenden sind einige gängige Methoden aufgeführt:
Verwendung des let-Befehls
letDer Befehl ermöglicht arithmetische Operationen mit ganzen Zahlen.
Beispiele
# Variablen initialisieren
num=5
# Inkrementieren
let num++
# Dekrementieren
let num--
echo $num
Verwendung von $(( )) für arithmetische Operationen
$(( ))Die Syntax ist auch eine Möglichkeit, arithmetische Operationen durchzuführen.
Beispiele
# Variablen initialisieren
num=5
# Inkrementieren
num=$((num + 1))
# Dekrementieren
num=$((num - 1))
echo $num
Verwendung des Befehls expr
exprDer Befehl kann für arithmetische Operationen verwendet werden, aber in modernen Skripten wird er nicht soletund$(( ))häufig verwendet.
Beispiele
# Variablen initialisieren
num=5
# Inkrementieren
num=$(expr $num + 1)
# Dekrementieren
num=$(expr $num - 1)
echo $num
Verwendung von (( )) für arithmetische Operationen
Ähnlich wie $(( )), kann die (( ))-Syntax auch für arithmetische Operationen verwendet werden.
Beispiele
# Variablen initialisieren
num=5
# Inkrementieren
((num++))
# Dekrementieren
((num--))
echo $num
Beispiele
Das folgende ist ein vollständiges Beispielskript, das die Verwendung von Inkrement- und Dekrementoperationen demonstriert:
Beispiele
# Variablen initialisieren
num=5
echo "Anfangswert:$num"
# Inkrementieren
let num++
echo "Nach Inkrement:$num"
# Dekrementieren
let num--
echo "Nach Dekrement:$num"
# Verwendung von $(( ))
num=$((num + 1))
echo "Verwendung von$(( )) nach Inkrement:$num"
num=$((num - 1))
echo "Verwenden von$(( )) nach Dekrement:$num"
# Verwenden von expr
num=$(expr $num + 1)
echo "Verwenden von expr nach Inkrement:$num"
num=$(expr $num - 1)
echo "Verwenden von expr nach Dekrement:$num"
# Verwenden von (( ))
((num++))
echo "Verwenden von (( )) nach Inkrement:$num"
((num--))
echo "Verwenden von (( )) nach Dekrement:$num"
Das Ausführen dieses Skripts gibt Folgendes aus:
初始值: 5 自增后: 6 自减后: 5 使用 $(( )) 自增后: 6 使用 $(( )) 自减后: 5 使用 expr 自增后: 6 使用 expr 自减后: 5 使用 (( )) 自增后: 6 使用 (( )) 自减后: 5Weitere Erweiterungen