Skip to main content

So verwenden Sie Testbedingungen in einem Bash-Skript

Select Anweisung - (Shell-Programmierung-1-020) (Juni 2025)

Select Anweisung - (Shell-Programmierung-1-020) (Juni 2025)
Anonim

Der Befehl test kann in der Linux-Befehlszeile verwendet werden, um ein Element mit einem anderen zu vergleichen. In BASH-Shell-Skripts wird er jedoch häufiger als Teil bedingter Anweisungen verwendet, die die Logik und den Programmfluss steuern.

Ein grundlegendes Beispiel

Sie können diese Befehle einfach durch Öffnen eines Terminalfensters ausprobieren.

test 1 -eq 2 && echo "ja" || Echo "Nein"

Der obige Befehl lässt sich wie folgt aufteilen:

  • test - Dies bedeutet, dass Sie einen Vergleich durchführen möchten
  • 1 - Das erste Element, das Sie vergleichen werden
  • -eq - Wie vergleichst du das? In diesem Fall testen Sie, ob eine Zahl einer anderen entspricht.
  • 2 - Das Element, mit dem Sie das erste Element vergleichen
  • && - Führen Sie die folgende Anweisung aus, wenn das Ergebnis wahr ist
  • echo "yes" - Der Befehl, der ausgeführt werden soll, wenn der Vergleich true zurückgibt
  • || - Führen Sie die folgende Anweisung aus, wenn das Ergebnis falsch ist
  • echo "no" - Der Befehl, der ausgeführt werden soll, wenn der Vergleich "false" zurückgibt

Im Wesentlichen vergleicht der Befehl 1 zu 2, und wenn sie übereinstimmen, wird die Echo-Anweisung "yes" ausgeführt, die "yes" anzeigt. Wenn sie nicht übereinstimmen, wird die Echo-Anweisung "no" ausgeführt, die "no" anzeigt.

Zahlen vergleichen

Wenn Sie Elemente vergleichen, die als Zahlen analysiert werden, können Sie die folgenden Vergleichsoperatoren verwenden:

  • -eq - Ist Wert 1 gleich Wert 2?
  • -ge - ist Wert 1 größer oder gleich Wert 2
  • -gt - ist Wert 1 größer als Wert 2
  • -le - ist der Wert 1 kleiner oder gleich dem Wert 2
  • -lt - ist Wert 1 kleiner als Wert 2
  • -ne - Stimmt der Wert 1 nicht mit dem Wert 2 überein?

Beispiele

test 1 -eq 2 && echo "ja" || Echo "Nein"

(zeigt "no" auf dem Bildschirm an, da 1 nicht gleich 2 ist)

test 1 -ge 2 && echo "ja" || Echo "Nein"

(zeigt "no" auf dem Bildschirm an, da 1 nicht größer oder gleich 2 ist)

test 1 -gt 2 && echo "ja" || Echo "Nein"

(zeigt "no" auf dem Bildschirm an, da 1 nicht größer als 2 ist)

test 1 - le 2 && echo "ja" || Echo "Nein"

(zeigt "Ja" an, da 1 kleiner oder gleich 2 ist)

test 1 - lt 2 && echo "ja" || Echo "Nein"

(zeigt "Ja" an, da 1 kleiner oder gleich 2 ist)

Test 1 -ne 2 && Echo "Ja" || Echo "Nein"

(zeigt "Ja" an, da 1 nicht gleich 2 ist)

Text vergleichen

Wenn Sie Elemente vergleichen, die als Zeichenfolgen analysiert werden, können Sie die folgenden Vergleichsoperatoren verwenden:

  • = - Stimmt String 1 mit String 2 überein?
  • ! = - ist String 1 anders als String 2
  • -n - ist die Stringlänge größer als 0
  • -z - ist die Stringlänge 0

Beispiele

test "string1" = "string2" && echo "yes" || Echo "Nein"

(zeigt "no" auf dem Bildschirm an, da "string1" nicht gleich "string2" ist)

test "string1"! = "string2" && echo "yes" || Echo "Nein"

(zeigt "Ja" an, da "string1" nicht "string2" ist)

test -n "string1" && echo "yes" || Echo "Nein"

(zeigt "Ja" auf dem Bildschirm an, da "Zeichenfolge1" eine Zeichenfolgenlänge größer als Null hat)

test -z "string1" && echo "yes" || Echo "Nein"

(zeigt "no" auf dem Bildschirm an, da "string1" eine Stringlänge hat, die größer als Null ist.)

Dateien vergleichen

