Test-Kommando: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| (2 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
| − | + | = Das test-Kommando = | |
| − | |||
| − | + | * Der eingebaute Befehl '''test''' gibt sein Ergebnis als Returncode zurück. | |
| + | * Dieser Befehl wird daher oft in Kontrollstrukturen der Bash zur Verzweigung verwendet. | ||
| − | + | Es existieren zwei Schreibweisen: | |
| − | |||
| − | + | * '''test''' bedingung | |
| − | ''bedingung'' | + | * '''[''' bedingung ''']''' |
| − | |||
| − | + | Ist das von ''bedingung'' zurückgelieferte Ergebnis wahr, wird der Returncode 0 übergeben, sonst ungleich 0. | |
| − | + | ''bedingung'' kann ein numerischer Vergleich, ein Stringvergleich, eine Prüfung von Objekteigenschaften oder eine beliebige Kombination der vorhergehenden sein. | |
| − | |||
| − | |||
| + | == Numerischer Vergleich == | ||
| + | '''test''' zahl1 '''-op''' zahl2 (op: eq, ne, lt, gt, ge, le) | ||
| + | * ZAHL=4 | ||
| + | * test $ZAHL -eq "4" && echo stimmt | ||
{| border=1 cellpadding="2" | {| border=1 cellpadding="2" | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
|- | |- | ||
| − | | - | + | | -eq || gleich |
| − | | | ||
|- | |- | ||
| − | | - | + | | -ne || ungleich |
| − | | | ||
|- | |- | ||
| − | | -ge | + | | -lt || kleiner |
| − | | größer oder gleich | + | |- |
| − | |- | + | | -gt || größer |
| − | | -le | + | |- |
| − | | kleiner oder gleich | + | | -ge || größer oder gleich |
| + | |- | ||
| + | | -le || kleiner oder gleich | ||
|} | |} | ||
| − | ==Stringvergleich== | + | == Stringvergleich == |
| − | '''test''' string1 '''=''' string2 | + | '''test''' string1 '''=''' string2 |
| − | '''test''' string1 '''!=''' string2 | + | '''test''' string1 '''!=''' string2 |
| − | '''test''' –n | + | '''test''' –n string oder '''test''' string (Länge von string > 0) |
| − | '''test''' –z | + | '''test''' –z string (Länge von string = 0) |
| − | *HOBBIT=frodo | + | * HOBBIT=frodo |
| − | *'''test''' $HOBBIT '''=''' "bilbo" && echo frodo | + | * '''test''' $HOBBIT '''=''' "bilbo" && echo frodo |
| − | *'''test''' $HOBBIT '''=''' "bilbo" && echo bilbo | + | * '''test''' $HOBBIT '''=''' "bilbo" && echo bilbo |
| − | *HOBBIT=bilbo | + | * HOBBIT=bilbo |
| − | *'''test''' $HOBBIT '''=''' "bilbo" && echo bilbo | + | * '''test''' $HOBBIT '''=''' "bilbo" && echo bilbo |
bilbo | bilbo | ||
| − | ==Objekteigenschaften== | + | == Objekteigenschaften == |
| − | '''test -op''' objekt | + | '''test -op''' objekt |
| + | |||
{| border=1 cellpadding="2" | {| border=1 cellpadding="2" | ||
| − | |||
|- | |- | ||
| − | | | + | | d || Directory |
|- | |- | ||
| − | | | + | | f || Datei |
|- | |- | ||
| − | | | + | | s || nicht leere Datei |
|- | |- | ||
| − | | | + | | r || Leserecht auf das Objekt |
|- | |- | ||
| − | | x || | + | | w || Schreibrecht auf das Objekt |
| + | |- | ||
| + | | x || Ausführungsrecht auf das Objekt | ||
|} | |} | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | ==Prioritäten bei logischen Verknüpfungen== | + | * test -f /etc/shadow && echo sicheres system |
| + | sicheres system | ||
| + | * test -r /etc/shadow || echo so ist es richtig | ||
| + | so ist es richtig | ||
| + | |||
| + | == Prioritäten bei logischen Verknüpfungen == | ||
{| border=1 | {| border=1 | ||
| − | | runde Klammer || Negation || AND || | + | | runde Klammer || Negation || AND || OR |
|- | |- | ||
| − | | '''()''' || '''!''' | + | | '''()''' || '''!''' || '''-a''' || '''-o''' |
|} | |} | ||
| + | test \'''(''' -r dat '''-o''' -w dat \''')''' | ||
| + | test '''!''' \'''(''' -r dat '''-o''' -w dat \''')''' | ||
| + | test ''$name''; echo $? | ||
| + | |||
| + | *! test -r /etc/shadow && echo so ist es richtig | ||
| + | so ist es richtig | ||
| + | |||
| + | == Alternative Schreibweise == | ||
| + | * '''test''' kann auch mit eckigen Klammern aufgerufen werden. | ||
| + | * '''[ 2 -eq 2 ]''' ist äquivalent zu '''test 2 -eq 2'''. | ||
| − | + | = Aufgaben = | |
| − | |||
| − | |||
| − | * | + | == Grundlegendes == |
| − | + | * Was macht das '''test'''-Kommando? | |
| + | * Welche Schreibweisen gibt es? | ||
| + | |||
| + | == Numerischer Vergleich == | ||
| + | * Welche numerischen Vergleichsoperatoren gibt es? | ||
| + | * Schreiben Sie ein Skript, das ausgibt, ob zwei Zahlen gleich sind oder nicht. | ||
| + | |||
| + | == String-Vergleich == | ||
| + | * Welche String-Vergleichsoperatoren gibt es? | ||
| + | * Schreiben Sie ein Skript, das ausgibt, ob zwei Strings gleich sind oder nicht. | ||
| + | |||
| + | == Objekt-Eigenschaften == | ||
| + | * Welche '''test'''-Operatoren kann man auf eine Datei anwenden? | ||
| + | * Schreiben Sie ein Skript, das ausgibt, ob eine Datei ein Verzeichnis ist. | ||
| − | = | + | == Aufgabe 4 (benötigt das Test-Kommando) == |
| + | (geht nur als root) | ||
| − | * ''' | + | * Schreiben Sie einen Einzeiler, der das IPv4-Routing auf der Maschine ein- oder ausschaltet: |
| − | * ''' | + | ** '''sysctl net.ipv4.ip_forward=1''' |
| + | ** '''sysctl net.ipv4.ip_forward=0''' | ||
| + | * Falls es gerade an ist, soll es ausgeschaltet werden. | ||
| + | * Falls es gerade aus ist, soll es angeschaltet werden. | ||
| + | <!-- * [ $(cat /proc/sys/net/ipv4/ip_forward) -gt 0 ] && sysctl net.ipv4.ip_forward=0 || sysctl net.ipv4.ip_forward=1 --> | ||
Aktuelle Version vom 12. Oktober 2025, 19:53 Uhr
Das test-Kommando
- Der eingebaute Befehl test gibt sein Ergebnis als Returncode zurück.
- Dieser Befehl wird daher oft in Kontrollstrukturen der Bash zur Verzweigung verwendet.
Es existieren zwei Schreibweisen:
- test bedingung
- [ bedingung ]
Ist das von bedingung zurückgelieferte Ergebnis wahr, wird der Returncode 0 übergeben, sonst ungleich 0. bedingung kann ein numerischer Vergleich, ein Stringvergleich, eine Prüfung von Objekteigenschaften oder eine beliebige Kombination der vorhergehenden sein.
Numerischer Vergleich
test zahl1 -op zahl2 (op: eq, ne, lt, gt, ge, le)
- ZAHL=4
- test $ZAHL -eq "4" && echo stimmt
| -eq | gleich |
| -ne | ungleich |
| -lt | kleiner |
| -gt | größer |
| -ge | größer oder gleich |
| -le | kleiner oder gleich |
Stringvergleich
test string1 = string2 test string1 != string2 test –n string oder test string (Länge von string > 0) test –z string (Länge von string = 0)
- HOBBIT=frodo
- test $HOBBIT = "bilbo" && echo frodo
- test $HOBBIT = "bilbo" && echo bilbo
- HOBBIT=bilbo
- test $HOBBIT = "bilbo" && echo bilbo
bilbo
Objekteigenschaften
test -op objekt
| d | Directory |
| f | Datei |
| s | nicht leere Datei |
| r | Leserecht auf das Objekt |
| w | Schreibrecht auf das Objekt |
| x | Ausführungsrecht auf das Objekt |
- test -f /etc/shadow && echo sicheres system
sicheres system
- test -r /etc/shadow || echo so ist es richtig
so ist es richtig
Prioritäten bei logischen Verknüpfungen
| runde Klammer | Negation | AND | OR |
| () | ! | -a | -o |
test \( -r dat -o -w dat \) test ! \( -r dat -o -w dat \) test $name; echo $?
- ! test -r /etc/shadow && echo so ist es richtig
so ist es richtig
Alternative Schreibweise
- test kann auch mit eckigen Klammern aufgerufen werden.
- [ 2 -eq 2 ] ist äquivalent zu test 2 -eq 2.
Aufgaben
Grundlegendes
- Was macht das test-Kommando?
- Welche Schreibweisen gibt es?
Numerischer Vergleich
- Welche numerischen Vergleichsoperatoren gibt es?
- Schreiben Sie ein Skript, das ausgibt, ob zwei Zahlen gleich sind oder nicht.
String-Vergleich
- Welche String-Vergleichsoperatoren gibt es?
- Schreiben Sie ein Skript, das ausgibt, ob zwei Strings gleich sind oder nicht.
Objekt-Eigenschaften
- Welche test-Operatoren kann man auf eine Datei anwenden?
- Schreiben Sie ein Skript, das ausgibt, ob eine Datei ein Verzeichnis ist.
Aufgabe 4 (benötigt das Test-Kommando)
(geht nur als root)
- Schreiben Sie einen Einzeiler, der das IPv4-Routing auf der Maschine ein- oder ausschaltet:
** sysctl net.ipv4.ip_forward=1 ** sysctl net.ipv4.ip_forward=0
- Falls es gerade an ist, soll es ausgeschaltet werden.
- Falls es gerade aus ist, soll es angeschaltet werden.