need urgent help

Programname=$(basename $0)  # While scheduling to cron, program name is needed.

Usage="Usage: $Programname [-a mtDelete/mtBackup] [-l/-L Backuplocation] [-t now/cron/hh:mm]"

IsCronJob=1     # default, script will run at now.
isBackUp=0	# default, it will take back up.
lFlag=0		# it is optional. default value is zero
LFlag=0		# it is optional. dfault value is zero
ERR=1
 
LOGDIR="$INTAS_INSTALL_DIR/envsw/logs"
BackupLocation="$INTAS_INSTALL_DIR/mt_backup"

mtlogFile="/tmp/mtclean.log.$$"

if [[ $# -lt 1 ]];
then
	echo "$Usage"
	return $ERR
fi

if [[ ! -d $BackupLocation ]];
then
	mkdir -p $BackupLocation 2>/dev/null
fi

while  getopts a:l:L:t: optvar
do
	case $optvar in
	a) action="$OPTARG"
		if [[ $action = "mtBackup" ]];
		then
			isBackUp=1
		fi
		;;
	l) BackupLocation="$OPTARG"
		if [[ $lFlag -eq 1 ]]; then
			echo "Either option l or L should be given to $Programname"
			echo "$Usage"
			echo "$Programname is terminated"
			return $ERR;
		fi
		if [[ $isBackUp -eq 1 ]];
		then	
			givenPath="$BackupLocation"
			if [[ ! -d $BackupLocation ]];
			then
				echo "Non-existant directory specified"
				
				mkdir -p $BackupLocation >/dev/null 2>&1
	                        if [[ $? = 0 ]];
        	                then
					echo "$Prograname creates the dirctory $BackupLocation"
				else
					echo "$Programname could not able to create the directory $BackupLocation"
					return $ERR
				fi
			else
				echo "Backup directory already exists"
			fi
			lFlag=1
			Llcron=l
		else
			echo "$Programname is executed with -l option without action mtBackup"
			echo "$Usage"
			echo "$Programname is terminated"
			return $ERR
		fi
		;;
	L) BackupLocation="$OPTARG"
		if [[ $LFlag -eq 1 ]]; then
			echo "Either option l or L should be given to $Programname"
			echo "$Usage"
			echo "$Programname is terminated"
			return $ERR;
		fi
		if [[ $isBackUp -eq 1 ]];
		then
		        givenPath="$BackupLocation"
			BackupLocation=$BackupLocation/backup$(date +%w)
			if [[ ! -d $BackupLocation ]];
			then
				echo "Non-existant directory $BackupLocation"
				mkdir -p $BackupLocation >/dev/null 2>&1
	                        if [[ $? = 0 ]];
        	                then
					echo "$Prograname creates the dirctory $BackupLocation"
				else
					echo "$Programname could not able to create the directory $BackupLocation"
					return $ERR
				fi
			else
				echo "Backup directory $BackupLocation is already exists"
			fi
			lFlag=1
			Llcron=L
		else
			echo "$Programname is executed with -L option without action mtBackup"
			echo "$Programname is terminating"
			return $ERR;
		fi
		;;
	t) WhentoRun="$OPTARG"
		#echo "$WhentoRun"
		if [[ $WhentoRun = "cron" ]];
		then
			IsCronJob=1
			echo "$Programname is running from cron"
		elif [[ $WhentoRun = "now" ]];
		then
			IsCronJob=1
			echo "$Programname starts Now"
		else
			if /bin/echo $WhentoRun | egrep '^[0-9]{1,2}:[0-5][0-9]$' >/dev/null; then
	                	echo "$Programname is scheduled to $WhentoRun at cron"
				hour=$(/bin/echo $WhentoRun | cut -d: -f1)
				minute=$(/bin/echo $WhentoRun | cut -d: -f2)
				IsCronJob=0
			else
                        	echo "Incorrect time format, time must be in HH:MM format"
                        	return $ERR
                	fi
		
		fi
		;;
	*) echo $Usage
	   return $ERR 
	  	;;
	esac
done

if [[ ! -w $BackupLocation ]];
then
	echo "$BackupLocation is not writable"
	return $ERR;
fi

if whence $Programname >/dev/null; then
        : We found this program in the path
else
        echo "Unable to locate $Progname in the PATH, check the .kshrc for correctness"
	return $ERR
fi

cd $LOGDIR
if [[ $? != 0 ]]; 
then
        echo "Unable to cd to $INTAS_INSTALL_DIR/envsw, exiting..."
	return $ERR
fi

if [[ ! -d $LOGDIR && -w $LOGDIR ]];
then
	echo "$LOGDIR directory does not exist or not writable."
	echo "Please check the user permission"
	return $ERR
fi


# If mtclean is exceuted from cron or with option now, we can skip below scheduling part.
if [[ $IsCronJob -eq 0 ]]; 
then
        if (crontab -l 2>&1 1>/dev/null | grep 'not authorized'); 
	then
                echo "Unable to use cron, contact your system administrator"
                echo "Check that $(whoami) has an entry in cron.allow"
                return $ERR;
 	else
		cronfile="crontab"	
		cronfile="$INTAS_INSTALL_DIR/envs/tmp/cur_crontab$$"
	        crontab -l 2>&1 | grep -v '^crontab' >$cronfile
        	if grep "$Programname .* cron .*" $cronfile >/dev/null; then
                	tmpvar=$(grep -v "$Progname .* cron .*" $cronfile)
                	echo "$tmpvar" >$cronfile
        	fi

		#echo "Cron: $cronfile"
		echo "$minute $hour" '* * *' ". ~/.kshrc; $(whence $Programname) -a $action -$Llcron $givenPath -t cron >>$mtlogFile" >> $cronfile
        fi
	crontab $cronfile >/dev/null 2>&1
        if crontab -l | diff - $cronfile >/dev/null; then
                if [[ $WhenToRun != 24:00 ]]; then
                        echo crontab has been installed correctly
                else
			echo "Error in crontab entry"
		fi
	else
		echo "Error in installing crontab"
	fi
