Shell : Condition

Résolu
Bonjour,
je ne comprend pas pourquoi ce qui suit me retourne OUI et pas NON ???
Merci pour votre aide ;)
sauvegarde_quotidien="oui"
dateV=6

if ([ $dateV -ne 6 ]  ||  [ $dateV -ne 7 ])  &&  [ "$sauvegarde_quotidien" = "oui" ]; then
        {
        echo "OUI"
        }
        else
        {
        echo "NON"
        }
fi

7 réponses

  1. effectivement, ça marche avec AND ;)
    ça dépasse ma logique 8[-)
    1. Modérateur
      N'oublie pas que l'expression entre () sera évaluée de manière logique et non 'par résultat'...

      date ne 6 : faux
      date ne 7 : vrai

      (faux ou vrai) = on ne demande pas si le premier terme est correct et si le deuxième l'est également, mais on se contente de faire une comparaison booléenne et en l'occurrence, vrai ou faux donne vrai

      Le OU booléen (OU non exclusif, s'entend) est défini de cette façon :

      a OU b est VRAI si et seulement si a est VRAI ou b est VRAI, (si a est vrai et que b est vrai aussi, alors a OU b est vrai)

      C'est l'une des premières erreurs qu'on fait en programmation ;-)
  2. Contributeur
    non, parce que (VRAI ou FAUX) c'est vrai, (VRAI et FAUX) c'est faux
    1. alors là je bug !
      pour que = VRAI il faut que tout soit VRAI ... non ?
      si il y a un FAUX, la condition n'est pas respectée.

      pour que ça soit VRAI ,ne faut-il pas :
      (VRAI ou VRAI) et VRAI = VRAI
      si il y un FAUX quelque part ça donne FAUX
      (VRAI ou FAUX) et VRAI = FAUX
      non ???
      1. Modérateur
        essaye avec un &&...
    2. Contributeur
      hello
      je dirais que
      (faux ou vrai) et vrai == vrai, donc OUI
      1. mais un AND n'est pas du tout la même condition !!!
        j'avais essayé avec != à la place ne -ne, même problème ;)
        1. Modérateur
          Salut,

          je crois qu'il faut se méfier du not égal avec un or... essaye avec un and...