Shell-Skript ----if (numerische Bedingung, String-Bedingung, String ist leer)


[Von] http://blog.csdn.net/yf210yf/article/details/9207147















Binäre Vergleichsoperatoren, Variablen vergleichen oder Zahlen vergleichen.






Achten Sie auf den Unterschied zwischen Zahlen und Zeichenfolgen.










1. Ganzzahlvergleich



 -eq ist gleich, z. B.: if [ "$a" -eq "$b" ]
-ne ist ungleich, z. B.: if [ "$a" -ne "$b" ]
-gt ist größer als, z. B.: if [ "$a" -gt "$b" ]
-ge ist größer oder gleich, z. B.: if [ "$a" -ge "$b" ]
-lt ist kleiner als, z. B.: if [ "$a" -lt "$b" ]
-le ist kleiner oder gleich, z. B.: if [ " $a" -le "$b" ]
< kleiner als (erfordert doppelte Klammern), wie zum Beispiel: (("$a" < "$b"))
<= Kleiner als oder gleich (dozwei Klammern erforderlich), wie z. B.: (("$a" <= "$b"))
> Größer als (erfordert doppelte Klammern), wie zum Beispiel: (("$a" > "$b"))
>= Größer als oder gleich (erfordert doppelte Klammern), wie zum Beispiel: (("$ a" >= "$b"))







Sie können AWK für den Vergleich kleiner Daten verwenden
p>







2. Zeichenkettenvergleich









 = gleich, wie zum Beispiel: if [ "$a" = "$b" ]
== ist gleich, zum Beispiel: if [ "$a" == "$b" ], entspricht =











Hinweis:





Zwei Strings auf Gleichheit zu vergleichen ist:

if [ "$test"x = "test"x ]; then

Die wichtigsten Punkte hier sind:

1 Verwenden Sie ein einzelnes Gleichheitszeichen

2 Beachten Sie, dass sich auf jeder Seite des Gleichheitszeichens ein Leerzeichen befindet Zeichen: this ist eine Anforderung der Unix-Shell

