Shell - comparer chaine de caractère

Résolu/Fermé
wida Messages postés 150 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 28 novembre 2011 - 6 juin 2011 à 18:13
wida Messages postés 150 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 28 novembre 2011 - 6 juin 2011 à 18:45
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 ?


A voir également:

8 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
6 juin 2011 à 18:31
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
Dr.W Messages postés 390 Date d'inscription jeudi 15 avril 2010 Statut Membre Dernière intervention 29 juin 2011 40
6 juin 2011 à 18:33
Oui voilà, <3 grep , sed & co :P
0
wida Messages postés 150 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 28 novembre 2011 17
6 juin 2011 à 18:45
Merciiii ça marche :DD
0
Utilisateur anonyme
6 juin 2011 à 18:41
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
Dr.W Messages postés 390 Date d'inscription jeudi 15 avril 2010 Statut Membre Dernière intervention 29 juin 2011 40
6 juin 2011 à 18:14
Pourquoi les quotes "?

T'as testé avec -eq a la place du = ?
0
wida Messages postés 150 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 28 novembre 2011 17
6 juin 2011 à 18:21
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 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Dr.W Messages postés 390 Date d'inscription jeudi 15 avril 2010 Statut Membre Dernière intervention 29 juin 2011 40
6 juin 2011 à 18:23
ahh c'est un '==' qu'il faut

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

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