2
votes

Comment puis-je obtenir le dernier jour du mois Shell Scripting

J'essaie d'obtenir le dernier jour du mois en cours, ou le mois dernier, ce que j'utilise pour contourner ce "problème" est de vérifier avec:

if [ $DAY -eq 1 ]; then
    code here;
fi

Si le jour est 1, donc ça veut dire que je suis dans le nouveau mois, donc je dois aussi faire une sauvegarde domy.

Avez-vous une idée de comment puis-je vérifier si aujourd'hui est le dernier jour du mois "31 janvier" par exemple ???

Merci !!!!


0 commentaires

3 Réponses :


3
votes

Une façon serait d'utiliser la date GNU:

if [[ $(date -d "+1 day" +%m) != $(date +%m) ]]
then
    echo "Today is the last day of the month"
else
    echo "Today is NOT the last day of the month"
fi


0 commentaires

3
votes

Cela vous donne le dernier jour du mois précédent

if [[ $(date  +%d%m%Y -d "-$(date +%d) days +1 month") != $(date +%d%m%Y) || $(date  +%d%m%Y -d "-$(date +%d) days -0 month") != $(date +%d%m%Y)  ]]
    echo "Today is NOT the last day of the month"
else
    echo "Today is the last day of the month"
fi

et cela vous donne le dernier jour du mois en cours

date -d "-$(date +%d) days +1 month"

date -d "-$(date +%d) days -0 month"


1 commentaires

Si vous êtes le 30 (dernier jour du mois dernier), "+1 mois" ne vous renvoie pas au 31 de ce mois.



6
votes

Obtenir le dernier jour d'un mois est parfois difficile, car tous les mois n'ont pas le même nombre de jours, bien sûr.

Une façon de le faire est d'obtenir le premier jour de ce mois, ajoutez un mois à cela (pour obtenir le premier jour du mois suivant), puis soustraire un jour.

date --date="$(date +%Y-%m-01) +1 month -1 day" '+%F'
2019-01-31

Et rappelez-vous que date peut afficher le format de votre choix (argument commençant par +).

date --date="$(date +%Y-%m-01) +1 month -1 day"
thu jan 31 00:00:00 -07 2019

Voir man date pour plus d'infos ou info '(coreutils ) date invocation ' pour encore plus.


1 commentaires

C'est exactement ce que je recherchais: la logique de calcul claire! Merci