Bash -Testbefehl

Bash -Testbefehl
In Bash Shell vergleicht der Testbefehl ein Element mit einem anderen und gibt wahr oder falsch zurück. Beim Bash -Scripting ist der Testbefehl ein wesentlicher Bestandteil der bedingten Aussagen, die den Logik und den Programmfluss steuern.

Dieser Leitfaden zeigt, wie der Befehl Bash -Test verwendet wird.

Testbefehl

Der Testbefehl nimmt eine AUSDRUCK als Argument. Nach der Berechnung des Ausdrucks gibt der Test einen Wert auf die Bash -Variable „$?”. Wenn der Wert 0 ist, war die Expressionsbewertung wahr. Wenn der Wert 1 ist, war die Expressionsbewertung falsch.

Es gibt zwei Syntaxe für die Verwendung des Testbefehls.

$ Test Ausdruck
$ [Ausdruck]

Beachten Sie, dass bei „[“ [[“an beiden Enden des AUSDRUCK.

Testergebrauch

Hier ist ein kurzes Beispiel dafür, wie der Testbefehl funktioniert. Wir werden überprüfen, ob 1 gleich 2 ist. Wenn wahr, ist die Ausgabe „wahr“. Andernfalls ist die Ausgabe "falsch".

$ test 1 -eq 2 && echo "true" || echo "falsch"

Lassen Sie es uns aufschlüsseln.

  • Test: Der Testbefehl.
  • 1: Das erste Element zum Vergleich.
  • -Gl.: Vergleichsmethode (ob die Werte gleich sind).
  • 2: Das zweite Element zum Vergleich.

Wenn der Testteil wahr ist, wird der erste Echobefehl ausgeführt. Andernfalls wird der zweite Echobefehl ausgeführt.

Der gleiche Befehl kann mit "[" ausgedrückt werden.

$ [1 -eq 2] && echo "true" || echo "falsch"

Ausdruck

Der Ausdruck gibt dem Testbefehl seine wahre Kraft. Der Test kann Strings, Dateien und Ganzzahlen zum Vergleich verwenden. Hier ist eine kurze Liste aller verfügbaren Testausdruckformate.

Saite
In der Programmierung ist eine Zeichenfolge eine Reihe von Zeichen, die im Allgemeinen zur Darstellung von Text verwendet werden. Zum Beispiel wird „Hallo Welt“ im folgenden Echo -Befehl als Zeichenfolge behandelt.

$ echo „Hallo Welt.”

Der Testbefehl unterstützt die folgenden String -Ausdrücke.

  • -N: Stringlänge ist ungleich Null.
  • -Z: Stringlänge ist Null.
  • : String-Wert ist ungleich Null (quivalent zu „-n“).
  • =: Sowohl String_a als auch String_B sind gleich.
  • !=: Die Strings String_A und String_B sind nicht gleich.

Probieren wir diese Ausdrücke aus.

$ [-n "Hello World"] && echo "wahr" || echo "falsch"
$ [-Z "Hallo Welt"] && echo "wahr" || echo "falsch"
$ ["Hallo Welt" != "Hallo Welt"] && echo "wahr" || echo "falsch"
$ ["Hallo Welt" = "Hallo Welt"] && echo "wahr" || echo "falsch"

Ganze Zahl

Das allererste Beispiel in diesem Handbuch zeigt einen Ganzzahlvergleich. Es gibt weitere Möglichkeiten, Ganzzahlen zu vergleichen.

  • -EQ: Integer_a ist gleich integer_b.
  • -NE: Integer_a ist nicht gleich integer_b
  • -GE: Integer_a ist größer als oder gleich integer_b.
  • -GT: Integer_a ist größer als Integer_b.
  • -LE: Integer_a ist weniger oder gleich integer_b.
  • -LT: Integer_a ist weniger als Integer_B.

Lassen Sie uns diese Ausdrücke in die Tat umsetzen.

$ [5 -EQ 10] && echo "true" || echo "falsch"
$ [5 -GT 2] && echo "true" || echo "falsch"
$ [4 -le 5] && echo "true" || echo "falsch"

Datei

Dateien können auch Teil des Ausdrucks sein. Hier ist die Liste der unterstützten Dateiausdrücke.

  • -EF: Sowohl Datei_a als auch File_B haben ähnliche Geräte- und Inode -Nummer. Wenn es wahr ist, bedeutet dies, dass die Dateien höchstwahrscheinlich symlyiert sind. Erfahren Sie mehr über Linux Symbolic Links.
  • -NT: In Bezug auf das Änderungsdatum ist Datei_a neuer als File_B.
  • -OT: File_a ist älter als File_B.

Der Rest der unterstützten Dateiausdrücke bezieht sich auf eine einzelne Eigenschaft einer einzelnen Datei.

  • -e: file_a existiert.
  • -F: File_a existiert und eine reguläre Datei.
  • -D: Datei_a existiert und ist ein Verzeichnis.
  • -R: Datei_a existiert mit Leseberechtigungen.
  • -W: Datei_a existiert mit Schreibberechtigungen.
  • -X: Datei_a existiert mit Ausführungsberechtigungen.
  • -S: File_a existiert und die Dateigröße ist größer als Null.
  • -O: Datei_a existiert und der Eigentümer ist eine effektive Benutzer -ID.
  • -G: Datei_a existiert und der Eigentümer ist eine effektive Gruppen -ID.
  • -H: File_a existiert und es ist ein symbolischer Link.
  • -L: File_a existiert und es ist ein symbolischer Link.
  • -B: File_a existiert. Es ist eine blockspezifische Datei.
  • -C: File_a existiert. Es ist eine charakterspezifische Datei.
  • -S: File_a existiert. Es ist eine Steckdose.

Schauen wir uns einige Beispiele an.

$ [-x/usr/bin/bash] && echo $?
$ [-s /bin /bash] && echo $?
$ [-r /bin] && echo $?
$ [-e /hello_world] && echo "true" || echo "falsch"

Implementieren von Tests in Bash -Skripten

Bisher haben wir gezeigt, wie der Testbefehl verwendet wird, um festzustellen, ob eine bestimmte Bedingung wahr oder falsch ist. Wir können dies in Bash -Skripte implementieren, um nützliche Entscheidungen zu treffen.

Schauen Sie sich das folgende kurze Skript an.

#!/Bin/Bash
wenn [$ (whoami) = root]; Dann
echo "root"
anders
echo "nicht root"
fi

Hier prüft die IF -Anweisung, ob die Bedingung wahr oder falsch ist. Mit dem Testbefehl können wir den booleschen Wert problemlos erhalten.

Führen Sie das Skript mit und ohne Root -Privileg aus.

$ ./Dummy.Sch
$ sudo ./Dummy.Sch

Es ist eine einfache If-ELSE-Aussage-Demonstration. Schauen Sie sich die Bash-IF-ELSE-Aussagen an, um weitere eingehende Anwendungen zu erhalten.

Abschließende Gedanken

Der Testbefehl ist einfach, aber leistungsfähig. Dieser Leitfaden erklärt und demonstriert verschiedene Möglichkeiten zur Verwendung des Tests. Die vollständige Liste aller unterstützten Ausdrücke finden Sie auf der Mannseite.

$ MAN -Test

Happy Computing!