aix平台计算日期的前N天和后N天shell脚本

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

#!/usr/bin/ksh
##############################################################
##aix平台下日期加减
##$1 源日期 格式:yyyyMMdd
##$2 时间间隔  小于28的自然数
##############################################################
DateAfter(){
  ##############################################################
  if [ ! -n "$1"  ];then
   echo "Please input date(yyyyMMdd)!" 
   exit 0
  fi
   if [ ! -n "$2"  ];then
   echo "Please input  Interval!" 
   exit 0
  fi
  ##############################################################
  param1len=`expr length $1`
  if [ $param1len -ne 8 ];then
  	echo "Date Format IS WRONG,e.g yyyyMMdd"
  	exit 0
  fi
  ##############################################################
	if [  -n "$1" a -n "$2" ]; then
          month=`echo $1|cut -c 5-6`
          day=`echo $1|cut -c 7-8`
          year=`echo $1|cut -c 1-4`

          # Add 0 to month. This is a  
          # trick to make month an unpadded integer.   
          month=`expr $month + 0`  
      
          # Subtract one from the current day.   
          day=`expr $day + $2`
      
          # If the day is 0 then determine the last  
          # day of the previous month.   
          if [ $day -eq 0 ]; then  
               # Find the preivous month.   
               month=`expr $month - 1`  
               # If the month is 0 then it is Dec 31 of  
               # the previous year.   
               if [ $month -eq 0 ]; then  
                    month=12  
                    day1=31  
                    year=`expr $year - 1`  
           
               # If the month is not zero we need to find  
               # the last day of the month.   
               else
               case $month in  
                    1|3|5|7|8|10|12) day1=31;;  
                    4|6|9|11) day1=30;;  
                    2)  
                    if [ `expr $year % 4` -eq 0 a `expr $year % 100` % -ne 0  o `expr $year % 400` -eq 0 ]; then  
	                         day1=29                         	                         		
	                    else  
	                         day1=28
	                    fi   
                    ;;  
                    esac
                    day=`expr $day1 + $day` 
               fi  
          fi
          
          if [ $day -lt 0 ]; then
               # Find the preivous month.   
               month=`expr $month - 1`  
               # If the month is 0 then it is Dec 31 of  
               # the previous year.   
               if [ $month -eq 0 ]; then  
                  month=12  
                  day=`expr 31 + $day` 
                  year=`expr $year - 1`  
               # If the month is not zero we need to find  
               # the last day of the month.   
               else 
	               case $month in  
	                    1|3|5|7|8|10|12) day1=31;;  
	                    4|6|9|11) day1=30;;  
	                    2)
	                    if [ `expr $year % 4` -eq 0 a `expr $year % 100` % -ne 0  o `expr $year % 400` -eq 0 ]; then  
	                         day1=29                         	                         		
	                    else  
	                         day1=28
	                    fi  
	                 ;;  
	                 esac
	                 day=`expr $day1 + $day`
               fi
          fi
          echo "${#day}------------------------------"
          echo "${#month}-----------------------------"
          daylen=`expr length $day`
          monthlen=`expr length $month`
          if [ $daylen -lt 2 ];then
          	day=0$day
          fi
          if [ $monthlen -lt 2 ];then
          	month=0$month
          fi
          echo $year$month$day
  else
  	 date2=`date +20%y%m%d`     
      echo "$date2"
  fi
     
}
d=`DateAfter $1 $2`
cat<<BOF
#########################################
#INPUT DATE --> $1                #
#INTERVAL --> $2                        #
#RESULT DATE -->$d                #
#########################################
BOF