GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So vergleichen Sie Zeichenfolgen in Bash

Beim Schreiben von Bash-Skripten müssen Sie häufig zwei Zeichenfolgen vergleichen, um zu prüfen, ob sie gleich sind oder nicht. Zwei Zeichenketten sind gleich, wenn sie die gleiche Länge haben und die gleiche Zeichenfolge enthalten.

Dieses Tutorial beschreibt, wie man Strings in Bash vergleicht.

Vergleichsoperatoren #

Vergleichsoperatoren sind Operatoren, die Werte vergleichen und wahr oder falsch zurückgeben. Beim Vergleichen von Zeichenfolgen in Bash können Sie die folgenden Operatoren verwenden:

  • string1 = string2 und string1 == string2 - Der Gleichheitsoperator gibt wahr zurück, wenn die Operanden gleich sind.
    • Verwenden Sie = Operator mit dem test [ Befehl.
    • Verwenden Sie den == Operator mit dem [[ Befehl für den Musterabgleich.
  • string1 != string2 - Der Ungleichheitsoperator gibt wahr zurück, wenn die Operanden ungleich sind.
  • string1 =~ regex - Der Regex-Operator gibt wahr zurück, wenn der linke Operand mit dem erweiterten regulären Ausdruck auf der rechten Seite übereinstimmt.
  • string1 > string2 - Der Größer-als-Operator gibt wahr zurück, wenn der linke Operand größer als der rechte ist, sortiert nach lexikografischer (alphabetischer) Reihenfolge.
  • string1 < string2 - Der Kleiner-als-Operator gibt wahr zurück, wenn der rechte Operand größer als der rechte ist, sortiert nach lexikografischer (alphabetischer) Reihenfolge.
  • -z string - Wahr, wenn die Zeichenfolgenlänge null ist.
  • -n string - Wahr, wenn die Zeichenfolgenlänge nicht Null ist.

Im Folgenden sind einige Punkte aufgeführt, die beim Vergleichen von Zeichenfolgen zu beachten sind:

  • Zwischen dem binären Operator und den Operanden muss ein Leerzeichen verwendet werden.
  • Verwenden Sie immer doppelte Anführungszeichen um die Variablennamen, um Probleme mit Worttrennung oder Globbing zu vermeiden.
  • Bash trennt Variablen nicht nach „Typ“, Variablen werden je nach Kontext als Integer oder String behandelt.

Prüfe, ob zwei Strings gleich sind #

In den meisten Fällen möchten Sie beim Vergleichen von Zeichenfolgen prüfen, ob die Zeichenfolgen gleich sind oder nicht.

Das folgende Skript verwendet die if-Anweisung und den Test [ Befehl, um mit = zu überprüfen, ob die Zeichenfolgen gleich sind oder nicht Betreiber:

#!/bin/bash

VAR1="Linuxize"
VAR2="Linuxize"

if [ "$VAR1" = "$VAR2" ]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi

Wenn das Skript ausgeführt wird, gibt es die folgende Ausgabe aus.

Strings are equal.

Hier ist ein weiteres Skript, das die Eingabe des Benutzers entgegennimmt und die angegebenen Zeichenfolgen vergleicht. In diesem Beispiel verwenden wir den [[ Befehl und == Betreiber.

#!/bin/bash

read -p "Enter first string: " VAR1
read -p "Enter second string: " VAR2

if [[ "$VAR1" == "$VAR2" ]]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi

Führen Sie das Skript aus und geben Sie die Zeichenfolgen ein, wenn Sie dazu aufgefordert werden:

Enter first string: Linuxize
Enter second string: Ubuntu
Strings are not equal.

Sie können auch den logischen und && verwenden und oder || Strings vergleichen:

[[ "string1" == "string2" ]] && echo "Equal" || echo "Not equal"
Not equal

Überprüfen Sie, ob ein String einen Teilstring # enthält

Es gibt mehrere Möglichkeiten zu prüfen, ob ein String einen Teilstring enthält.

Ein Ansatz besteht darin, die Teilzeichenfolge mit Sternsymbolen * einzuschließen was bedeutet, dass alle Zeichen übereinstimmen.

#!/bin/bash

VAR='GNU/Linux is an operating system'
if [[ $VAR == *"Linux"* ]]; then
  echo "It's there."
fi

Das Skript gibt Folgendes wieder:

It's there.

Eine weitere Möglichkeit ist die Verwendung des Regex-Operators =~ wie unten gezeigt:

#!/bin/bash

VAR='GNU/Linux is an operating system'
if [[ $VAR =~ .*Linux.* ]]; then
  echo "It's there."
fi

Der Punkt gefolgt von einem Sternchen .* stimmt mit null oder mehr Vorkommen eines beliebigen Zeichens außer einem Zeilenumbruchzeichen überein.

Überprüfen Sie, ob ein String leer ist #

Sehr oft müssen Sie auch prüfen, ob eine Variable ein leerer String ist oder nicht. Sie können dies tun, indem Sie das -n verwenden und -z Betreiber.

#!/bin/bash

VAR=''
if [[ -z $VAR ]]; then
  echo "String is empty."
fi
String is empty.
#!/bin/bash

VAR='Linuxize'
if [[ -n $VAR ]]; then
  echo "String is not empty."
fi
String is not empty.

Strings mit dem Case-Operator vergleichen #

Anstelle der Testoperatoren können Sie auch die case-Anweisung verwenden, um Strings zu vergleichen:

#!/bin/bash

VAR="Arch Linux"

case $VAR in

  "Arch Linux")
    echo -n "Linuxize matched"
    ;;

  Fedora | CentOS)
    echo -n "Red Hat"
    ;;
esac
Linuxize matched.

Lexikografischer Vergleich #

Der lexikografische Vergleich ist eine Operation, bei der zwei Zeichenfolgen alphabetisch verglichen werden, indem die Zeichen in einer Zeichenfolge sequentiell von links nach rechts verglichen werden. Diese Art des Vergleichs wird selten verwendet.

Die folgenden Skripte vergleichen zwei Strings lexikografisch:

#!/bin/bash

VAR1="Linuxize"
VAR2="Ubuntu"

if [[ "$VAR1" > "$VAR2" ]]; then
    echo "${VAR1} is lexicographically greater then ${VAR2}."
elif [[ "$VAR1" < "$VAR2" ]]; then
    echo "${VAR2} is lexicographically greater than ${VAR1}."
else
    echo "Strings are equal"
fi

Das Skript gibt Folgendes aus:

Ubuntu is lexicographically greater than Linuxize.

Schlussfolgerung #

Das Vergleichen von Zeichenfolgen ist eine der grundlegendsten und am häufigsten verwendeten Operationen beim Bash-Skripting. Nachdem Sie dieses Tutorial gelesen haben, sollten Sie ein gutes Verständnis dafür haben, wie man Strings in Bash vergleicht. Sie können auch unsere Anleitung zur Zeichenfolgenverkettung lesen.

Wenn Sie Fragen oder Feedback haben, können Sie gerne einen Kommentar hinterlassen.


Linux
  1. Wie erkennt man Bash>=4.0?

  2. So vergleichen Sie Zeichenfolgen in Bash Shell-Skripten

  3. So werten Sie Zeichenfolgen als Zahlen in Bash aus

  4. So verketten Sie Strings in Bash

  5. Wie vergleiche ich zwei Zeichenfolgen im punktgetrennten Versionsformat in Bash?

So erstellen Sie Bash-Aliase

Bash Strings verketten

So lesen Sie eine Datei Zeile für Zeile in Bash

So verwenden Sie bash if -z und if -n zum Testen von Zeichenfolgen in Linux

So führen Sie ein Bash-Skript aus

So setzen Sie die Umgebungsvariable in Bash