Linux test-Befehl
testEs ist ein eingebauter Befehl im Linux/Unix-System, der zur bedingten Auswertung verwendet wird und hauptsächlich für verschiedene Tests und Vergleichsoperationen in Shell-Skripten genutzt wird. Er kann Dateiattribute prüfen, Zeichenketten und numerische Werte vergleichen und ist ein unverzichtbares Werkzeug zum Schreiben von Shell-Skripten.
Grundlegende Syntax
test EXPRESSION # 或者使用方括号格式(更常用) [ EXPRESSION ]
Hinweis: Bei Verwendung des Klammerformats müssen Leerzeichen zwischen dem Ausdruck und den Klammern stehen, d. h.,
[空格EXPRESSION空格]
Hauptfunktionskategorien
1. Dateitests
Prüft verschiedene Attribute von Dateien oder Verzeichnissen:
| Ausdruck | Bedeutung |
|---|---|
-e 文件 |
Ob die Datei existiert |
-f 文件 |
Ist eine reguläre Datei (weder ein Verzeichnis noch eine Gerätedatei) |
-d 文件 |
Ist ein Verzeichnis |
-s 文件 |
Dateigröße ist nicht leer |
-r 文件 |
Datei ist lesbar |
-w 文件 |
Datei ist beschreibbar |
-x 文件 |
Datei ist ausführbar |
-L 文件 |
Datei ist ein symbolischer Link |
Beispiel:
Beispiele
echo "Dies ist eine reguläre Datei"
fi
2. Zeichenkettenvergleich
Vergleicht die Beziehung zwischen zwei Zeichenketten:
| Ausdruck | Bedeutung |
|---|---|
-z "字符串" |
Zeichenkettenlänge ist 0 |
-n "字符串" |
Zeichenkettenlänge ist nicht 0 |
"串1" = "串2" |
Zeichenketten sind gleich |
"串1" != "串2" |
Zeichenketten sind nicht gleich |
Beispiel:
Beispiele
if [ -z "$username" ]; then
echo "Benutzername darf nicht leer sein"
fi
3. Numerischer Vergleich
Vergleicht die Beziehung zwischen zwei Ganzzahlen:
| Ausdruck | Bedeutung |
|---|---|
n1 -eq n2 |
Equal |
n1 -ne n2 |
Nicht gleich |
n1 -gt n2 |
Größer als |
n1 -ge n2 |
Größer als oder gleich |
n1 -lt n2 |
Kleiner als |
n1 -le n2 |
Kleiner als oder gleich |
Beispiel:
Beispiele
echo "Derzeitiger Root-Benutzer"
fi
4. Logische Operatoren
Kombiniert mehrere Testbedingungen:
| Operator | Bedeutung | Beispiel |
|---|---|---|
! |
Logisches NICHT | [ ! -f file ] |
-a |
Logisches AND | [ -f file -a -r file ] |
-o |
Logisches OR | [ -d dir -o -f file ] |
Moderne empfohlene Syntax(mit&&und||):
Beispiele
[ -d dir ] || [ -f file ] # Ist ein Verzeichnis oder eine Datei
Erweiterte Nutzung
1. Auswertung zusammengesetzter Bedingungen
Beispiele
echo "Datei existiert und ist lesbar"
fi
2. Kombination mit if-Anweisungen
Beispiele
echo "Dienst wird gestartet..."
elif [ "$1" = "stop" ]; then
echo "Dienst wird gestoppt..."
else
echo "Ungültiger Parameter"
fi
3. Verwendung in der Variablenzuweisung
Beispiele
Häufige Fehler und Vorsichtsmaßnahmen
Probleme mit Leerzeichen:
Beispiele
[ "$var"="value" ] # Falsch, fehlendes Leerzeichen
String-Variablen in Anführungszeichen setzen:
Beispiele
[ -n $var ] # Fehler, wenn $var leer ist
Numerischer Vergleich vs. String-Vergleich:
Beispiele
[ "10" > "2" ] # Falsch, dies ist ein String-Vergleich (lexikografisch)
Datei-Testpfad:
Beispiele
[ -f $file ] # Fehler tritt auf, wenn der Pfad Leerzeichen enthält
Praktische Anwendungsbeispiele
Beispiel 1: Prüfen, ob das Backup-Verzeichnis existiert
Beispiele
if [ ! -d "$backup_dir" ]; then
mkdir -p "$backup_dir"
echo "Backup-Verzeichnis wird erstellt:$backup_dir"
fi
Beispiel 2: Benutzereingabe validieren
Beispiele
if [ "$age" -lt 0 -o "$age" -gt 120 ]; then
echo "Ungültige Alterseingabe"
exit 1
fi
Beispiel 3: Dienststart-Skript
Beispiele
if [ "$1" = "start" ]; then
if [ -f "/var/run/service.pid" ]; then
echo "Dienst läuft bereits"
else
echo "Dienst wird gestartet..."
# Startbefehl
fi
elif [ "$1" = "stop" ]; then
# Stopp-Logik
else
echo "Verwendung: $0 {start|stop}"
fi
Zusammenfassung
testDer Befehl ist ein grundlegendes Werkzeug in der Shell-Skript-Programmierung. Wenn Sie ihn beherrschen, können Sie:
- Bedingte Verzweigungslogik implementieren
- Datei- und Verzeichnisstatus validieren
- Zeichenketten und numerische Werte vergleichen
- Komplexe Auswertungsbedingungen erstellen
Merken Sie sich die wichtigsten Punkte:
- Das Klammerformat wird häufiger verwendet, aber achte auf Leerzeichen
- Umschließe Variablenreferenzen mit doppelten Anführungszeichen
- Unterscheide zwischen Zeichenkettenvergleichs- und numerischen Vergleichsoperatoren
- Verwende moderne
&&und||um zu ersetzen-aund-o
Linux-Befehlsenzyklopädie