Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations wOOdy-Soft on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

How to calculate yesterday's date in a Shell script?

Shell Scripts

How to calculate yesterday's date in a Shell script?

by  vikramkalsi  Posted    (Edited  )
Code:
# File-name: yesterday.sh
#-----------------------------------------------
# Returns date 1 day ago from the specified date 
# Current date is taken if no date is specified 
#-----------------------------------------------
# Input:		Default:
#   $1 - dd             Current day
#   $2 - mm             Current month
#   $3 - yyyy           Current year
#-----------------------------------------------

#This is how a function is defined in a 
#UNIX shell scripts

get_one_day_before_specified_date()
{
#get the command line input(date month & year)
    day=$1
    month=$2
    year=$3
 
    # if it is the first day of the month
    if [ $day -eq 01 ]
    then
        # if it is the first month of the year
        if [ $month -eq 01 ]
        then
            # make the month as 12
            month=12
 
            # deduct the year by one
            year=`expr $year - 1`
        else
            # deduct the month by one
            month=`expr $month - 1`
        fi
        
        # use cal command, discard blank lines,
        # take last field of last line,  
        # first awk  command is used to get the
        # last useful line of the calendar cmd,
        # second awk command is used to get the  
        # last field of this last useful line,
        # NF is no. of fields, 
        # $NF is value of last field

 day=`cal $month $year | awk 'NF != 0{ last = $0 }; END{ print last }' |  awk '{ print $NF }'`
    else
        # deduct the day by one
        day=`expr $day - 1`
    fi

    echo $day $month $year
}

#!/bin/ksh
if [ $# -ne 3 ]
then
    d=`date +%d`
    m=`date +%m`
    y=`date +%Y`
else
    d=$1
    m=$2
    y=$3
fi    

#Cmd line arguments are captured in a shell script 
#through $1 $2 $3, ......., $9,${10} (not $10)

# This is how we call unix user-defined functions,
# notice it is not junk123( $1, $2, $3 ) format
get_one_day_before_specified_date $d $m $y
Register to rate this FAQ  : BAD 1 2 3 4 5 6 7 8 9 10 GOOD
Please Note: 1 is Bad, 10 is Good :-)

Part and Inventory Search

Back
Top