Wenn Sie Dateien vergleichen, können Sie die folgenden Vergleichsoperatoren verwenden:

  • -ef - Haben die Dateien die gleiche Geräte- und Inode-Nummer (sind sie die gleiche Datei)?
  • -nt - Ist die erste Datei neuer als die zweite Datei
  • -ot - Ist die erste Datei älter als die zweite Datei
  • -b - Die Datei existiert und ist speziell für den Block
  • -c - Die Datei existiert und ist speziell für Zeichen
  • -d - Die Datei existiert und ist ein Verzeichnis
  • -e - Die Datei existiert
  • -f - Die Datei existiert und ist eine reguläre Datei
  • -g - Die Datei existiert und hat die angegebene Gruppennummer
  • -G - Die Datei ist vorhanden und Besitzer der Benutzergruppe
  • -h - Die Datei existiert und ist ein symbolischer Link
  • -k - Die Datei ist vorhanden und das Sticky-Bit ist gesetzt
  • -L - Das gleiche wie -h
  • -O - ​​Die Datei existiert, du bist der Besitzer
  • -p - Die Datei existiert und ist eine Named Pipe
  • -r - Die Datei existiert und ist lesbar
  • -s - Die Datei existiert und hat eine Größe größer als Null
  • -S - Die Datei existiert und ist ein Socket
  • -t - Der Dateideskriptor wird auf einem Terminal geöffnet
  • -u - Die Datei ist vorhanden und das Set-User-ID-Bit ist gesetzt
  • -w - Die Datei ist vorhanden und kann beschrieben werden
  • -x - Die Datei existiert und ist ausführbar

Beispiele

test / pfad / zu / datei1 -nt / pfad / zu / datei2 && echo "ja"

(Wenn file1 neuer als file2 ist, wird das Wort "yes" angezeigt.)

test -e / pfad / zu / datei1 && echo "ja"

(Wenn file1 existiert, wird das Wort "yes" angezeigt.)

test -O / pfad / zu / datei1 && echo "ja"

(Wenn Sie file1 besitzen, wird das Wort "yes" angezeigt ")

Terminologie

  • Block special - Die Datei ist ein Blockgerät, dh Daten werden in Byte-Blöcken gelesen. Dies sind im Allgemeinen Gerätedateien wie Festplatten.
  • Character special - Die Datei wird sofort bearbeitet, wenn Sie in die Datei schreiben, und ist normalerweise ein Gerät, z

Mehrere Bedingungen vergleichen

Bisher hat alles eine Sache mit der anderen verglichen, aber was ist, wenn Sie zwei Bedingungen vergleichen möchten?

Wenn zum Beispiel ein Tier 4 Beine hat und "moo" geht, ist es wahrscheinlich eine Kuh. Wenn Sie nur nach 4 Beinen suchen, kann dies nicht garantieren, dass Sie eine Kuh haben.

Um beide Bedingungen gleichzeitig zu testen, verwenden Sie die folgende Anweisung:

test 4 -eq 4 -a "moo" = "moo" && echo "es ist eine Kuh" || Echo "Es ist keine Kuh"

Der Schlüssel ist hier das -a, das für steht und .

Es gibt eine bessere und häufig verwendete Methode, um denselben Test durchzuführen, und zwar folgendermaßen:

test 4 -eq 4 && test "moo" = "moo" && echo "es ist eine kuh" || Echo "Es ist keine Kuh"

Ein weiterer Test, den Sie möglicherweise durchführen möchten, besteht darin, zwei Anweisungen zu vergleichen. Wenn beide zutreffen, geben Sie einen String aus. Wenn Sie beispielsweise prüfen möchten, ob eine Datei mit dem Namen "file1.txt" oder eine Datei mit dem Namen "file1.doc" vorhanden ist, können Sie den folgenden Befehl verwenden:

test -e datei1.txt -o -e datei1.doc && echo "datei1 existiert" || Echo "Datei1 existiert nicht"

Der Schlüssel ist hier das -o, das für steht oder .

Es gibt eine bessere und häufig verwendete Methode, um denselben Test durchzuführen, und zwar folgendermaßen:

test -e datei1.txt || test -e datei1.doc && echo "datei1 existiert" || Echo "Datei1 existiert nicht"

Das Schlüsselwort "Test" entfernen

Sie müssen nicht den Worttest verwenden, um den Vergleich durchzuführen. Alles, was Sie tun müssen, ist, die Anweisung wie folgt in eckige Klammern zu setzen:

-e Datei1.txt && Echo "Datei1 existiert" || Echo "Datei1 existiert nicht"

Das und bedeutet im Grunde dasselbe wie test.

Jetzt wissen Sie, dass Sie den Vergleich mehrerer Bedingungen wie folgt verbessern können:

4 -eq 4 && "moo" = "moo" && echo "es ist eine Kuh" || Echo "Es ist keine Kuh"-e Datei1.txt || -e Datei1.doc && Echo "Datei1 existiert" || Echo "Datei1 existiert nicht"

Zusammenfassung

Der Befehl test ist in Skripten nützlicher, da Sie den Wert einer Variablen gegen eine andere testen und den Programmablauf steuern können. In der Standardbefehlszeile können Sie damit testen, ob eine Datei vorhanden ist oder nicht.