Test-Kommando: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Keine Bearbeitungszusammenfassung |
|||
| (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.