Comparaison des chaînes dans Bash Un tutoriel pratique

Comparaison des chaînes dans Bash Un tutoriel pratique

La comparaison des chaînes est une tâche courante lorsque vous travaillez avec des scripts shell, une entrée utilisateur ou des données de chaîne. Dans le shell, vous devrez peut-être vérifier si une valeur existe dans une autre chaîne, découvrez si deux chaînes ont la même longueur, tester le début ou la fin d'un mot, ou tout autre type de comparaison. Les outils UNIX standard ne fournissent pas de nombreuses options pour comparer les chaînes; La comparaison lexicale traditionnelle (comme vérifier si deux mots ont la même longueur et la comparaison individuellement de chaque caractère) est difficile à mettre en œuvre efficacement dans le code et n'est pas aussi précieuse pour un langage dynamique comme Bash.

Cet article explique différentes façons de comparer les chaînes dans Bash et plusieurs commandes connexes.

Opérateurs de comparaison de cordes

Nous pouvons utiliser des opérateurs de comparaison avec des déclarations bash si pour comparer deux chaînes. Voici la liste des opérateurs de comparaison pour travailler avec des chaînes dans la coquille de bash.

OpérateurDétails
["String1" == "String2"]Revient vrai si les deux chaînes sont égales.
["String1" != "String"Revient vrai si les deux chaînes ne sont pas égales.
[«String = ~ regex]Comparez String1 avec l'expression régulière et renvoyez les vraies correspondances
[-z "String"]Retour True si la longueur de chaîne donnée est zéro (0)
[-N "String"]Retour true si la longueur de chaîne donnée n'est pas nulle

Maintenant, nous discuterons de l'opérateur de comparaison ci-dessus un par un avec des exemples.

La comparaison de deux chaînes est égale?

Si vous devez vérifier si deux chaînes sont égales, utilisez le == opérateur. Ces opérateurs comparent l'opérande gauche avec l'opérande droit et reviennent vrai si les deux correspondent.

Comprenons avec un exemple. Dans un script shell initialisez deux variables avec une chaîne. Ensuite, utilisez l'instruction IF pour comparer si les deux chaînes sont égales ou non en utilisant le == opérateur.

#!/ usr / bin / env bash str1 = "tecadmin" str2 = "tecadmin" si ["$ str1" == "$ str2"] puis écho "les deux chaînes sont égales" else echo "Les deux chaînes ne sont pas égales" fi
1234567891011#!/ usr / bin / env bash str1 = "tecadmin" str2 = "tecadmin" si ["$ str1" == "$ str2"] puis écho "les deux chaînes sont égales" else echo "Les deux chaînes ne sont pas égales" fi

Exécutez le script de shell ci-dessus dans un shell bash et vérifiez les résultats.

Sortie: les deux chaînes sont égales 

Maintenant, modifiez les deux valeurs des variables avec différentes chaînes. Puis encore le script et voir les résultats.

Vérifiez que deux chaînes ne sont pas égales (!=)

Parfois, nous devons vérifier si les deux chaînes ne sont pas égales. Vous pouvez utiliser != opérateur à tester si deux chaînes ne sont pas égales. Vérifions avec un exemple:

#!/ usr / bin / env bash str1 = "tecadmin" str2 = "helloworld" ## Vérifiez si les deux cordes ne sont pas égales si ["$ str1" != "$ Str2"] puis écho "vrai, les deux chaînes ne sont pas égales" else echo "false, les deux chaînes sont égales" fi
123456789101112#!/ usr / bin / env bash str1 = "tecadmin" str2 = "helloworld" ## Vérifiez si les deux cordes ne sont pas égalif ["$ str1" != "$ Str2"] puis écho "vrai, les deux chaînes ne sont pas égales" else echo "false, les deux chaînes sont égales" fi

Exécutez le script de shell ci-dessus dans un shell bash et vérifiez les résultats.

Sortie: vrai, les deux chaînes ne sont pas égales 

Comparez les chaînes avec l'expression régulière

Pour comparer les chaînes avec des expressions régulières en bash, vous pouvez utiliser la commande «grep» avec l'option «-e» (regex étendu). La commande «grep» recherche une chaîne pour un modèle et renvoie un code de sortie de réussite (0) Si le modèle est trouvé et un code de sortie de défaillance (1) si le modèle n'est pas trouvé.

Voici un exemple d'utilisation de la commande «grep» pour comparer une chaîne avec une expression régulière:

String = "Hello World" si echo "$ string" | grep -e "^ bonjour"; puis écho "match trouvé" else echo "match n'a pas trouvé" fi
123456String = "Hello World" si echo "$ string" | grep -e "^ bonjour"; puis écho "match trouvé" else echo "match n'a pas trouvé" fi

Nous pouvons également comparer la chaîne avec une expression régulière dans les scripts bash. Tout en utilisant la comparaison de la chaîne avec une expression régulière avec une instruction IF, vous devez toujours vous enfermer avec [[]] devis. L'exemple ci-dessous montrera que vous aidera à vérifier si la variable contient la chaîne qui commence par une chaîne spécifique.

#!/ usr / bin / env bash str = "tecadmin" si [["$ str" = ~ ^ tec]] puis écho "oui, l'expression régulière correspond" else echo "l'expression régulière ne correspond pas" fi
12345678910#!/ usr / bin / env bash str = "tecadmin" si [["$ str" = ~ ^ tec]] puis écho "oui, l'expression régulière correspond" else echo "l'expression régulière ne correspond pas" fi
Sortie: oui, l'expression régulière correspond 

Vérifions un autre exemple. Dans ce script, nous inviterons l'utilisateur à saisir un numéro. Vérifiez ensuite si la valeur d'entrée est un nombre ou non. Un numéro de conteneur les chiffres entre 0 et 9.

#!/ usr / bin / env-bash read -p "Entrée un nombre:" var ## Vérifiez si la valeur d'entrée est un nombre si ["" $ var "= ~ ^ [0-9] + $]] puis echo" donné l'entrée est un nombre "else echo" Désolé, l'entrée n'est pas un nombre "fi
1234567891011#!/ usr / bin / env-bash read -p "Entrée un nombre:" var ## Vérifiez si la valeur d'entrée est un nombre de nombres [["$ var" = ~ ^ [0-9] + $]] puis echo "donné d'entrée donnée est un nombre "else echo" désolé, l'entrée n'est pas un nombre "fi

Exécutez le script bash ci-dessus et fournissez l'entrée lorsque vous avez invité.

Première exécution: entrée un nombre: 12 Entrée donnée est un nombre 

Exécutez à nouveau ce script mais cette fois saisissez une valeur non nuclérique et voyez les résultats.

Deuxième exécution: entrée un nombre: 1234a désolé, l'entrée n'est pas un nombre 

Vérifiez si une chaîne est vide

Pour vérifier si une chaîne est vide en bash, vous pouvez utiliser la syntaxe suivante:

si [-z "$ string"]; puis écho "La chaîne est vide" else echo "La chaîne n'est pas vide" fi
12345si [-z "$ string"]; puis écho "La chaîne est vide" else echo "La chaîne n'est pas vide" fi

Le "-Z" L'opérateur est utilisé pour tester si la longueur de la chaîne est nul. Si la longueur de la chaîne est nulle, l'expression à l'intérieur des crochets renvoie true et la clause «alors» est exécutée. Si la longueur de la chaîne est supérieure à zéro, l'expression renvoie false et que la clause «else» est exécutée.

Conclusion

En conclusion, la comparaison des chaînes dans Bash est un aspect fondamental des scripts de coquille qui peut être utilisé pour prendre des décisions, contrôler le flux de vos scripts et traiter les données. Dans ce tutoriel pratique, nous avons couvert les bases de la comparaison des cordes dans Bash, y compris les différents opérateurs de comparaison, la syntaxe et les pièges communs. Nous avons également fourni des exemples et des exercices pour vous aider à pratiquer et à maîtriser les concepts présentés dans ce tutoriel. En suivant les meilleures pratiques décrites dans ce tutoriel, vous pouvez écrire des scripts plus robustes, fiables et efficaces. Que vous soyez un débutant ou un utilisateur expérimenté, la comparaison des cordes dans Bash est une compétence précieuse qui peut vous aider à automatiser les tâches, à résoudre des problèmes et à tirer le meilleur parti de vos scripts de coquille.