Test/TMP
TMP
Bedingungen testen
Das wichtigste Kommando ist 'test', mit dem man mannigfache Bedingungen testen kann
test Argument
Dieses Kommando prüft eine Bedingung und liefert 'true' (0), falls die Bedingung erfüllt ist und 'false' (1), falls die Bedingung nicht erfüllt ist. Der Fehlerwert 2 wird zurückgegeben, wenn das Argument syntaktisch falsch ist (meist durch Ersetzung hervorgerufen)
Es lassen sich Dateien, Zeichenketten und Integer-Zahlen (16 Bit, bei Linux 32 Bit) überprüfen. Das Argument von Test besteht aus einer Testoption und einem Operanden, der ein Dateiname oder eine Shell-Variable (Inhalt: String oder Zahl) sein kann
In bestimmten Fällen können auf der rechten Seite eines Vergleichs auch Strings oder Zahlen stehen - bei der Ersetzung von leeren Variablen kann es aber zu Syntaxfehlern kommen. Weiterhin lassen sich mehrere Argumente logisch verknüpfen (UND, ODER, NICHT). Beispiel
test -w /etc/passwd
mit der Kommandoverkettung lassen sich so schon logische Entscheidungen treffen, beispielsweise
test -w /etc/passwd && echo "Du bist ROOT"
Normalerweise kann statt 'test' das Argument auch in eckigen Klammern gesetzt werden. Die Klammern müssen von Leerzeichen umschlossen werden
[ -w /etc/passwd ]
- Operationen
Dateitests | |
-b Datei | Die Datei existiert und ist ein blockorientiertes Gerät |
-c Datei | Die Datei existiert und ist ein zeichenorientiertes Gerät |
-d Datei | Die Datei existiert und ist ein Verzeichnis |
-e Datei | Datei existiert |
-f Datei | Die Datei existiert und ist eine reguläre Datei |
-g Datei | Die Datei existiert und das Gruppen-ID-Bit ist gesetzt |
-h Datei | Die Datei existiert und ist ein symbolischer Link |
-k Datei | Die Datei existiert und das Sticky-Bit ist gesetzt |
-p Datei | Die Datei existiert und ist eine Named Pipe |
-r Datei | Die Datei existiert und ist lesbar |
-s Datei | Die Datei existiert und ist nicht leer |
-t [n] | DATEI-Descriptor FD (Standard: Standardausgabe) ist auf Tty offen |
-u Datei | Die Datei existiert und das Setuid-Bit ist gesetzt |
-w Datei | Die Datei existiert und ist beschreibbar |
-x Datei | Die Datei existiert und ist ausführbar |
Datei1 -nt Datei2 | Datei1 ist neuer als Datei2 |
Datei1 -ot Datei2 | Datei1 ist älter als Datei2 |
Datei1 -ef Datei2 | Beide Dateien belegen dieselbe Inode auf demselben Gerät |
- Beispiel
Wenn ein Verzeichnis RCS existiert
if [ -d RCS ] Wenn ein Verzeichnis RCS existiert
Bedingungen für Zeichenfolgen | |
-n s1 | Die Länge der Zeichenfolge s1 ist ungleich Null |
-z s1 | Die Länge der Zeichenfolge s1 ist gleich Null |
s1 = s2 | Die Zeichenfolgen s1 und s2 sind identisch |
s1 != s2 | Die Zeichenfolgen s1 und s2 sind nicht identisch |
Zeichenfolge | Die Zeichenfolge ist nicht Null |
- Beispiel
Wenn dieAntwort nicht "j" ist
if [ "$Antwort" != "j" ]
Ganzzahlvergleiche: | |
n1 -eq n2 | n1 ist gleich n2 |
n1 -ge n2 | n1 ist größer oder gleich n2 |
n1 -gt n2 | n1 ist größer als n2 |
n1 -le n2 | n1 ist kleiner oder gleich n2 |
n1 -lt n2 | n1 ist kleiner n2 |
n1 -ne n2 | n1 ist ungleich n2 |
- Beispiele
while test# -gt 0 Solange Argumente vorliegen
while [ -n "$1" ] Solange das erste Argument nicht leer ist
if [count -lt 10 ] Wenncount kleiner 10
Kombinierte Formen | |
(Bedingung) | Wahr, wenn die Bedingung zutrifft (wird für die Gruppierung verwendet). Den Klammern muss ein \ vorangestellt werden |
! Bedingung i | Wahr, wenn die Bedingung nicht zutrifft (NOT) |
Bedingung1 -a Bedingung2 | Wahr, wenn beide Bedingungen zutreffen (AND) |
Bedingung1 -o Bedingung2 | Wahr, wenn eine der beiden Bedingungen zutrifft (OR) |
- Beispiel
Wenn das erste Argument keine lesbare oder reguläre Datei ist
if [ ! -r "$1" -o ! -f "$1" ]