Tageweise über Zeitraum iterieren in MacOS Shellskript

Nachdem ich die Tage mal auf der Arbeit versucht habe, mit Hilfe eines Shellscripts für den Mac über einen Zeitraum zu iterieren und es bislang auf die Schnelle nicht geschafft habe, ein derartiges Skript zu schreiben, hat mich das doch ziemlich gewurmt und ich habe mich jetzt am Wochenende mal hingesetzt und es tatsächlich geschafft, ein entsprechendes Skript zu schreiben.

Das folgende Skript dient als Beispiel und muss dem entsprechenden Anwendungsfall angepasst werden. Das folgende Skript wird mit den Parametern "<startdate> <enddate>" aufgerufen, wobei das Format des Datums folgendes ist: YYYY-MM-DD (Y: vierstelliges Jahr, M: zweistelliger Monat, D: zweistelliger Tag).

Hier das Skript selbst:

#!/bin/bash
STARTDATE=$1
ENDDATE=$2

CURRENT_DATE_SINCE_EPOCH=`date -j -f "%Y-%m-%d" $STARTDATE +%s`
ENDDATE_SINCE_EPOCH=`date -j -f "%Y-%m-%d" $ENDDATE +%s`

while [ $CURRENT_DATE_SINCE_EPOCH -le $ENDDATE_SINCE_EPOCH ]
do
  DAY=`date -j -f "%s" $CURRENT_DATE_SINCE_EPOCH +%d`
  MONTH=`date -j -f "%s" $CURRENT_DATE_SINCE_EPOCH +%m`
  YEAR=`date -j -f "%s" $CURRENT_DATE_SINCE_EPOCH +%Y`
  echo $YEAR-$MONTH-$DAY
  CURRENT_DATE_SINCE_EPOCH=`date -v +1d -j -f "%s" $CURRENT_DATE_SINCE_EPOCH +%s`
done

Wie man dem Skript entnehmen kann, werden die Eingabedaten zunächst in Sekunden seit EPOCH umgewandelt, um damit rechnen zu können, d.h. um schauen zu können, wann die Abbruchbedingung zutrifft (while-Schleife). Innerhalb der Schleife wird das aktuell behandelte Datum in verschiedene Werte umgewandelt. Um das Skript nicht unnötig zu verkomplizieren, habe ich darauf verzichtet, nur ein date-Aufruf zu tätigen und das Ergebnis ggf. per grep aufzusplitten; hier ist also noch Optimierungspotential. Das Ganze ist übrigens für den Mac entwickelt, sollte aber vermutlich auch unter Unix laufen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.