Comment comparer des chaînes en bash

Suraj Joshi 7 octobre 2020
Comment comparer des chaînes en bash

Nous pouvons comparer les chaînes en utilisant différents opérateurs de comparaison et vérifier si la chaîne contient une sous-chaîne ou non en utilisant les expressions régulières.

Comparaison de chaînes en Bash

La comparaison des chaînes de caractères signifie qu’il faut vérifier si les chaînes de caractères données sont identiques ou non. Deux ou plusieurs chaînes sont identiques si elles sont de longueur égale et contiennent la même séquence de caractères.

Nous utilisons différents opérateurs de comparaison de chaînes de caractères qui retourner vrai ou faux selon la condition. Certains des opérateurs de comparaison de chaînes de caractères les plus utilisés peuvent être énumérés comme suit:

string1 = string2 Opérateur d’égalité utilisé avec la commande [ et retourne true si les deux opérandes sont égaux.
string1 == string2 Opérateur d’égalité utilisé avec la commande [[ et retourne true si les deux opérandes sont égaux.
string1 != string2 Opérateur d’inégalité qui retourne true si deux opérandes ne sont pas égaux.
string1 =~ regex Opérateur Regex qui retourne true si la chaîne1 correspond à la regex étendue
string1 > string2 Supérieur à l’opérateur qui retourne true si la string1 est supérieure à la string2 en fonction de l’ordre lexicographique (alphabétique)
string1 < string2 Moins que l’opérateur qui retourne true si la string1 est plus petite que la string2 selon l’ordre lexicographique (alphabétique)
-z string Retourne true si la longueur de la string est 0.
-n string Retourne true si la longueur de la string n’est pas 0.
String1="Hello World!!"
String2="Hello World!!"

String3="Delft Stack"

if [ "$String1" = "$String2" ]; then
    echo "String1 and String2 are equal."
else
    echo "String1 and String2 are not equal."
fi

if [[ "$String1" == "$String2" ]]; then
    echo "String1 and String2 are equal."
else
    echo "String1 and String2 are not equal."
fi

if [[ "$String1" != "$String3" ]]; then
    echo "String1 and String3 are not equal."
else
    echo "String1 and String3 are equal."
fi

Production:

String1 and String2 are equal.
String1 and String2 are equal.
String1 and String3 are not equal.

Ici, si nous comparons String1 et String2 en utilisant l’opérateur = au début. Comme String1 et String2 ont la même longueur avec la même séquence de caractères, l’opérateur de comparaison retourne true et nous obtenons donc String1 and String2 are equal. comme sortie du premier bloc if-else du programme.

De même, dans le second programme, nous comparons String1 et String2 en utilisant l’opérateur ==. Dans ce cas, nous devons utiliser l’opérateur [[ pour la comparaison.

Enfin, nous comparons String1 et String3 en utilisant l’opérateur !=.

Comparaison lexicographique en Bash

La comparaison lexicographique consiste à comparer des chaînes de caractères en fonction de l’ordre alphabétique. Pour la comparaison lexicographique, nous utilisons les opérateurs > et <.

name1="Kamal"
name2="Abinash"


if [[ "$name1" > "$name2" ]]; then
    echo "${name1} is greater then ${name2}."
elif [[ "$name1" < "$name2" ]]; then
    echo "${name2} is greater than ${name1}."
else
    echo "Both the namees are equal"
fi

Production:

Kamal is greater then Abinash.

Dans ce programme, name1 et name2 sont comparés lexicographiquement. Comme K vient après A dans l’ordre alphabétique, K a une valeur plus élevée que A et donc "$name1" > "$name2" retourne true et nous obtenons Kamal is greater then Abinash. en sortie.

Vérifier si une chaîne de caractères est vide ou non

Nous utilisons les opérateurs -n et -z pour vérifier si la chaîne est vide ou non.

String=""
if [[ -z $String ]]; then
  echo "The variable String is an empty string."
fi

Production:

The variable String is an empty string.

Dans ce programme, String est une variable vide. Comme l’opérateur -z retourne true si la longueur de la string est 0 et donc nous obtenons The variable String is an empty string. comme sortie du programme donné.

String="Test"
if [[ -n $String ]]; then
  echo "The variable String is not an empty string."
fi

Production:

The variable String is not an empty string.

Dans ce programme, String n’est pas une variable vide. L’opérateur -n retourne true si la longueur de la string n’est pas égale à 0 et nous obtenons donc The variable String is not an empty string. en sortie du programme donné.

Vérifier si une chaîne contient une sous-chaîne

Pour vérifier si une chaîne de caractères contient une sous-chaîne, nous pouvons utiliser l’opérateur =~ (Regex).

L’opérateur regex retourne true si la chaîne correspond à l’expression regex étendue. Nous devons faire une expression regex appropriée pour la comparaison.

String='My name is Delft.'
if [[ $String =~ .*Delft.* ]]; then
  echo "The given string has Delft on it."
fi

Production:

The given string has Delft on it.

Ici, .*Delft.* est l’expression regex à comparer, qui dit de correspondre à n’importe quelle chaîne, zéro ou plus de caractères, avant et après Delft.. Il vérifie si la chaîne contient ou non la sous-chaîne Delft.

Comme Delft est présent dans la chaîne donnée, la condition donnée est satisfaite, et nous obtenons The given string has Delft on it. en sortie.

Auteur: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn