Problem number 1 is you're mixing date math with integer math. You cannot add 1 to your "0530" and expect to get the next day. For example, there is no integer "0530". There is an integer "530", however, and if you add 1 to it you will get "531". ...NOT the "0531" that you need. And, as you mentioned, adding 1 to that will not get you into June.
The problem of shell date arithmetic is fairly difficult. See
"Date math in Linux shell script?": Tech Support from Ask Dave Taylor! .
When you do your comparison, you can test for your end condition in either of two ways:
- If the current date == the end date (string comparison)
- If the current iterations number of seconds since the epoch is less than or equal to the end date's number of seconds since the epoch.
Also, here's a couple of more gotchas you need to be aware of. If you do your date math using "number of seconds since the Epoch",
- You may want your first date to actually be midnight of the first date- that is, the 0'th second of that day.
- You may want your second date to actually be 23:59:59 on that day.
This is because if you do your "begin <= end" comparison, you may be comparing 3pm on the end day to 2pm on the end day and that iteration of the script will not run.
I mention that because it's convenient to actually do the date math by:
- Convert the first date to the number of seconds since the epoch
- Increment the date by adding 86,400 (the number of seconds in a day) to the date for each iteration.
You also must be aware of when the year changes. Don't forget you may be comparing dates in January to dates in December.
-mschwage