UNIX Shell Script to Calculate Tomorrow’s Date
A couple of readers, upon reading this article to calculate yesterday’s date in a shell script, have requested for a similar script that can be used to calculate tomorrow’s date.
Even though such a script is quite straight forward to write, many people seem to be have problem with the leap year calculations. Anway, I have managed to come up with a script to help everyone. Read on.
If you are running Linux, it’s highly likely that you have a GNU version of the date command installed. With GNU date, you can get tomorrow’s date quite easily (without the help of any shell script) by running it as follows:
[ibrahim@anfield ~]$ date -d "+1 day" Thu Oct 8 06:26:25 PDT 2009
If you are running a commercial UNIX distribution instead of Linux, chances are that the date command will not support the ‘-d’ option. The script below can be used on such platforms to calculate tomorrow’s date instead. Save the following script to a file called tomorrow, chmod to 755 and copy it to a directory in your PATH.
#!/bin/sh
#
# Script to calculate tomorrow's date with custom output date format
#
# Author: ibrahim - www.digitalinternals.com
#
# default output format
defaultof="%Y%m%d"
# check for input format, else use default format,
# refer to 'man date' for help on format
of=$defaultof
[ $# -eq 1 ] && of="$1"
# get today's date
y=`date '+%Y'`
m=`date '+%m'`
d=`date '+%d'`
#check for max number of days in current month
days=31
if [ $m -eq 4 ] || [ $m -eq 6 ] || [ $m -eq 9 ] || [ $m -eq 11 ] ; then
days=30
fi
# check for leap year if feb
if [ $m -eq 2 ]; then
days=28
leap1=`expr $y % 4`
leap2=`expr $y % 100`
leap3=`expr $y % 400`
if [ $leap1 -eq 0 ] ; then
if [ $leap2 -gt 0 ] || [ $leap3 -eq 0 ] ; then
days=29
fi
fi
fi
# increment date
if [ $d -eq $days ]; then
d=1
m=`expr $m + 1`
if [ $m -eq 13 ]; then
m=1
y=`expr $y + 1`
fi
else
d=`expr $d + 1`
fi
date -d "$y-$m-$d" +"$of"
Below are some examples on how the script can be called.
[ibrahim@anfield ~]$ date Wed Oct 7 06:36:45 PDT 2009 [ibrahim@anfield ~]$ tomorrow 20091008 [ibrahim@anfield ~]$ tomorrow "%c" Thu 08 Oct 2009 12:00:00 AM PDT [ibrahim@anfield ~]$ tomorrow "%Y-%m-%d" 2009-10-08
| Tags | : date, linux, shell-script, tomorrow, unix |








Thanks for this wonderful script!
Nice little script.