want to create directory with the previous date

I need some help to complet the below script:

DATE1=`date "+%d"`

#DATE2=`expr $DATE1 - 1`

#DATE3=$DATE2`date "+%m%y"`

DATE4=`date "+%a"`

if [ $DATE4 = Mon ]; then

    DATE2=\`expr $DATE1 - 3\`

else

    DATE2=\`expr $DATE1 - 1\`

fi

cd /data/builds/612hf8/SAS/retail/plan_61/scripts/meserver

DATE3=$DATE2`date "+%m%y"`

mkdir $DATE3

echo "dir created"

mv *.log $DATE3

echo "logs moved to $DATE3 folder"

The above script creates the directory with the previous day date.

along with the above script output, i need how to create month end directories that means 30th or 31st of date. if suppose date is 1st of any month, this script not creating directory of the previous date that is 30th or 31st.

Please some body help me to complete above script.

I would appreciate your help.

Thanks,
Sridhar.

Aha - date arithmetic.
You could set up an array with 28/29/30/31 days lookups for the months and leapyear calculations.

I once wrote a C program called timecalc. Here it is, if it's of any use:

/*
 * Name:
 *	timecalc.c
 *
 * Purpose:
 *	Time calculations.
 #
 * Usage:
 *	timecalc [+|-]n [seconds|minutes|hours|days|weeks]
 *
 * History:
 *	050713	GZB	Original.
 *
 */

static char *gsVersion="@(#)timecalc.c GZB 050713";

#include <time.h>
#include <stdlib.h>
#include <sys/time.h>

int gbDebug=0;
int gbVerbose=0;
double gfTimeDiff=0;	/* What to change the time by. */
int giTimeDiff=0;	/* What to change the time by. */
int giTimeUnits=1;	/* Time units scaled to seconds. */
char gsDateSep[10]="/";	/* Date separator. */
char gsTimeSep[10]=":";	/* Time separator. */
char gsDtoTSep[10]=" ";	/* Separator between date & time. */


Usage()
{
	printf("usage: timecalc [+|-]n [seconds|minutes|hours|days|weeks]\n");
	exit(1);
}


CommandArgs(argc,argv)
	int argc;
	char **argv;
{
	int i;

	if (gbDebug) printf("CommandArgs()\n");

	for ( i=1; i<argc; i++ )
	{
		if (gbDebug) printf("%d/%d\n", i, argc);

		switch (*argv)
		{
			case '+': gfTimeDiff=atof(argv+1); break;
			case '-': gfTimeDiff=-atof(argv+1); break;
			case 's': giTimeUnits=1; break;
			case 'm': giTimeUnits=60; break;
			case 'h': giTimeUnits=60*60; break;
			case 'd': giTimeUnits=60*60*24; break;
			case 'w': giTimeUnits=60*60*24*7; break;
			case 'D': gbDebug=1; break;
			case 'V': gbVerbose=1; break;
			/* case 'T': *gsDateSep='\0'; *gsTimeSep='\0'; break; */
			case 'T': strcpy(gsDateSep,""); strcpy(gsTimeSep,""); break;
			default: Usage(); break;
		}
	}

	/*
	giTimeDiff *= giTimeUnits;
	if (gbDebug) printf( "%d %d\n", giTimeDiff, giTimeUnits);
	*/

	giTimeDiff = (int)(gfTimeDiff * (double)giTimeUnits);
	if (gbDebug) printf( "%d %f %d\n", giTimeDiff, gfTimeDiff, giTimeUnits);
}


PrintTime(tp)
	struct tm *tp;
{
	printf("%04d%s%02d%s%02d%s%02d%s%02d%s%02d",
		tp->tm_year+1900,
		gsDateSep,
		tp->tm_mon+1,
		gsDateSep,
		tp->tm_mday,
		gsDtoTSep,
		tp->tm_hour,
		gsTimeSep,
		tp->tm_min,
		gsTimeSep,
		tp->tm_sec
		);
}


main(argc,argv)
	int argc;
	char **argv;
{
	time_t	t;
	time_t	tnew;
	struct tm *tp;

	t = (time_t)time((time_t *)0);
	if (gbDebug) printf("Seconds since epoch = %d\n", t);

	CommandArgs(argc,argv);

	tnew = t + giTimeDiff;
	if (gbDebug) printf("Seconds adjusted by %d = %d\n", giTimeDiff, tnew);

	if (gbVerbose)
	{
		tp = localtime(&t);
		PrintTime(tp);
		printf("\n");
		/* printf(" -> "); */
	}

	tp = localtime(&tnew);
	PrintTime(tp);
	printf("\n");
}

All usual disclaimers, non-warranties, and so-on apply!

Alternatively, you could try and make some clever use of the "cal" (calendar) program.

Check the man page of date, if the -d or --date is suported you can do something like:

date --date='1 day ago'

Regards

you can get the previous day's date with following command:

DATE_STAMP=`TZ=CST+24 date +%y%m%d`

Try the following link:

Hi,

Use the following command to get the previous day's date.

DATE_STAMP=`TZ=CST+24 date +%y%m%d`

Thanks Sandy.... its working.

but i am not understanding what is TZ=CST+24, i never seen in the Date manual page also.

Thanks once again.

Regards,
SRdhar.

The time-zone "trick" is unreliable. Take a look at the FAQs.

TRY DATECALC ( nicely documented/created by Perderabo )

http://www.unix.com/answers-frequently-asked-questions/13785-yesterdays-date-date-arithmetic.html

Please go thru it...and use it as your wish....