Datum: 2001-05-15
Quelle: suse-linux
Zu Zeiten von Modem- und ISDN-Internetzugängen gab es noch keine Flatrates oder Volumentarife. Umso wichtiger war es, seine Online-Zeiten im Blick zu behalten. Es gab zwar isdnrep, aber dessen Ausgabe sagte nicht jedermann zu. Hier ist ein Beispiel, wie man diese Zeiten mit Shell-Mitteln aufsummieren kann.
Zuerst muss dafür gesorgt werden, dass die Online-Zeiten in einem brauchbaren Format gespeichert werden (die folgenden
Kommandozeilen legt man in die Scripts zum Auf- und Abbau der Verbindung ip-up und
ip-down):
echo -n `date +"%Y-%m %s"` >>/var/log/online.log beim Aufbau der Verbindung und
echo " `date +%s`" >>/var/log/online.log beim Abbau.
Damit haben wir zum einen den Monat zum Auswerten und die Sekunden für die Berechnung. Das nachfolgende Script befasst sich
mit der Auswertung der erzeugten Protokolldatei.
# Funktion: Sekunden umrechnen / function to convert seconds
calc_times () {
tm=$1
min=`expr $tm / 60`
sec=`expr $tm - $min \* 60`
if [ $min -gt 59 ]; then
hr=`expr $min / 60`
min=`expr $min - $hr \* 60`
else
hr=0
fi
if [ $hr -gt 23 ]; then
day=`expr $hr / 24`
hr=`expr $hr - $day \* 24`
else
day=0
fi
# Fertig: Ausgabe / finished: output
echo -n "Month: $2 Online time $day days, $hr hours, "
echo "$min minutes, $sec seconds"
}
### main
c_month= # Vergleichsmonat fuer Ausgabe / month to compare with for output
sum_tm=0 # aufsummierte Online-Zeit / summarized time
while read month online offline; do
seconds=`expr $offline - $online`
# Monatswechsel: Ausgabe / new month: output
if [ -n "$c_month" -a ! \( "$month" = "$c_month" \) ]; then
calc_times $sum_tm $c_month
# zuruecksetzen / reset
sum_tm=0
fi
c_month=$month
sum_tm=`expr $sum_tm + $seconds`
done <online.log
calc_times $sum_tm $c_month
In der Funktion calc_times werden die aufsummierten Onlinezeiten in Tage, Stunden, Minuten und Sekunden umgerechnet und ausgegeben. Die Schleife im Hauptprogramm arbeitet die Protokolldatei zeilenweise ab und summiert jeweils die Online-Zeiten. Bei einem Monatswechsel und am Schluss der Schleife wird die Funktion calc_times aufgerufen.