Salve!
Ieri (qui), il caro Lightuono, in un suo commento, ha lanciato una sfida: Creare uno script che, impostata una data, "dica" in quale delle quattro stagioni essa si colloca.
Es. Se scrivo 25-12-2012, lo script deve dare come output "inverno." Non solo. Lo script deve "dire" anche se l'anno è bisestile o meno.
A dire il vero, lo script l'ho creato nella serata di ieri ma, per una questione di tempo, non l'ho potuto controllare. Perciò lo pubblico solo adesso.
Nel frattempo è arrivato un altro script, creato da Stefano. Lo potete trovare qui. Lo ringrazio tanto per aver condiviso il suo lavoro!
Premesso che si tratta di pura esercitazione, infatti lo script non risolve alcun problema esistenziale, devo dire che il mio script presenta delle evidenti limitazioni, cui non ho potuto (e in parte, saputo) provvedere!
Ad esempio, non tiene conto della durata del mese, perciò se scrivete 40-1-2012, lo script vi darà comunque una risposta. :) Certo, avrei potuto usare il comando date, ma non l'ho ritenuto opportuno per un'esercitazione. Avrei potuto usare ulteriori controlli....etc, etc. Poi, per farla breve, ho dato per scontato che l'equinizio di primavera avvenga sempre il 21 marzo; che il solstizio d'estate si abbia sempre il 21 giugno...e tante altre approssimazioni indebite! :)
#!/bin/bash
function bisestile() {
if (( (anno % 400) == 0 )) || (( (anno % 4) == 0 && (anno % 100) != 0 )); then
echo "l'anno $anno è bisestile"
else
echo " l'anno $anno non è bisestile"
fi
}
read -p "digita il giorno: " giorno
read -p "digita il mese: " mese
read -p "digita l'anno: " anno
case $mese in
[1-6])
if [ $giorno -lt 21 -a $mese -eq 3 ] || [ $mese -lt 3 ]; then
echo "siamo in inverno"
elif [ $giorno -eq 21 -a $mese -eq 3 ]; then
echo "equinozio di primavera"
elif [ $giorno -eq 21 -a $mese -eq 6 ]; then
echo "solstizio d'estate"
elif [ $giorno -ge 21 -a $mese -eq 6 ]; then
echo "siamo in estate"
else
echo "siamo in primavera"
fi
bisestile $anno
;;
[7-9])
if [ $giorno -gt 21 -a $mese -ge 9 ]; then
echo "siamo in autunno"
elif [ $giorno -eq 21 -a $mese -eq 9 ]; then
echo "equinozio d'autunno"
else
echo "siamo in estate"
fi
bisestile $anno
;;
*)
if [ $giorno -eq 21 -a $mese -eq 12 ]; then
echo "solstizio d'inverno"
elif [ $giorno -ge 21 -a $mese -eq 12 ]; then
echo "siamo in inverno"
elif [ $mese -gt 12 ]; then
echo "hai inserito un mese inesistente"
else
echo "siamo in autunno"
fi
bisestile $anno
;;
esac
exit 0
Posto che venga salvato nella cartella Documenti e nominato stagioni.sh, basta spostarsi nella directory Documenti
$ cd Documenti
ed eseguirlo
$ bash stagioni.sh
Dimenticavo, il giorno e il mese non devono contenere lo zero davanti! Es. per scrivere gennaio, bisogna usare 1 e non 01; la stessa cosa dicasi per i giorni. :D
A questo punto, ogni altra alternativa per risolvere il non facilissimo quesito, non può che essere gradita. :)
Ciao!
Ecco la mia versione -> http://toshidex.org/2012/03/02/5-ore-di-mortemale-per-creare-le-quattro-stagioni/
RispondiEliminaMi diverte troppo consultare il tuo sito e quello di Lightuono da quando li ho scoperti!
RispondiEliminaCome ho commentato anche li: "Ora so che posso avere degli amici!"
Hhahauaauhuahuh
Saluti e molti rispetti... XD
FrankRock
Sei il benvenuto. Sempre. :))
Elimina