Poco tempo fa ho deciso di creare un piccolo script in grado di interrogare un database, salvare temporaneamente in un file la risposta alla query ed inviare una notifica via email all'indirizzo di posta specificato. Nella fattispecie, tale script ha come scopo principale quello di notificare le scadenze da saldare e quelle non rispettate.
Ma bando alle ciance ed ecco lo script:
#!/bin/bash
logfile=/var/log/notifier.log
ROOT_UID=0
data=`date +%s` #lavoro con i timestamp per poter confrontare le date
if [ "$UID" -ne "$ROOT_UID" ];then
ERRORE1="Errore 1: Devi essere root per eseguire lo script"
echo $ERRORE1
echo "$(date) $ERRORE1" >> $logfile
exit 1
fi
echo "Hai le seguenti scadenze da saldare:" > scadenze
mysql -u root -ppassword -D nomedb -e "SELECT * FROM scadenza;" >> scadenze
while read line
do
scad=`cat scadenze | grep - | awk '{print $2}'` #per individuare la data di scadenza.
for info in $scad
do
datascad=`date --utc --date "$info" +%s` #uso i timestamp per confrontare le date
if [ "$data" -le "$datascad" ];then
echo $line >> scadenze_imminenti
fi
if [ "$data" -gt "$datascad" ];then
echo $line >> scadenze_nonrispettate
fi
done
done < scadenze
if grep -q "-" scadenze_imminenti ;then
scadenze_imm=`cat scadenze_imminenti | awk '!x[$0]++'` #rimuovo le righe duplicate
echo -e "n$scadenze_imm" | mail -iv -s "Scadenze da saldare" $destinatario;
fi
if grep -q "-" scadenze_nonrispettate ;then
cat scadenze_nonrispettate | mail -iv -s "Scadenze non saldate" $destinatario;
fi
rm scadenze
rm scadenze_imminenti
rm scadenze_nonrispettate
exit 0
Come è facile notare, viene fatto un confronto tra la data corrente e quella di ciascuna scadenza (sottoforma di UNIX timestamp). Nel caso in cui la data corrente sia antecedente o uguale a quelle delle scadenze, esse verranno salvate nel file scadenze_imminenti, il cui contenuto verrà successivamente inserito nel corpo di una email e spedito al destinatario.
Invece, se la data attuale è maggiore di quella della scadenza, quest'ultima verrà salvata nel file scadenze_nonrispettate, il cui contenuto verrà recapitato nella casella email del destinatario.
Per qualsiasi chiarimento contattatemi.
Bye.