shell脚本获得昨天的日期

时间:2021-07-02 21:53:04

前一段时间写过一个脚本,是获得当前时间前一天的日期,最近研究了下,把之前的封装成两个函数来实现,比较有逻辑性。

#判断当前的年份是否为闰年

sleapyear()
{
  r4=`expr $1 % 4`
  r100=`expr $1 % 100`
  r400=`expr $1 % 400`
  if [ r4 -eq 0 and r100 -ne 0 ]; then
    return 1
  elif [ r400 -eq 0 ]
  then
    return 1
  else
    return 0
  fi
}
#获取前一天的日期,在此函数中会调用判断闰年的函数
yesterday()
{
  day=`echo "$3 - 1"|bc`
  month=$2
  year=$1
  if [ $day -eq 0 ]; then
    month=`echo "$2 - 1"|bc`
    isleapyear $1
    leap=$?
    case $month in
      0|1|3|5|7|8|10|12 )
        day=31;;
      4|6|9|11 )
        day=30;;
      2 )
        if [ $leap -eq 1 ]; then
          day=29
        else
          day=28
        fi;
    esac
    if [ $month -eq 0 ]; then
      month=12
      year=`echo "$1 - 1"|bc`
    fi
  fi
  date=`printf "%s%02s%02s" $year $month $day`
}

#设置传入yesterday函数的参数
 set `date +%C%y\ %m\ %d`; YEAR=$1; MONTH=$2; DAY=$3

#调用yesterday,传入三个参数,分别为当前年,当前月,当前日
 yesterday $YEAR $MONTH $DAY
echo $date

打印出昨天的日期。测试机器hp-ux。