Test-Kommando: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Linkai.zhang (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
 
(2 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
|-
|-
| s || nicht leere Datei
| f || Datei
|-
|-
| r || leserecht auf das Objekt
| s || nicht leere Datei
|-
|-
| w || schreibrecht auf das Objekt
| r || Leserecht auf das Objekt
|-
|-
| x || ausführungsrecht 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==
* 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'''.


test \'''(''' -r dat '''-o''' -w dat \''')'''
= Aufgaben =
test '''!''' \'''(''' -r dat '''-o''' -w dat \''')'''
test ''$name'';echo $?


*! test -r /etc/shadow && echo so ist es richtig
== Grundlegendes ==
  so ist es richtig
* 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. 


= Alternative Schreibweise =
== Aufgabe 4 (benötigt das Test-Kommando) ==
(geht nur als root)


* '''test''' kann auch mit eckigen Klammern aufgerufen werden
* Schreiben Sie einen Einzeiler, der das IPv4-Routing auf der Maschine ein- oder ausschaltet: 
* '''[ 2 -eq 2 ]''' ist äquivalent zu '''test 1 -eq 1'''
  ** '''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.