Programmation.shell : Afficher les dates des 100 derniers jours

Posté par mc_arnaud () le 07 mai 2008
0

Bonjour (ou plustot "bonne nuit", il est 2h10),



J'ai envie d'afficher les dates des 100 derniers jours dans un format bien précis. Pour ce qui est du format c'est bon, j'ai trouvé (man date). Par contre je n'ai pas réussi à scripter la récursivité. Voila ce que j'ai essayé et qui me parraissait bon :

for i in $(seq 1 100); do

date +"%d%m%Y" --date '($i) days ago';

done

Ce qui me donne 100 fois la date d'hier !



Si je fais

for i in $(seq 1 100); do

echo $i;

done

j'ai bien les chiffres 1 à 100 qui s'affichent.



Il y a donc quelque-chose qui m'échappe : si ça fonctionne avec echo, pourquoi ça ne fonctionnerai pas avec date ? Et comment je fais moi maintenant pour avoir mes 100 dates sans avoir à les taper une à une à la mimine ?



--

Rénald.

> Lire le message (9 commentaires, moyenne: 2,8).  

Vous avez demandé le commentaire #929806.

Récursivité

Posté par Kerro () le 07/05/2008 à 11:20. (lien). Évalué à 2.

Les commentaires concernants les guillements sont exacts: les guillemets simples sont fait pour ne pas interpréter leur contenu, donc tes variables ne sont pas remplacées par leur valeur.

Juste un mot sur la récursivité: ce n'est qu'une boucle, pas de récursivité :-)

[ Répondre ]

  • [^]Re: Récursivité

    Posté par mc_arnaud () le 07/05/2008 à 12:45. (lien). Évalué à 1.

    Exact, le terme était mal choisi. Mea culpa.

    --
    Rénald

    [ Répondre ]

    • [^]Re: Récursivité

      Posté par Maxime (Jabber id, page perso, ) le 08/05/2008 à 11:06. (lien). Évalué à 3.

      Ou alors on se la pète jusqu'au bout :

      #!/bin/sh

      aff_date()
      {
      if [ $1 -gt 0 ]; then
      aff_date `expr $1 - 1`;
      date +"%d%m%Y" --date "$1 days ago";
      fi
      }

      aff_date 100;

      [ Répondre ]

      • [^]Joli !

        Posté par Kerro () le 10/05/2008 à 12:02. (lien). Évalué à 2.

        J'aurais inversé la ligne aff_date... et la ligne date +...

        Dans ton cas, on "empile" les appels avant d'afficher. En cas de blocage quelque part, on ne voit rien. En inversant les deux lignes, on affiche chaque fois qu'on fait un pas de plus dans la récursivité.

        [ Répondre ]

        • [^]Re: Joli !

          Posté par Maxime (Jabber id, page perso, ) le 10/05/2008 à 22:08. (lien). Évalué à 2.

          J'ai volontairement fait comme ça pour afficher de la même manière qu'avec la boucle for. Sinon ça m'aurais obligé à faire le test "tant que <= 100" à place et fait l'appel avec la valeur 1 mais c'est encore moins générique du coup j'aurais eu besoin d'une seconde valeur pour que cela le redevienne... Bref :). De toute façon, ici ça sert à rien, l'itératif, c'est mieux.

          [ Répondre ]

          • [^]Re: Joli !

            Posté par Maxime (Jabber id, page perso, ) le 10/05/2008 à 22:11. (lien). Évalué à 2.

            Quand je dis "de la même manière", on aura bien évidemment compris "dans le même ordre", c'est à dire de 1 à 100 et non de 100 à 1 ce qui aurait été la conséquence de l'inversion de ces 2 lignes comme tu le proposes.

            [ Répondre ]