Shell - comparer chaine de caractère

Résolu
wida Messages postés 170 Statut Membre -  
wida Messages postés 170 Statut Membre -
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 ?



--
Le rêve n'aboutit à rien, l'action à tout.
(J. FIAUX).

8 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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
    1. Dr.W Messages postés 406 Statut Membre 40
       
      Oui voilà, <3 grep , sed & co :P
      0
    2. wida Messages postés 170 Statut Membre 17
       
      Merciiii ça marche :DD
      0
  2. Utilisateur anonyme
     
    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
  3. Dr.W Messages postés 406 Statut Membre 40
     
    Pourquoi les quotes "?

    T'as testé avec -eq a la place du = ?
    0
  4. wida Messages postés 170 Statut Membre 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 
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Dr.W Messages postés 406 Statut Membre 40
     
    ahh c'est un '==' qu'il faut

    http://www.tech-recipes.com/rx/209/bournebash-shell-scripts-string-comparison/
    0
  7. wida Messages postés 170 Statut Membre 17
     
    ça donne pas d'erreur mais pareil que le =, ça marche pas!
    je pense que c'est * qui gène !
    0
  8. Dr.W Messages postés 406 Statut Membre 40
     
    Faudrai faire un grep plutôt

    Ou n'importe quel regexp. je crois qu'il y a awk pour ça
    0
  9. wida Messages postés 170 Statut Membre 17
     
    Merci à tous pour votre aide :)
    0