Bonjour à tous,
Voilà, je cherche à gérer les années bissextiles dans un shell, le "cahier des charges" est le suivant:
- Les années divisibles par 4 sont bissextiles, pas les autres.
- Exception: les années divisibles par 100 ne sont pas bissextiles.
- Exception à l'exception: les années divisibles par 400 sont
bissextiles.
Pour le moment, j'ai écrit un truc du genre:
if [ $(($ANNEE % 4)) -eq 0 -a $(($ANNEE % 100)) -ne 0 -a $(($ANNEE % 400)) -eq 0 ] then
echo $ANNEE est bissextile
else
echo $ANNEE non bissextile
fi
En gros ça dit, si le modulo de $ANNEE / 4 est nul, que le modulo de $ANNEE / 100 n'est pas nul et que le modulo de $ANNEE / 400 est nul, alors une année est considérée comme bissextile.
Mais comme bash ne connaît que les entiers, je me demande si les modulo que je récupère à l'aide de l'opérateur % est bien valide ou pas, je m'explique:
Prenons pour exemple, l'année 2008, elle est bien bissextile car d'après mon calendrier il y a bien un 29 février:
echo $((2008 % 4)) ----> Modulo 0 donc divisible par 4 (clause 1 respectée)
echo $((2008 % 100)) ----> Modulo 8 donc non divisible par 100 (clause 2 respectée)
echo $((2008 % 400)) ----> Modulo 8 donc à priori pas divisible par 400, pourtant cette année est bissextile, mais il ne s'agit bien sûr que de l'exception à l'exception.
Dois-je me baser uniquement sur la divisibilité par 4 et de la non-divisibilité par 100 pour dire qu'une année est bissextile ou non ?
D'après certaines moules dont je tairai le nom, la prochaine "exception" ne sera qu'en 2100, mon code ne sera plus en prod c'est certain ;-)
# cal
Posté par Sylvain Sauvage . Évalué à 1.
ou bien
cal 2 $ANNEE | grep 29 > /dev/null || echo pas bissextile
[^] # Fonctionne pas ;)
Posté par theocrite (site web personnel) . Évalué à 1.
bissextile
$ cal 2 2029 | grep 29 > /dev/null && echo bissextile || echo pas bissextile
bissextile
Avec tail.
$ isBissextil() { cal 2 $1 | tail -2 | grep 29 > /dev/null && echo "Bissextille" || echo "Non bissextile" }
Autres variantes :
$ isBissextil() { cal 2 $1 | grep -v $1 | grep 29 > /dev/null && echo "Bissextille" || echo "Non bissextile" }
$ isBissextil() { cal 2 $1 | grep -v "Février" | grep 29 > /dev/null && echo "Bissextille" || echo "Non bissextile" } (si c'est en français)
(Oui, c'est honteusement pompé sur Infernal Quak ;) )
# one line
Posté par Infernal Quack (site web personnel) . Évalué à 3.
$ isBissextil 2005
Non bissextille
$ isBissextil 2004
Bissextille
L'association LinuxFr ne saurait être tenue responsable des propos légalement repréhensibles ou faisant allusion à l'évêque de Rome, au chef de l'Église catholique romaine ou au chef temporel de l'État du Vatican et se trouvant dans ce commentaire
[^] # Re: one line
Posté par Infernal Quack (site web personnel) . Évalué à 2.
Pas besoin de me moinsser bande de racailles ! :)
L'association LinuxFr ne saurait être tenue responsable des propos légalement repréhensibles ou faisant allusion à l'évêque de Rome, au chef de l'Église catholique romaine ou au chef temporel de l'État du Vatican et se trouvant dans ce commentaire
# un poil de logique
Posté par 태 (site web personnel) . Évalué à 3.
[^] # Re: un poil de logique
Posté par Antoine Reilles (site web personnel) . Évalué à 2.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.