Bash test Kommando: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(Die Seite wurde neu angelegt: „=test-Kommando= Der eingebaute Befehl ''test'' gibt sein Ergebnis als Returncode zurück. Dieser Befehl wird daher oft in Kontrollstrukturen der bash zur Verz…“) |
|||
| Zeile 86: | Zeile 86: | ||
*! test -r /etc/shadow && echo so ist es richtig | *! test -r /etc/shadow && echo so ist es richtig | ||
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. | ||
| + | <pre> | ||
| + | if [ -f "$ FILE"] | ||
| + | </pre> | ||
| + | *um leere Zeichenfolgen oder Dateinamen mit Leerzeichen richtig zu behandeln. Mit "[[" sind die Anführungszeichen unnötig: | ||
| + | <pre> | ||
| + | if [[ -f $ FILE ]] | ||
| + | </pre> | ||
| + | *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 | ||
| + | <pre> | ||
| + | if ["$ ANSWER" = y -o "$ ANSWER" = yes] | ||
| + | </pre> | ||
| + | *Mit [[ können Sie dies als schreiben | ||
| + | <pre> | ||
| + | if [[ $ ANSWER = ~ ^ y (es)? ]] | ||
| + | </pre> | ||
| + | *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 * | ||
Aktuelle Version vom 6. Juni 2024, 07:03 Uhr
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 *