Samstag, 22. November 2008
Der letzte Tag eines Monats
Um abseits von cron in einem Shellskript den letzten Tag eines beliebigen Monats zur Verfügung zu haben, habe ich mir eine function einfallen lassen. Schaltjahre sind so z.B. kein Problem mehr.
Folgendes Skript (ultimo.sh) ist zum Testen gedacht. Es erwartet genau zwei Parameter: den Monat (zweistellig) und das Jahr (vierstellig).
Was so viel bedeutet wie "der Februar 2002 hatte 28 Tage"
Die Idee dahinter ist einfach: Ich nehme den ersten Tag des Folgemonats, Sekunde 0, und ziehe davon eine Sekunde ab.
Konkretere Beispiele:
• Wenn ich aus irgendeinem umfangreichen Logfile den genauen Monat automatisiert extrahieren möchte, brauche ich den ersten und letzten Tag des Monats.
• SARG (Squid Analysis Report Generator) erwartet zum Auswerten eines Monats die Option
"-d 01/MM/YYYY-letzterTag/MM/YYYY"
Folgendes Skript (ultimo.sh) ist zum Testen gedacht. Es erwartet genau zwei Parameter: den Monat (zweistellig) und das Jahr (vierstellig).
#!/bin/bash
month=$1
year=$2
function ultimo ()
{
lastsec=$(echo $(( `date -d ${year}${month}01 +%s` -1)) )
lastday=$(echo $lastsec | gawk '{print strftime("%d",$1)}' )
echo $lastday ist der letzte Tag des Vormonats von $month im Jahr $year
}
ultimo
exit 0
Aufgerufen wird es so:
month=$1
year=$2
function ultimo ()
{
lastsec=$(echo $(( `date -d ${year}${month}01 +%s` -1)) )
lastday=$(echo $lastsec | gawk '{print strftime("%d",$1)}' )
echo $lastday ist der letzte Tag des Vormonats von $month im Jahr $year
}
ultimo
exit 0
ultimo.sh 03 2002
Ergebnis: 28 ist der letzte Tag des Vormonats von 03 im Jahr 2002Was so viel bedeutet wie "der Februar 2002 hatte 28 Tage"
Die Idee dahinter ist einfach: Ich nehme den ersten Tag des Folgemonats, Sekunde 0, und ziehe davon eine Sekunde ab.
Konkretere Beispiele:
• Wenn ich aus irgendeinem umfangreichen Logfile den genauen Monat automatisiert extrahieren möchte, brauche ich den ersten und letzten Tag des Monats.
• SARG (Squid Analysis Report Generator) erwartet zum Auswerten eines Monats die Option
"-d 01/MM/YYYY-letzterTag/MM/YYYY"
(Seite 1 von 1, insgesamt 1 Einträge)