Forum Linux.débutant transformer date en nombre pour calcul

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
1
30
juin
2015

Bonjour,

je cherche a exécuter un rsync différent selon que nous soyons le 1er ou le 15 du mois.

pour le moment j'arrive à bien récupérer la date du jour :

datedujour=$(date '+%d')
echo -e "$datedujour\n"

résultat :
30

mais quand je rajoute ceci :

datedujour=$(date '+%d')
echo -e "$datedujour\n"
if ($datedujour == "30"); then
echo -e "$datedujour"
else
echo -e "pas la date voulue"
fi

résultat :

30
exempleSH.sh: line 14: 30: not found
pas la date voulue

Merci de votre aide…

  • # Crochets

    Posté par  . Évalué à 3.

    Salut,

    pour ton if essaye la syntaxe suivante:

    if [ $datedujour == "30" ]

    cordialement

  • # Raté

    Posté par  (site web personnel) . Évalué à 2.

    Hello,

    Ce sont des crochets autour des conditions. ;)
    En bash, le contenu entre parenthèses est exécuté.

  • # pas mieux

    Posté par  . Évalué à 1.

    Merci à vous 2

    cependant ca ne fonctionne pas mieux, j'ai le même message.
    je penche pour un élément stocké sous forme de date et non sous forme de nombre, est ce que ca pourrait être ca ?
    Dans ce cas comment convertir
    datedujour=$(date '+%d') en nombre ?

    merci

    • [^] # Re: pas mieux

      Posté par  (site web personnel, Mastodon) . Évalué à 2.

      non, c'est bien juste une histoire de crochet, chezmoiçamarche©

      if [ "$datedujour" = "30" ]; then
      echo -e "$datedujour"
      else
      echo -e "pas la date voulue"
      fi
      30

    • [^] # Re: pas mieux

      Posté par  . Évalué à 1.

      Crochets et espaces à l'intérieur des crochets…

      if [ xxxxxx ]

  • # ...

    Posté par  . Évalué à 2.

    
    datedujour=$(date '+%d')
    echo -e "$datedujour\n"
    if [ $datedujour -eq 30 ]
    then
       echo -e "$datedujour"
    else
       echo -e "pas la date voulue"
    fi
    
    • [^] # Re: ...

      Posté par  (site web personnel, Mastodon) . Évalué à 2.

      J'ai plus le droit de modifier mon commentaire alors je complète ici :
      $xx = "30" compare des string
      $xx -eq "30" compare des nombres

      et pour plus d'info il y a "man test" la fonction derrière les crochets.

    • [^] # Re: ...

      Posté par  . Évalué à 2.

      Juste pour préciser, = et == sont équivalents (comparent des chaînes). Ce n’est pas dit dans le man mais dans la page info.

      • [^] # Ne pas utiliser ==

        Posté par  (site web personnel) . Évalué à 8.

        Ne pas utiliser ==, ce n'est pas dans POSIX, et ça peut ne pas être supporté.

        Sous bash :

        if [ 1 == 1 ]; then echo ok; else echo ko; fi
        ok
        

        Sous dash :

        $ if [ 1 == 1 ]; then echo ok; else echo ko; fi
        dash: 1: [: 1: unexpected operator
        ko
        

        Sous zsh :

        if [ 1 == 1 ]; then echo ok; else echo ko; fi
        zsh: = not found
        

        Debian Consultant @ DEBAMAX

  • # résolu

    Posté par  . Évalué à 1.

    MERCI !!

    pour info c'est cette version qui a fonctionné

    if [ $datedujour -eq 30 ]

    encore merci

    • [^] # Re: résolu

      Posté par  . Évalué à 2.

      C’est bien -eq qu’il faut utiliser dans ton cas…

      2 -eq 02 est vrai

      alors que :

      2 = 02 est faux

    • [^] # Re: résolu

      Posté par  . Évalué à 2.

      Je te conseille de mettre $datedujour entre quote durant ton test. Tu éviteras les erreurs dans le cas ou $datedujour sserait vide pour une raison ou une autre (à moins que ce soit le but recherché …).

      • [^] # Re: résolu

        Posté par  . Évalué à 2.

        Je suis allé un peu vite : pas de quote pour -eq: c'est untest numérique.

        Désolé pour le bruit.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.