else
	curmonth=$(date +%b)
	curdate=$(echo "$(date +%c)" | cut -d' ' -f3)

	if [[ $curdate = "" || $curdate = " " ]];
	then
		curdate=$(echo "$(date +%c)" | cut -d' ' -f4)
		today="$curmonth  $curdate"
	else
		today="$curmonth $curdate"
			
	fi

	FileList=$(find . -type f -name "*")	# List all the files.
	
	echo "Starting moving/removing files from $LOGDIR"
        extrafiles1=$(ls mt.*.*.*.* 2>/dev/null) 
	extrafiles2=$(ls *core* 2>/dev/null)
	for file in $FileList
	do
		if [[ $(ls -l $file 2>/dev/null) = *$today* ]]; 
		then
			echo "Skips $file file. It is today's file"
			cp $file $BackupLocation 2>/dev/null
			cat /dev/null >$file
			continue
					        
		fi
	        
		if [[ $isBackUp -eq 1 ]];
		then
			mv $file $BackupLocation 2>/dev/null
			
		else
			rm $file $BackupLocation 2>/dev/null
                        
		fi
	done

when i am running the script it is not throwing any error but not giving me the desired output for the one case that is--

mt_clean -a mtbackup
or
mt_clean -a mtBackup

first of all it is taking both without displaying any error and taking the doing some weird thing which i do not want.
first of all it should display a message that mtbackup is specified without -l/-L option.

can anybody help me out in this.

Thanks

Put a "set -x" command at the top of the script and run it. You should now be able to debug the executed code and find where is the problem.

yes that is also possible with this-
ksh -x "filename"

I will make atry,can you please have a look too and suggest me something if you find anything wrong.I will apperciate your help.

The actual output i am getting is--

mt_clean -a mtBackup
Starting moving/removing files from /intasmut2/envsw/logs
Skips ./sage_db_clean_up.result file. It is today's file
Skips ./mt.log.8882.-5 file. It is today's file
Skips ./sage.log.5 file. It is today's file
Skips ./mt.log.8882.-6 file. It is today's file
Skips ./Trace28482main1 file. It is today's file
Skips ./dispatcher.log.8881.-6 file. It is today's file
Skips ./Trace28591main1 file. It is today's file
mt_clean is completed suffessfully

it should not do it instead it should display the the Usage and come out if any location is not specified.
Thanks

Here how i can set the value of isBackup,because of this only the problem is coming.I need help in seting the value of this variable.

After the case...esac statements end and before the while loops ends, check for the following:
If action flag is set, and if location flag is not provided, then print usage.

I see that you handle the location flags -l and -L separately. I dont see any difference in them except for BackupLocation=$BackupLocation/backup$(date +%w) in the -L set.
You can do this instead

case $optvar in 
a)...
l|L)
  if [ flag is L ] ; then
    BackupLocation=$BackupLocation/backup$(date +%w)
  endif
t)...

Hi vino,

i have changed the script a bit and now for
mt_clean -a mtBackup

it is showing me the desired output..

but for the delete option ie mtDelete,i need not to give any location,it will by defualt delete the files from the default location.

When i ran this

mt_clean -a mtDelete

it is showing me the same output as for the above ie--

webmut2@france>mt_clean -a mtDelete
Either option l or L should be given to mt_clean
Usage: mt_clean [-a mtDelete/mtBackup] [-l/-L Backuplocation] [-t now/cron/hh:mm]
mt_clean is terminated

your suggestions are required.

So what did you change ?

I tell u the changes--

For this line:

while  getopts a:l:L:t: optvar

add a line on top, like this:

Lflag=1
while  getopts a:l:L:t: optvar

Then, for the l) and L) options, changed this part:

if [[ $lFlag -eq 1 ]]; then
		echo "Either option l or L should be given to $Programname"
		echo "$Usage"
		echo "$Programname is terminated"
                                return $ERR;
fiif [[ $lFlag -eq 1 ]]; then
		echo "Either option l or L should be given to $Programname"
		echo "$Usage"
		echo "$Programname is terminated"
                                return $ERR;
fi

to this:

 
lFlag=0lFlag=0

Then, after this part (the end of getopts):

*) echo $Usage
	   return $ERR 
	  	;;
	esac
done*) echo $Usage
	   return $ERR 
	  	;;
	esac
done
*) echo $Usage
	   return $ERR 
	  	;;
	esac
done
if [[ $lFlag -eq 1 ]]; then
		echo "Either option l or L should be given to $Programname"
		echo "$Usage"
		echo "$Programname is terminated"
                                return $ERR;
fi*) echo $Usage
	   return $ERR 
	  	;;
	esac
done
if [[ $lFlag -eq 1 ]]; then
		echo "Either option l or L should be given to $Programname"
		echo "$Usage"
		echo "$Programname is terminated"
                                return $ERR;
fi

This is the changes which i did.its working fine for
mt_clean -a mtBackup
and rest of the usage of the script,

but when i am trying
mt_clean -a mtDelete

its doing the same thing but it should not because for mtDelete no location i srequired.I need urgent help buddy,running out of schedule.If any doubt tell me i will try to clarify that.

Thanks

Why dont you enhance your condition to check the flag for the required action then proceed accordingly ?

And yes, I dont think the mention of the word 'urgent' in your post would actually help you get the solution faster.

I have attached my script,if you want to have a look on that.This will give a better picture.

I was able to resolve the problem.Thanks all you guys for your valueable inputs.

Thanks.