Shell - comparer chaine de caractère [Résolu/Fermé]

Signaler
Messages postés
150
Date d'inscription
lundi 5 novembre 2007
Statut
Membre
Dernière intervention
28 novembre 2011
-
Messages postés
150
Date d'inscription
lundi 5 novembre 2007
Statut
Membre
Dernière intervention
28 novembre 2011
-
Bonjour,

Dans mon script j'ai deux variables contenant chacune une chaine de caractère.
Pour tester si une chaine est contenu dans une autre j'utiliser la condition suivante :

if [ "$var1" = "*$var2" ]

ou 

if [ "$var1" = *"$var2" ]


Mais toutes les deux ne marchent pas même si je suis sur que var1 contient var2.

Quelqu'un a une idée d'ou vient le problème ?


8 réponses

Messages postés
35700
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
25 octobre 2020
5 564
Salut,

Perso j'utiliserai plutôt "grep" et l'analyse du code retour ($?) :

$ A=chaine;B="Ma chaine à moi"

$ grep -q "${A}" <<< "${B}"

$ echo $?
0

$ A=chaine;B="Ma chaîne à moi"     # J'ai modifié le "î" de chaine

$ grep -q "${A}" <<< "${B}"

$ echo $?
1

$

;-))
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
390
Date d'inscription
jeudi 15 avril 2010
Statut
Membre
Dernière intervention
29 juin 2011
40
Oui voilà, <3 grep , sed & co :P
Messages postés
150
Date d'inscription
lundi 5 novembre 2007
Statut
Membre
Dernière intervention
28 novembre 2011
17
Merciiii ça marche :DD

salut,

si c'est en bash, alors
var1="foo bar baz" var2="baz"                                                                                                        
if [[ $var1 == *$var2 ]]; then echo "match"; else echo "no match"; fi

si c'est en shell POSIX
if echo "$var1" | grep "$var2" >/dev/null 2>&1; then echo "match"; else echo "no match"; fi
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
390
Date d'inscription
jeudi 15 avril 2010
Statut
Membre
Dernière intervention
29 juin 2011
40
Pourquoi les quotes "?

T'as testé avec -eq a la place du = ?
Messages postés
150
Date d'inscription
lundi 5 novembre 2007
Statut
Membre
Dernière intervention
28 novembre 2011
17
j'utilise les quotes parce que sans j'ai cette erreur :
unary operator expected


j'ai essayé maintenant avec -eq, sans quote il donne la même erreur que le = et avec il m'affiche cette erreur :
integer expression expected 
Messages postés
390
Date d'inscription
jeudi 15 avril 2010
Statut
Membre
Dernière intervention
29 juin 2011
40
ahh c'est un '==' qu'il faut

http://www.tech-recipes.com/rx/209/bournebash-shell-scripts-string-comparison/
Messages postés
150
Date d'inscription
lundi 5 novembre 2007
Statut
Membre
Dernière intervention
28 novembre 2011
17
ça donne pas d'erreur mais pareil que le =, ça marche pas!
je pense que c'est * qui gène !
Messages postés
390
Date d'inscription
jeudi 15 avril 2010
Statut
Membre
Dernière intervention
29 juin 2011
40
Faudrai faire un grep plutôt

Ou n'importe quel regexp. je crois qu'il y a awk pour ça
Messages postés
150
Date d'inscription
lundi 5 novembre 2007
Statut
Membre
Dernière intervention
28 novembre 2011
17
Merci à tous pour votre aide :)