recupérer la date d'hier

recupérer la date d'hier - Shell/Batch - Programmation

Marsh Posté le 09-05-2006 à 12:21:44    

Bonjour,
 
J'ai un script sh qui s'execute automatiquement tous les jours et qui doit récupérer la date d'hier au format AAAAMMJJ sans aucun caratere entre l'année le mois et le jour.
Pour le monent je fais ca:
 

Code :
  1. annee=$(date +%Y)
  2. mois=$(date +%m)
  3. jour=$(date +%d)
  4. jour=$[$jour-1]
  5. date=$annee$mois$jour


 
Le souci que je vais avoir c'est le premier du mois pour savoir si la veille on etait un 31, 30, 29 voire 28
Pas trop compliqué à faire les testes mais bon s'il existe deja quelque chose en shell je prefere utiliser la fonction de base. Est ce que ca existe?
 
Merci

Reply

Marsh Posté le 09-05-2006 à 12:21:44   

Reply

Marsh Posté le 09-05-2006 à 12:51:24    

Si ton script est automatiquement lancé absolument tous les jours
et que tu génères au moins un fichier log,
-> tu peux récupérer la propriété date du dernier fichier log créé.
 
Il faudra juste faire une manip manuelle pour la première fois.

Reply

Marsh Posté le 09-05-2006 à 13:40:58    

Merci de ta reponse mais cette solution ne me convient pas trop car si un jour le programme ne se lance pas pas X raisons ca ne marchera pas :(

Reply

Marsh Posté le 09-05-2006 à 13:45:52    

Le plus simple que je connaisse est d'utiliser PERL, qui est normalement installé sur ta machine/serveur (c'est de plus en plus standard... faut croiser les doigts) :
 
En ksh :

hier=`perl -e '($s,$m,$h,$J,$M,$A) = localtime(time - 24*60*60) and printf("%04d%02d%02d\n", $A+1900,$M+1,$J)'`
 
echo $hier


 
Principe : on prend la date en nombre de seconde (fonction "time" ), on enlève le nombre de secondes d'une journée (24 heures * 60 minutes * 60 secondes), on convertit ça en une suite de variables utilisables (localtime nous donne, dans l'ordre : secondes, minutes, heures, jours, mois, années), et on l'affiche avec printf() en formaté.
 
Le tout sur une seule ligne.
 
 
En script-shell pur, je ne connais pas de bon moyen de parvenir à ce résultat aussi facilement.


Message édité par Elmoricq le 09-05-2006 à 13:46:18
Reply

Marsh Posté le 09-05-2006 à 14:33:16    

Reply

Marsh Posté le 09-05-2006 à 14:36:04    

Pas standard.
 
Je pense que la plupart des Unix n'implémentent pas cette solution.
Notamment l'OS sur lequel je suis, Solaris 8, qui ne reconnait pas l'option -d à "date" :o


Message édité par Elmoricq le 09-05-2006 à 14:36:46
Reply

Marsh Posté le 09-05-2006 à 14:50:10    

Si non je peux me debrouiller avec le timestamp en soustrayant 24*3600 mais apres il faut que je puisse convertir mon timestamp en AAAAJJMM comme dans la solution de Elmoricq mais en shell et pas en perl

Reply

Marsh Posté le 09-05-2006 à 14:57:13    

Ben si tu as PERL sur ta machine, c'est quand même le plus simple.
 
Et comme on trouve cet interpréteur relativement partout...

Reply

Marsh Posté le 09-05-2006 à 14:59:27    

Disons que c'est imposé d'utiliser un shell qui appel aussi un programme perl mais qui fait d'autres choses avant

Reply

Marsh Posté le 09-05-2006 à 15:10:26    

:??:
 
Regarde la ligne que j'ai mise au-dessus : c'est invoqué à partir du shell pour stocker le résultat dans une variable, c'est comme si tu appelais awk ou sed.
 
Ou alors j'ai rien compris à ce que tu veux dire.

Reply

Marsh Posté le 09-05-2006 à 15:10:26   

Reply

Marsh Posté le 09-05-2006 à 15:22:16    

Désolé je n'avais pas compris que c'était invoqué à partir du shell donc ca fonctionne bien comme solution merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed