Semplice script bash che implementa funzioni cronologiche.
Sostituire la riga 71 : “echo ripetizione” con l’operazione che si voglia eseguire.


#! /bin/bash
#clock.sh 1) sveglia: esegue un comando ad un ora inserita
# 2) timer : per un intervallo dà un messaggio ongi x secondi
clear

ora=0000 # le funzioni non possono ritornare un valore > 255 !

check(){
while true
do
read ora
[[ $ora =~ ^(([0-1][0-9])|((2)[0-4]))([0-5][0-9])$ ]] && ora=$ora && return
printf " ERR Formato errato: inserisci un numero da [0 a 24][0 a 59] : "

done
exit 0
}

getInt(){ # controlla che i parametri immessi siano numeri
while true
do
read a
if [[ $a =~ ^([0-9]+)$ ]]
then
return $a
else
printf " devi inserire un numero: "
fi
done
exit -1
}

PS3="inserisci la scelta: "
echo
select scelta in sveglia timer help esci
do
case $REPLY in
1) echo -e "\n Modalità sveglia : ora attuale `date +%H%M` "
printf "\n inserisci ora nel fomato hhmm : "
check

while true
do
[[ $ora -eq `date +%H%M` ]] && echo -e " SVEGLIA !! \n" && exit 0
sleep 1
done
;;
2)
echo -e "\n Impostazione timer \n"
printf " inserisci valore intervallo massimo in secondi "
getInt
i=$?

printf " inserisci valore periodo "
getInt
p=$?

start=`date +%s`
let max="$start + $i" # tempo massimo
k=1
now=`date +%s`
# ho dovuto introdurre la variabile now perchè inserendo il comando date nell'until
# e nell'if dava risultati differenti a seconda dell'istantein cui venivano processati
# così invece ho fregato lo scheduler ;)
until [ $now -gt $max ] # finchè non raggiungo il tempo massimo
do
if [ $now -eq $(($start + $p)) ] # finchè non raggiungo il tempo+periodo
then
start=`date +%s`
echo "ripetizione $k"
let k+=1
fi
now=`date +%s`
done
printf " Intervallo scaduto \n\n"
exit 0
;;
3)
echo -e " \t Help "
echo " 1) SVEGLIA: esegue una determinata azione solo allo scadere dell'ora scelta."
echo " 2) TIMER: esegue una determinata azione allo scadere di ogni intervallo, all'interno di un certo periodo."
echo " 3) Help: spero ti sia d'aiuto."
echo " 4) Esci."
;;
4) break;;
*) echo " Non hai fatto una scelta valida ";;
esac
done
exit 0

#gio 22 ott 2009 19:14:38 CEST
# Alessandro Affinito