Salut,
Voilà un petit script "anniversaire.sh" qui permet d'afficher les anniversaires du jour, du jour d'après ou du jour d'avant (pour se rattraper) dans une fenêtre zenity.
Pour cela, il faut remplir un fichier anniversaires.txt de la forme :
#jj-mm-aaaa nom
06-01-1983 Nicolas
26-01-1985 Julien
14-02-1984 Jeremy
17-02-1900 Marie
Par défaut, le script cherche le fichier ~/anniversaires.txt, mais on peut spécifier le fichier avec l'option -f.
Chez moi, j'ai mis ce script dans les applications au démarrage, et dans mon .zshrc (ou .bashrc) avec l'option -c (ligne de commande seule).
Je ne suis pas un spécialiste du bash, toutes vos remarques sur l'amélioration du code me seront utiles.
Voici le script :
#!/bin/bash
# Anniversire.sh
#
# Affiche l'anniversaire du jour à partir du fichier ~/anniversaires.txt
#
#
# Exemple de fichier anniversaires.txt :
# #jour-mois-année Nom
# 06-01-1983 Nicolas
# 26-01-1985 Julien
# 14-02-1984 Jeremy
# 17-02-1980 Marie
#
usage()
{
cat << EOF
$0
Script pour rappel d'anniversaires.
Affiche dans une fenêtre Zenity les anniversaires du jour,
du jour d'avant et du jour d'après contenus dans un fichier
"anniversaires.txt", de la forme :
#jj-mm-aaaa nom
06-01-1983 Nicolas
26-01-1985 Julien
14-02-1984 Jeremy
17-02-1900 Marie
OPTIONS :
-f spécifie le fichier anniversaire.txt, par défaut : ~/anniversaires.txt
-c n'affiche le résultat que dans la console
-h affiche cette aide
EOF
}
verif()
{
DATE=$(date --date=$1 +%d-%m)
if [[ $DATE == $DateAnniv ]]
then
JOUR=$2
AGE=$(( $(date +%Y) - $AnneeNaissance ))
TEXTE=$( printf "%-11s %-5s : anniversaire de %-10s : %2s ans\n" $JOUR $DATE $Nom $AGE )
echo "$TEXTE"
if ! $COMMANDLINE
then
zenity --info --text "$TEXTE"
fi
fi
}
FILE=~/anniversaires.txt
COMMANDLINE=false
# Parsing arguments
while getopts "hcf:" OPTION
do
case $OPTION in
h)
usage
exit 0
;;
f)
FILE=$OPTARG
;;
c)
COMMANDLINE=true
;;
?)
echo "options possibles : -h, -c, -f"
exit 0
;;
esac
done
# test if FILE exists
if [ -e $FILE ]
then
#=================================#
while read LINE
do
if [[ ${LINE:0:1} != "#" ]] # ligne de commentaire : commence par #
then
DateAnniv=${LINE:0:5}
AnneeNaissance=${LINE:6:4}
Nom=${LINE:10}
verif "today" "Aujourd'hui"
verif "tomorrow" "Demain"
verif "yesterday" "Hier"
fi
done < $FILE
else
echo "Error: file $FILE not found!" >&2
exit
fi
EDIT : amélioration de pingouinux