Test-Kommando: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „Der eingebaute Befehl ''test'' gibt sein Ergebnis als Returncode zurück. Dieser Befehl wird daher oft in Kontrollstrukturen der bash zur Verzweigung verwende…“)
 
 
(3 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Der eingebaute Befehl ''test'' gibt sein Ergebnis als Returncode zurück. Dieser Befehl wird daher oft in
+
= Das test-Kommando =
Kontrollstrukturen der bash zur Verzweigung verwendet.
 
  
Es existieren 2 Schreibweisen:
+
* Der eingebaute Befehl '''test''' gibt sein Ergebnis als Returncode zurück. 
 +
* Dieser Befehl wird daher oft in Kontrollstrukturen der Bash zur Verzweigung verwendet.
  
'''test''' bedingung
+
Es existieren zwei Schreibweisen:
'''[''' bedingung ''']'''
 
  
Ist das von ''bedingung'' zurückgelieferte Ergebnis wahr, wird der Returncode 0 übergeben, sonst ungleich 0.
+
* '''test''' bedingung
''bedingung'' kann ein numerischer Vergleich, ein Stringvergleich, eine Prüfung von Objekteigenschaften oder
+
* '''[''' bedingung ''']'''
eine beliebige Kombination der vorhergehenden sein.
 
  
==Numerischer Vergleich==
+
Ist das von ''bedingung'' zurückgelieferte Ergebnis wahr, wird der Returncode 0 übergeben, sonst ungleich 0. 
'''test''' zahl1 '''-op''' zahl2 (op: eq, ne, lt, gt, ge, le)
+
''bedingung'' kann ein numerischer Vergleich, ein Stringvergleich, eine Prüfung von Objekteigenschaften oder eine beliebige Kombination der vorhergehenden sein.
*ZAHL=4
 
*test $ZAHL -eq "4" && echo stimmt
 
  
 +
== 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
 
 
|-
 
|-
| -lt
+
| -eq || gleich
| kleiner
 
 
|-
 
|-
| -gt
+
| -ne || ungleich
| größer
 
 
|-
 
|-
| -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 string  oder  test string (Länge von string größer null)
+
  '''test''' –n string oder '''test''' string (Länge von string > 0)
  '''test''' –z string (Länge von string gleich null)
+
  '''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
+
| d || Directory
 +
|-
 +
| f || Datei
 
|-
 
|-
| s || nicht leere Datei
+
| s || nicht leere Datei
 
|-
 
|-
| r || leserecht auf das Objekt
+
| r || Leserecht auf das Objekt
 
|-
 
|-
| w || schreibrecht auf das Objekt
+
| w || Schreibrecht auf das Objekt
 
|-
 
|-
| x || ausführungsrecht 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==
+
* 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 || OR
+
| runde Klammer || Negation || AND || OR
 
|-
 
|-
| '''()''' || '''!''' ||   '''-a''' || '''-o'''
+
| '''()''' || '''!''' || '''-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. 
  
test \'''(''' -r dat '''-o''' -w dat \''')'''
+
== Aufgabe 4 (benötigt das Test-Kommando) ==
test '''!''' \'''(''' -r dat '''-o''' -w dat \''')'''
+
(geht nur als root)
test ''$name'';echo $?
 
  
*! test -r /etc/shadow && echo so ist es richtig
+
* Schreiben Sie einen Einzeiler, der das IPv4-Routing auf der Maschine ein- oder ausschaltet: 
so ist es richtig
+
  ** '''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.