I have two variables: X and Y.
The value of X will be a date given in the format mmddyy
and I want to calculate the date preceding that date
I like Tcl for date arithmetic, even though it's clunky for shell one-liners. Using Tcl 8.5:
x=091509
y=$(printf 'puts [clock format [clock add [clock scan "%s" -format "%%m%%d%%y"] -1 day] -format "%%Y%%m%%d"]' "$x" | tclsh)
Since the -d option doesn't exists on MacOS X or FreeBSD, here is the answer for them
Retrieving a date relative to current time
date -v -1d
For your question in particular, you'll need the -j and -f flags to use a specific date
date -v -1d -j -f %m%d%y 091509 +%Y%m%d
date -d "yesterday"
~$ date -d "20090101 -1 day"
Wed Dec 31 00:00:00 CET 2008
And if you want to retrieve the date in a custom format you just throw in some format strings.
~$ date -d "2009-09-15 -1 day" +%Y%m%d
20090914
As for your conversion you may use bash substring extraction (assuming you use bash of course). This also assumes that your input is consistent and "safe".
X="091509"
Y=`date -d "${X:4:2}${X:0:2}${X:2:2} -1 day" +%Y%m%d`
echo $Y
See http://www.walkernews.net/2007/06/03/date-arithmetic-in-linux-shell-scripts/