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.