本人在工作中Unix环境想要截取2天前的日期,无奈Unix没有date -d命令,无法截取时间,只能按时区截取yesterday的日期,经和同事沟通有了新的思路,抽时间整理一个脚本,主要用来Unix中历史日期抽取(linux 有date -d,不太需要此脚本)
具体脚本内容如下,测试环境linux HP-UX
#!/bin/bash
###############################################################################
###Description: This shell cut one month to tow month date. ###
###Author : ren.C.A.P. ###
###Version : V1.02 ###
###Date : 2020/4/1 ###
###############################################################################
date_year=`date +%Y|awk '{print $0}'`
date_month=`date +%m |awk '{printf("%02d\n", $0)}'`
date_day=`date +%d |awk '{printf("%02d\n", $0-2)}'` ##更改参数
date_month_new=`date +%m |awk '{printf("%02d\n", $0-1)}'`
date_year_new=`date +%Y|awk '{printf("%02d\n", $0-1)}'`
##判断日期是否大于0
if [ $date_day -gt 0 ];then
##正常获取日期
get_date_year=$date_year
get_date_month=$date_month
get_date_day=$date_day
else
##已经跨月,判断月份,31天月份
if [ $date_month -eq 2 ]||[ $date_month -eq 4 ]||[ $date_month -eq 6 ]||[ $date_month -eq 8 ]||[ $date_month -eq 9 ]||[ $date_month -eq 11 ]||[ $date_month -eq 1 ];then
##判断1月,需要跨年
if [ $date_month -eq 1 ];then
get_date_year=$date_year_new
get_date_month=12
get_date_day=`expr 31 + $date_day`
else
##否则年份正常输出,月份减一,输出31天月份日期,日期 上月天数减date_day。
get_date_year=$date_year
get_date_month=$date_month_new
get_date_day=`expr 31 + $date_day`
fi
##否则输出30天月份日期
elif [ $date_month -eq 5 ]||[ $date_month -eq 7 ]||[ $date_month -eq 10 ]||[ $date_month -eq 12 ];then
get_date_year=$date_year
get_date_month=$date_month_new
get_date_day=`expr 30 + $date_day`
else
##否则为date_month=3月需要判断润平
##如果date_year是闰年
if [ $[$date_year%4] -eq 0 -a $[$date_year%100] -ne 0 ]||[ $[$date_year%400] -eq 0 ];then
get_date_year=$date_year
get_date_month=$date_month_new
get_date_day=`expr 29 + $date_day`
else
get_date_year=$date_year
get_date_month=$date_month_new
get_date_day=`expr 28 + $date_day`
fi
fi
fi
get_date=$get_date_year$get_date_month$get_date_day
echo $get_date
------end