Hi All,
I'm having some trouble figuring this out.
I have a script that checks a log file that is generated the day after the date specified by the script call. This is because the files fetched for the specified day's data won't be fetched until the day after. And when that cron runs in the morning, the log file will have a timestamp in it's file name for the next day, not the day specified by the arg. I need to keep the arg the same since is standard convention for our group to only specify the day that the data refers to, not the day that it is fetched by the cron job. That date (stored in $NOW in this script) is used quite a bit for other operations.
So right now I'm doing this crazy nested conditional thing (which actually works but I think it is hideous):
#Setup the date, and variables
TENANT=$1
DATE_ARRAY=(`echo $2 | sed -e 's/\// /g'`)
MONTH=(`echo ${DATE_ARRAY[0]}`)
DAY=(`echo ${DATE_ARRAY[1]}`)
YEAR=(`echo ${DATE_ARRAY[2]}`)
NOW=$YEAR$MONTH$DAY
...
# The next 15 lines or so will iterate the cron log date to the correct
# month or year if the load date is at the end of the month/year.
if [ "$DAY" -eq 28 ] && [ "$MONTH" -eq 02 ]; then
CRON_NOW=$(($NOW + 173))
elif [ "$DAY" -le 29 ]; then
CRON_NOW=$(($NOW + 1))
elif [ "$DAY" -eq 30 ]; then
if [ "$MONTH" -eq 04 ] || [ "$MONTH" -eq 06 ] || [ "$MONTH" -eq 09 ] || [ "$MONTH" -eq 11 ]; then
CRON_NOW=$(($NOW + 171))
else
CRON_NOW=$(($NOW + 1))
fi
elif [ "$DAY" -eq 31 ]; then
if [ "$MONTH" -eq 01 ] || [ "$MONTH" -eq 03 ] || [ "$MONTH" -eq 05 ] || [ "$MONTH" -eq 07 ] || [ "$MONTH" -eq 08 ] || [ "$MONTH" -eq 10 ]; then
CRON_NOW=$(($NOW + 170))
fi
if [ "$MONTH" -eq 12 ]; then
CRON_NOW=$(($NOW + 8870))
fi
fi
So you can see I did this crazy work around because I couldn't figure out how to use "date" to show the next days date from the one specified. I have a feeling there is some abstract awesome way to do this with "date" but I just don't know about it and can't decipher it from the man page.
I know about "date --date=xx/xx/xxxx" or "date --date=23 days ago" or whatever. I want something more like "date --date=xx/xx/xxxx minus one day" since I think trying to compute out how many days ago it was is just as hard as what I did to iterate it forward a day.
As always, much thanks to any answers. This site rocks the house yo! -Ryan