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

#!/bin/bash

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

#!/bin/bash
# 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

#!/bin/bash
# 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

#!/bin/bash
# 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

#!/bin/bash
# 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

#!/bin/bash
# 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

#!/bin/bash
# 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

#!/bin/bash

# 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

#!/bin/bash

# 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

#!/bin/bash

# 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

#!/bin/bash

# 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

#!/bin/bash

# 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
使用 (( )) 自减后: 5
Weitere Erweiterungen