Comment utiliser bash pour obtenir le dernier jour de chaque mois pour l'année en cours sans utiliser sinon sinon, passer ou en boucle?
Que nous savons que chaque année les suivants max jour chaque mois comme suit:
Jan - 31 days
Feb - 28 days / 29 days (leap year)
Mar - 31 days
Apr - 30 days
May - 31 days
Jun - 30 days
Jul - 31 days
Aug - 31 days
Sep - 30 days
Oct - 31 days
Nov - 30 days
Dec - 31 days
Comment puis-je obtenir bash pour renvoyer la valeur (dernier jour de chaque mois) pour l'année en cours sans l'aide de if else
ou switch
ou while
boucle?
source d'informationauteur Jack
Vous devez vous connecter pour publier un commentaire.
de mon point de vue:
À expliquer: pour la première itération lorsque m=1, le
-d
argument est "1/1 + 1 mois - 1 jour" et "1/1" est interprété comme le 1er janvier. Donc, Jan 1 + 1 mois - 1 jour est le 31 janvier. Prochaine itération "2/1" est le 1er Février, ajouter un mois de soustraire un jour pour obtenir Fév 28 ou 29. Et ainsi de suite.En supposant que vous permettre de "pour", puis le suivant en bash
produit ce
Note: j'ai supprimé la nécessité d'
cal
Pour ceux qui aiment trivia:
Donc, à l'exception du mois de février cela fonctionne:
Résultat:
renvoie le nombre de jours dans le mois pour compenser février changements dans les années bissextiles sans boucle, ou à l'aide d'une instruction if et seuls les appels de date une fois.
Ce code tests la date pour voir si le 29 Février de l'année de référence est valide, si oui, alors il met à jour la deuxième caractère de la journée décalage de la chaîne. Le mois argument sélectionne respectifs de la sous-chaîne et ajoute le mois de différence de 28.
Essayez d'utiliser ce code
Contenu de
script.sh
:Résultats:
Sur un Mac qui dispose de BSD date il vous suffit de faire:
Explication Rapide
-v
signifie ajuster. Nous sommes réglage de la date:-v1d
stands pour le premier jour du mois-v"$i"m
défini le mois par exemple (-v2m
pour Février)-v-1d
moins un jour (nous sommes donc arriver le dernier jour du mois précédent)"+%d"
impression le jour du moisVous pouvez ajouter l'année de cours. Voir les exemples dans la page de manuel (lien ci-dessus).
Il n'y a pas de sens, afin d'éviter à l'aide de cal, parce qu'il est requis par la norme POSIX, donc devrait être là