Bash test Kommando
Version vom 6. Juni 2024, 07:03 Uhr von Maximilian.pottgiesser (Diskussion | Beiträge)
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 2 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 größer null) test –z string (Länge von string gleich null)
- 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
Das neue Test Kommando
- "[[" ist Bashs Verbesserung des "[" Befehls.
- Es ist die bessere Wahl, wenn Sie Skripte schreiben, die auf Bash abzielen. Meine Favoriten sind:
- Es ist eine syntaktische Funktion der Shell, daher weist sie ein besonderes Verhalten auf, das "[" nicht hat.
- Variablen müssen nicht mehr quotiert werden, da leere Zeichenfolgen und Zeichenfolgen mit Leerzeichen intuitiver behandelt werden.
- Zum Beispiel müssen Sie mit "[" schreiben.
if [ -f "$ FILE"]
- um leere Zeichenfolgen oder Dateinamen mit Leerzeichen richtig zu behandeln. Mit "[[" sind die Anführungszeichen unnötig:
if [[ -f $ FILE ]]
- Da es sich um eine syntaktische Funktion handelt, können Sie && und || verwenden Operatoren für Boolesche Tests und <und> für Zeichenfolgenvergleiche.
- [ kann dies nicht tun, da es sich um einen regulären Befehl handelt und &&, ||, <und> nicht als Befehlszeilenargumente an reguläre Befehle übergeben werden.
- Es hat einen wunderbaren Operator = ~, um Übereinstimmungen mit regulären Ausdrücken zu erstellen. Mit [ könntest du schreiben
if ["$ ANSWER" = y -o "$ ANSWER" = yes]
- Mit [[ können Sie dies als schreiben
if [[ $ ANSWER = ~ ^ y (es)? ]]
- Sie können sogar auf die erfassten Gruppen zugreifen, die in BASH_REMATCH gespeichert sind.
- Zum Beispiel wäre $ {BASH_REMATCH [1]} "es", wenn Sie oben ein vollständiges "ja" eingeben.
- Sie erhalten die Mustererkennung aka Globbing kostenlos.
- Vielleicht sind Sie weniger streng im Schreiben von Ja. Vielleicht bist du okay, wenn der Benutzer y-irgendetwas eingibt. Haben Sie sich versichert:
- wenn $ ANSWER = y *