bonjour,
@Sputnik je me permets de commenter votre code (en plus des remarques pertinentes de Watael),
#!/bin/bash
#VARIABLE DATE DU JOUR
read jourActu moisActu anneeActu < <(date +'%d %m %Y')
#INSERTION DATE DE NAISSANCE
read -p 'Entrez votre jour de naissance :' jourNaissance
read -p 'Entrez votre mois de naissance :' moisNaissance
read -p 'Entrez votre année de naissance :' anneeNaissance
# TEST VARIABLES
if [[ $jourNaissance =~ ^[0-9]{1,2}$ ]] \
&& ((jourNaissance >=1 && jourNaissance <=31)) \
&& [[ $moisNaissance =~ ^[0-9]{1,2}$ ]] \
&& ((moisNaissance >=1 && moisNaissance <=12)) \
&& [[ $anneeNaissance =~ ^[0-9]{4}$ ]] \
&& ((anneeNaissance > 1900 && anneeNaissance < anneeActu)) \
&& ((moisActu < moisNaissance))
then
age=$((anneeActu-anneeNaissance-1))
else
if [[ $jourNaissance =~ ^[0-9]{1,2} ]] \
&& ((jourNaissance >=1 && $jourNaissance <=31)) \
&& [[ $moisNaissance =~ ^[0-9]{1,2}$ ]] \
&& ((moisNaissance >=1 && moisNaissance <=12)) \
&& [[ $anneeNaissance =~ ^[0-9]{4}$ ]] \
&& ((anneeNaissance > 1900 && anneeNaissance < anneeActu)) \
&& ((moisActu > moisNaissance))
then
age=$((anneeActu-anneeNaissance))
else
echo "Données incorrectes">&2
fi
fi
i=$age
if ((i<=30)); then
echo "Vous avez $age ans, vous êtes jeune."
elif ((i>30 && i<60)); then
echo "Vous avez $age ans."
elif ((i>=60 && i<=100)); then
echo "Vous avez $age ans, vous êtes vieux."
elif ((i>100 && i<120)); then
echo "Vous avez plus de 100 ans, incroyable !"
elif ((i>120)); then
echo "Vous ne pouvez pas avoir plus de 120 ans."
else
echo "Données incorrectes" >&2
exit 1
fi
- cela ne tient pas compte de la longueur des mois, il n'y a pas 31 jours dans tout les mois. (on peut renseigner le 31 février par exemple)
- cela ne marche pas si la personne est née durant le début de l'année en cours (cela produit une erreur)
- si la personne a moins qu'un an, il faut peut-être adapter l'affichage
- la condition ((i>120)) est impossible à réaliser, la date la plus petite renseignable est 1 janvier 1901
- il manque un "exit 1" après le premier "Données incorrectes", sinon il va tenter de faire un calcul sur des données incorrects
- à quoi peut bien servir le deuxième "Données incorrectes" ?
Cordialement