Donc, vous avez une longue chaîne et vous voulez vérifier si cette chaîne contient une sous-chaîne dans votre script bash.
Il existe plusieurs façons de vérifier les sous-chaînes dans le shell bash. Je vais d'abord montrer quelques exemples simples, suivis d'un script bash sympa qui utilise ce concept dans un scénario réel.
Vérification de la sous-chaîne dans bash à l'aide de l'instruction if else
Si vous êtes familier avec les instructions conditionnelles de bash, vous pouvez l'utiliser pour vérifier si une chaîne contient la sous-chaîne de la manière suivante :
if [[ $fullstring == *"$substr"* ]];
Exemple simple pour vérifier la sous-chaîne
Les doubles parenthèses sont nécessaires ici. Je considère que c'est la méthode native car elle n'utilise aucun autre outil. Permettez-moi d'expliquer l'extrait ci-dessus avec un exemple approprié.
Initialiser une variable avec une chaîne longue :
[email protected]:~$ fullstring="This is a string with a stretch"
Maintenant, stockez le mot "stretch" dans une variable appelée substr1
:
[email protected]:~$ substr="stretch"
Faisons la comparaison de sous-chaîne :
[email protected]:~$ if [[ $fullstring == *"$substr"* ]]; then
Ici, * signifie zéro ou plusieurs caractères. J'espère que vous connaissez le concept de guillemets dans les scripts bash. Le $substr à l'intérieur des guillemets le remplace par sa valeur.
Fondamentalement, vous vérifiez si la chaîne complète correspond au type de modèle xxxxsubstrxxxx.
Vous pouvez également utiliser la sous-chaîne directement au lieu de l'utiliser via une variable comme celle-ci :
[email protected]:~$ if [[ $fullstring == *"stretch"* ]]; then
Vous obtenez l'essentiel. Permettez-moi de compléter ce script avec une instruction else qui affiche un message alternatif si la sous-chaîne n'est pas trouvée :
#!/bin/bash
fullstring="This is a string with a stretch"
substr="stretch"
if [[ $fullstring == *"$substr"* ]]; then
echo "Found $substr!"
else
echo "$substr not found!"
fi
Vous pouvez facilement voir que si vous exécutez le script shell ci-dessus, il trouvera la sous-chaîne.
[email protected]:~$ bash substr.sh
Found stretch!
Un meilleur exemple concret pour trouver une sous-chaîne dans bash
Les sous-chaînes peuvent être très utiles dans les scripts pour "interagir" avec les utilisateurs. Utilisez la commande read pour laisser votre script bash accepter les entrées de l'utilisateur.
echo "Hey there..what is your name?"
read Name
echo "Hello "$name"! The Matrix Resurrections trailer is here! Is your pill Red or Blue?"
read Pill
if [[ $Pill == *"Red"* || $Pill == *"red"* ]]; then
echo "Welcome..to the real world "$Name"!"
else
echo "Wake Up "$Name"!"
fi
Donnez-lui l'autorisation d'exécution et exécutez le script :
[email protected]:~$ chmod +x makeyourchoice.sh
[email protected]:~$ ./makeyourchoice.sh
Sortie pour le script ci-dessus :
Hey there..what is your name?
avimanyu
Hello avimanyu! The Matrix Resurrections trailer is here! Is your pill Red or Blue?
I have Red pill
Welcome..to the real world avimanyu!
Ici, j'ai légèrement amélioré la condition if en prenant en compte deux chances probables de sensibilité à la casse. Seulement Red
est la sous-chaîne ici. Mais red
est une entrée possible aussi. J'ai donc ajouté une autre condition. ||
indique « ou ». Si vous entrez Red
, c'est une sous-chaîne. Mais même si red
n'en est pas un, j'ai dû l'ajouter.
Rechercher une sous-chaîne dans bash à l'aide de la commande grep
Voici une autre façon de trouver une sous-chaîne dans une chaîne en bash. Utilisez la commande grep de cette manière :
if grep -q "$substr" <<< "$fullstring"; then echo "Found"; fi
Le q
options signifie que grep sera en mode silencieux et n'affichera aucune sortie. Veuillez noter qu'il y en a 3 <, pas seulement 2.
J'espère que ce tutoriel rapide vous a aidé à rechercher une sous-chaîne spécifique dans une chaîne. Si vous avez des questions ou des suggestions, n'hésitez pas à laisser un commentaire ci-dessous. Au fait, quelle pilule avez-vous choisie ? Avez-vous fait votre choix ?