GNU/Linux >> Tutoriels Linux >  >> Linux

Comment comparer des chaînes dans Bash

Lors de l'écriture de scripts Bash, vous devrez souvent comparer deux chaînes pour vérifier si elles sont égales ou non. Deux chaînes sont égales lorsqu'elles ont la même longueur et contiennent la même séquence de caractères.

Ce tutoriel décrit comment comparer des chaînes dans Bash.

Opérateurs de comparaison #

Les opérateurs de comparaison sont des opérateurs qui comparent des valeurs et renvoient vrai ou faux. Lorsque vous comparez des chaînes dans Bash, vous pouvez utiliser les opérateurs suivants :

  • string1 = string2 et string1 == string2 - L'opérateur d'égalité renvoie vrai si les opérandes sont égaux.
    • Utilisez le = opérateur avec le test [ commande.
    • Utilisez le == opérateur avec le [[ commande pour la correspondance de modèle.
  • string1 != string2 - L'opérateur d'inégalité renvoie vrai si les opérandes ne sont pas égaux.
  • string1 =~ regex - L'opérateur regex renvoie vrai si l'opérande de gauche correspond à l'expression régulière étendue de droite.
  • string1 > string2 - L'opérateur supérieur à renvoie vrai si l'opérande de gauche est supérieur à celui de droite trié par ordre lexicographique (alphabétique).
  • string1 < string2 - L'opérateur inférieur à renvoie vrai si l'opérande de droite est supérieur à celui de droite trié par ordre lexicographique (alphabétique).
  • -z string - Vrai si la longueur de la chaîne est nulle.
  • -n string - Vrai si la longueur de la chaîne est différente de zéro.

Voici quelques points à noter lors de la comparaison de chaînes :

  • Un espace vide doit être utilisé entre l'opérateur binaire et les opérandes.
  • Utilisez toujours des guillemets doubles autour des noms de variables pour éviter tout problème de fractionnement ou de globalisation des mots.
  • Bash ne sépare pas les variables par "type", les variables sont traitées comme des entiers ou des chaînes selon le contexte.

Vérifier si deux chaînes sont égales #

Dans la plupart des cas, lorsque vous comparez des chaînes, vous souhaitez vérifier si les chaînes sont égales ou non.

Le script suivant utilise l'instruction if et le test [ commande pour vérifier si les chaînes sont égales ou non avec le = opérateur :

#!/bin/bash

VAR1="Linuxize"
VAR2="Linuxize"

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

Lorsque le script est exécuté, il imprimera la sortie suivante.

Strings are equal.

Voici un autre script qui prend l'entrée de l'utilisateur et compare les chaînes données. Dans cet exemple, nous utiliserons le [[ commande et == opérateur.

#!/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

Exécutez le script et saisissez les chaînes lorsque vous y êtes invité :

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

Vous pouvez également utiliser la logique et && et ou || pour comparer des chaînes :

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

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

Il existe plusieurs façons de vérifier si une chaîne contient une sous-chaîne.

Une approche consiste à entourer la sous-chaîne avec des astérisques * ce qui signifie correspondre à tous les caractères.

#!/bin/bash

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

Le script fera écho à ce qui suit :

It's there.

Une autre option consiste à utiliser l'opérateur regex =~ comme indiqué ci-dessous :

#!/bin/bash

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

Le point suivi d'un astérisque .* correspond à zéro ou plusieurs occurrences de n'importe quel caractère sauf un caractère de saut de ligne.

Vérifier si une chaîne est vide #

Très souvent, vous devrez également vérifier si une variable est une chaîne vide ou non. Vous pouvez le faire en utilisant le -n et -z opérateurs.

#!/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.

Comparer des chaînes avec l'opérateur de cas #

Au lieu d'utiliser les opérateurs de test, vous pouvez également utiliser l'instruction case pour comparer les chaînes :

#!/bin/bash

VAR="Arch Linux"

case $VAR in

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

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

Comparaison lexicographique #

La comparaison lexicographique est une opération où deux chaînes sont comparées par ordre alphabétique en comparant les caractères d'une chaîne séquentiellement de gauche à droite. Ce type de comparaison est rarement utilisé.

Les scripts suivants comparent deux chaînes de manière lexicographique :

#!/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

Le script affichera ce qui suit :

Ubuntu is lexicographically greater than Linuxize.

Conclusion #

La comparaison de chaînes est l'une des opérations les plus élémentaires et les plus fréquemment utilisées dans les scripts Bash. Après avoir lu ce tutoriel, vous devriez avoir une bonne compréhension de la façon de comparer des chaînes dans Bash. Vous pouvez également consulter notre guide sur la concaténation de chaînes.

Si vous avez des questions ou des commentaires, n'hésitez pas à laisser un commentaire.


Linux
  1. Comment utiliser les commandes d'historique de Bash

  2. Comment écrire une boucle dans Bash

  3. Comment comparer des nombres et des chaînes dans le script shell Linux

  4. Comment détecter Bash>=4.0 ?

  5. Bash - Comment imprimer des chaînes multi-lignes (avec '\ n') à l'aide de printf

Comment créer des alias Bash

Chaînes de concaténation bash

Comment lire un fichier ligne par ligne dans Bash

Comment utiliser bash if -z et if -n pour tester des chaînes sous Linux

Comment exécuter un script bash

Comment définir une variable d'environnement dans Bash