"if" a multiple argument

Résolu
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   -  
zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

j'essai de faire ça :
if [ -z $mode -o $mode="ref"] ;then...
mais ça ne fonctionne pas comme je le voudrai, je n'arrive pas à utilise plusieurs argument de test dans le if, et je ne trouve pas d'exemple. (en espérant que c'est clair).



--
La vrai soumission c'est quand les esclaves s'inquiètent du cours du coton.
Char Snipeur

1 réponse

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

     if [ -z "${mode}" -o "${mode}" = "ref" ] ;then...

    Attention aux espaces avant et après chaque crochet ainsi qu'autour du signe "égale" !
    Les quotes aussi sont très importantes et prendre l'habitude d'entourer ses variables avec des accolades.
    0
    1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      l'espace avant le ] était une erreur de recopie, mais les espaces autour du '=' était bien la cause du problème. Je ne comprend pas ce qu'il fait dans ce cas là et pourquoi il ne met pas de message d'erreur.
      Par contre, les guillemets ne sont pas nécessaire.
      Merci !
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Par contre, les guillemets ne sont pas nécessaire.
      Ils ne sont pas nécessaire entre double crochets, par contre ils sont recommandés entre simple crochet.

      $ B="Un saut
      de ligne"
      
      $ C="${B}"
      
      $ echo "${B}";echo "${C}"
      Un saut
      de ligne
      Un saut
      de ligne
      
      $ echo ${B};echo "${C}"
      Un saut de ligne
      Un saut
      de ligne
      
      $ if [ ${B} = "${C}" ]; then echo "OK"; else echo "Bad"; fi
      bash: [: trop d'arguments
      Bad
      
      $ if [ "${B}" = "${C}" ]; then echo "OK"; else echo "Bad"; fi
      OK
      
      $


      Autre exemple :

      $ V=""
      
      $ [ "${V}" = "" ] && echo "Vide ou non définie" || echo "Inconnue"
      Vide ou non définie
      
      $ [ ${V} = "" ] && echo "Vide ou non définie" || echo "Inconnue"
      bash: [: = : opérateur unaire attendu
      Inconnue
      
      $
      0
    3. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      Merci pour la précision.
      La seule chose que je voulais dire, c'est que l'erreur ne venait pas de là.
      0
    4. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      Pour l'anecdocte, je n'avais pas modifier, le cas viens de se présenter...
      Bien ait pour moi, ça m'apprendra à coder salement -> une dizaine de fichiers à modifier.
      0
    5. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      En général ce genre d'erreur est salutaire.
      C'est d'ailleurs de nos erreurs qu'on apprend le plus paradoxalement ;-))
      0