Dans le sens le plus traditionnel, qui est celui des scripts shell (BASH, PERL…) , un script sert principalement à lancer et coordonner l’exécution de programmes.
Donc voilà, j’ai du faire des petites recherches ce matin, afin de manipuler des dates en BASH pour l’un de mes scripts.
J’ai besoin de lancer des traitements, avec en paramètre des dates. Parfois, j’aurais besoin de récupérer la date du jour (facile), parfois d’autres dates, comme la veille, le dernier jour du mois précédent, etc… . Bien évidemment, parfois c’est facile, et parfois, cela l’est beaucoup moins.
Comme je ne travaille pas que sur des infrastructures Linux, mais surtout AIX, la commande date est limitée (ça n’est pas le date GNU).
Je pose ici mon petit pense-bête (un peu comme avec le history), un petit florilège, en BASH et en PERL qui me dépanne bien.
Avant tout, on charge quelques variables….
CURRENT_MONTH=$(date +%m) CURRENT_YEAR=$(date +%y) _MONTHP1=$(expr $CURRENT_MONTH + 1) MONTHP1=$(printf "%02d\n" "$_MONTHP1") _MONTHM1=$(expr $CURRENT_MONTH - 1) MONTHM1=$(printf "%02d\n" "$_MONTHM1")
La date de la veille en PERL
YESTERDAY=$(perl -e '($s,$m,$h,$J,$M,$A) = localtime(time - 24*60*60) and printf("%02d\/%02d\/%04d\n", $J,$M+1,$A+1900)') echo "Date de la veille =>" $YESTERDAY
La date du jour + 17 jours en PERL
JP17=$(perl -e '($s,$m,$h,$J,$M,$A) = localtime(time + 17*24*60*60) and printf("%02d\/%02d\/%04d\n", $J,$M+1,$A+1900)') echo "Jour + 17 =>" $JP17
Le dernier jour du mois en cours en BASH
LDOC=$(cal $CURRENT_MONTH $CURRENT_YEAR | grep -v ^$ | tail -1 | sed 's/^.* \([0-9]*\)$/\1/') echo "Dernier jour du mois en cours =>" $LDOC
Le dernier jour du mois suivant en BASH
LDOC=$(cal $MONTHP1 $CURRENT_YEAR | grep -v ^$ | tail -1 | sed 's/^.* \([0-9]*\)$/\1/') echo "Dernier jour du mois suivant =>" $LDOC
Le dernier jour du mois précédent en BASH
LDOC=$(cal $MONTHM1 $CURRENT_YEAR | grep -v ^$ | tail -1 | sed 's/^.* \([0-9]*\)$/\1/') echo "Dernier jour du mois précédent =>" $LDOC
Allez, amusez-vous bien !!!