Test-Kommando

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

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.