The UNIX and Linux Forums  
Hello and Welcome from United States to the UNIX and Linux Forums! Thank You for Visiting and Joining Our Global Community.

Go Back   The UNIX and Linux Forums > Top Forums > Shell Programming and Scripting
.
google unix.com



Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here.

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Create Year directory, date subdirectory and archive the file madhunk UNIX for Dummies Questions & Answers 2 12-13-2007 11:25 AM
Specify a previous date as start date in shell script ritzwan0 Shell Programming and Scripting 2 09-25-2006 05:58 PM
Directory create date Bab00shka UNIX for Dummies Questions & Answers 2 06-29-2005 10:42 AM
create directory named current date flowrats UNIX for Dummies Questions & Answers 2 07-30-2002 11:26 PM
How to find Previous date and Coming date arunava_maity UNIX for Dummies Questions & Answers 2 05-24-2001 11:41 AM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Search this Thread Rate Thread Display Modes
  #1 (permalink)  
Old 11-18-2007
sridhusha sridhusha is offline
Registered User
  
 

Join Date: Sep 2007
Posts: 16
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.
  #2 (permalink)  
Old 11-18-2007
prowla prowla is offline
Read Only
  
 

Join Date: Nov 2007
Posts: 165
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:
Code:
/*
 * 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[i])
		{
			case '+': gfTimeDiff=atof(argv[i]+1); break;
			case '-': gfTimeDiff=-atof(argv[i]+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.
  #3 (permalink)  
Old 11-18-2007
Franklin52 Franklin52 is offline Forum Staff  
Moderator
  
 

Join Date: Feb 2007
Posts: 4,294
Check the man page of date, if the -d or --date is suported you can do something like:

date --date='1 day ago'

Regards
  #4 (permalink)  
Old 11-18-2007
sandy0077's Avatar
sandy0077 sandy0077 is offline
Registered User
  
 

Join Date: Aug 2007
Location: UK
Posts: 10
you can get the previous day's date with following command:

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


Try the following link:

Getting yesterday DATE
  #5 (permalink)  
Old 11-18-2007
sandy0077's Avatar
sandy0077 sandy0077 is offline
Registered User
  
 

Join Date: Aug 2007
Location: UK
Posts: 10
Post

Hi,

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

DATE_STAMP=`TZ=CST+24 date +%y%m%d`
  #6 (permalink)  
Old 11-19-2007
sridhusha sridhusha is offline
Registered User
  
 

Join Date: Sep 2007
Posts: 16
want to create directory with the previous date

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.
  #7 (permalink)  
Old 11-19-2007
Ygor's Avatar
Ygor Ygor is offline Forum Staff  
Moderator
  
 

Join Date: Oct 2003
Location: -31.96,115.84
Posts: 1,407
The time-zone "trick" is unreliable. Take a look at the FAQs.
Closed Thread

Bookmarks

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On




All times are GMT -4. The time now is 04:13 PM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright ©2007 - 2008, PixelFX Studios
The UNIX and Linux Forums Content Copyright ©1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant URLs by vBSEO 3.2.0