3 Beachten Sie das x am Ende von "$test"x, das absichtlich angeordnet ist, denn wenn $test leer ist, wird der obige Ausdruck zu x = testx, was offensichtlich nicht gleich ist. Und ohne dieses x gibt der Ausdruck einen Fehler aus: [: =: Unary-Operator erwartet


Hinweis: Die Funktion == verhält sich in [[]] und [] wie folgt anders:






 [[ $a == z* ]] # Wenn $a mit "z" beginnt (Musterübereinstimmung), dann ist es wahr
[[ $ a == "z*" ]] # wahr, wenn $a gleich z* ist (Zeichenübereinstimmung)

[ $a == z* ] # Dateiglobbing und Wortaufteilung werden durchgeführt
[ "$a" == "z*" ] # wahr, wenn $a gleich z* ist (Zeichenübereinstimmung)











Eine kleine Erklärung zum Thema File Globbing ist eine Kurzform für Dateien, wie z als "*.c", und dann ist auch ~.

Aber File Globbing ist streng genommen keine Regular-Ausdruck, obwohl die Struktur in den meisten Fällen ähnlich ist.





!= ist nicht gleich, wie zum Beispiel: if [ "$a" != "$b" ]

Dieser Operator verwendet den Musterabgleich innerhalb der [ []] bauen.






< Kleiner als, in alphabetischer ASCII-Reihenfolge. Zum Beispiel:

if [[ "$a" < "$b" ]]

if [ "$a" \\\\< "$b" ]

Hinweis: "<" muss in der []-Struktur maskiert werden.






> Größer als, in alphabetischer ASCII-Reihenfolge. Beispiel:

if [[ "$a" > "$b" ]]

wenn [ "$a" \\\\> "$b" ]

Hinweis: ">" muss in der []-Struktur maskiert werden.

Siehe Beispiel 26-11 für ein Beispiel dieser Operatoranwendung.

-z String ist "null". Das heißt, die Länge ist 0.

-n Zeichenfolge ist nicht "null"

Hinweis:
Verwenden Sie -n in der []-Struktur, um zu testen, ob die Variable in "" eingeschlossen sein muss. Verwenden Sie eine Zeichenfolge ohne "" zu verwenden! -z

Oder die Zeichenfolge selbst, die nicht mit "" in Anführungszeichen gesetzt ist, wird in die []-Struktur eingefügt. Obwohl dies im Allgemeinen funktionieren wird, ist es nicht sicher. Es hat sich bewährt, "" zum Testen von Zeichenfolgen zu verwenden.












Beispiel:






1. Digitaler Vergleich












  #!/bin/bash

i=6
a=10

if [ $a -eq 10 ]
then
echo "a = 10"
fi

if [ $a -ne $i ]
then
echo "a !=$i"
fi

if [ $a -gt $i ]
then
echo "a > i"
fi

if [ $a -lt $i ]
then
echo "a < i"
else
echo "a > i"
fi

if(("$a" > "$i"))
then
echo "(())a>i"< br /> fi

if(($a != $i))
then
echo "(())a!=i"
fi span>









Bemerkungen: Wenn das Skript über sh ausgeführt wird, ist die [ ]-Operation in Ordnung, aber die (())-Operation schlägt fehl



Nach chmod 777 können Sie ./ direkt ausführen












2. Zeichenfolgenvergleich












  #!/bin/bash

a="123"
b="1234"
c= "123"

if [ "$a"x != "$b"x ]
then
echo "a != b"
fi

if [ "$a"x = "$c"x ]
then
echo "a == c"
fi












Die Beurteilungszeichenfolge ist leer









  if [ -z "$d" ]
then
echo "d is empty"
fi
< /pre>






Hinweis:










-e die Datei existiert

-eine Datei existiert (veraltet)

-f           Die zu testende Datei ist eine normale Datei (normale Datei, nicht ein Verzeichnis oder Gerät)

-s Die Länge der Datei ist nicht 0

-d Das zu testende Objekt ist das Verzeichnis

-b Das Prüfobjekt ist ein Blockgerät

-cDas gemessene Objekt ist ein Zeichengerät

-p Das Prüfobjekt ist das Rohr

- h Die zu testende Datei ist ein Symlink

-L Die zu testende Datei ist ein Symlink

-S (Großbuchstaben) Die zu testende Datei ist ein Socket
< br />-t Der einem Endgerät zugeordnete Dateideskriptor. stdin[-t0] oder [-t1] wird verwendet, um zu erkennen, dass das Skript ein Terminal ist

-r Die Datei hat Leseberechtigung für den Benutzer, der das Skript ausführt

-w Die Datei hat Schreibrechte für den Benutzer, der das Skript ausführt

-x Die Datei hat Ausführungsrechte für den Benutzer, der ausgeführt wirdSetzen Sie das Skript

-u          set-user-id (suid) flag auf die Datei, d. h. die Root-Berechtigungsdatei, die normale Benutzer verwenden können, über die chmod +s-Datei, um
zu erreichen
-k Setzt das Einfügebit

-O , der Benutzer, der das Skript ausführt, ist der Besitzer der Datei

-G Die Gruppen-ID der Datei ist das gleiche wie der Benutzer, der das Skript ausführt

-N Ob die Datei seit dem letzten Lesen bis heute geändert wurde







f1 -nt f2           Ist die Datei f1 neuer als f2

f1 -ot f2 ob die Datei f1 älter als f2 ist

f1 -ef f2 Ob die Dateien f1 und f2 fest mit derselben Datei verknüpft sind














Binäre Vergleichsoperatoren, Variablen vergleichen oder Zahlen vergleichen







Ganzzahlvergleich:

-eq ist gleich if [ "$a" -eq "$b" ]

-ne ist ungleich if [ "$a" -ne "$b" ]

-gt größer als if [ "$a"-gt "$b" ]

-ge größer als oder gleich wenn [ "$a" -ge "$b" ]

-lt kleiner als wenn [ " $a" -lt "$b" ]

-le , kleiner oder gleich if [ "$a" -le "$b" ]







<


<= Kleiner als oder gleich (...) (( "$a" <= "$b" ))< br />
> größer als (...)         (( "$a" > "$b" ))

>= größer oder gleich (...) (( "$a" > = "$b" ))














String-Vergleich:

= == == == if [ "$a" = "$b" ]

==Äquivalent zu =

!= ungleich if [ "$a" = "$b" ]

< kleiner als, in ASCII-Reihenfolge:

if [[ "$a" < "$b" ]]

            if [ "$a" \\\\< "$b" ] # Escapezeichen erforderlich <

> größer als







-z Der String ist null, das heißt, die Länge ist 0

-n Der String ist nicht null, das heißt, die Länge ist nicht 0