shell 判断月末日期

有一个需求,根据输入的时间段,在这个时间段中的是月末的日期执行脚本

解决如下:

#!/bin/bash
if [ -z $1 ]
then
echo "请输入年月日8位开始日期"
exit $E_MISSING_POS_PARAM
fi

if [ -z $2 ]
then
echo "请输入年月日8位结束日期"
exit $E_MISSING_POS_PARAM
fi

if [ $1 -gt $2 ]
then
echo "后面的日期需大于前面的日期"
exit $E_MISSING_POS_PARAM
fi

datebeg=$1
dateend=$2

set -e

beg_s=` date -d "$datebeg" +%s`
end_s=` date -d "$dateend" +%s`
while((end_s>=beg_s))
do
    incdate=`date -d @$beg_s +%Y%m%d`
    y=`date -d ''$incdate' 0 days'  +%Y`
    m=`date -d ''$incdate' 0 days'  +%m`
    d=`date -d ''$incdate' 0 days'  +%d`
    if [ $(date -d ''$incdate' 0 days'  +%d) -eq $(cal $m $y |xargs|awk '{print $NF}') ]  
       then  
          echo "是月底,执行该天:$incdate"
          #请属于需要执行的命令

       else
          echo "不是月底,跳过该天:$incdate"
    fi
((beg_s+=86400))
done

运行脚本:

[root@master]# sh lastday.sh 20190620 20190801
不是月底,跳过该天:20190620
不是月底,跳过该天:20190621
不是月底,跳过该天:20190622
不是月底,跳过该天:20190623
不是月底,跳过该天:20190624
不是月底,跳过该天:20190625
不是月底,跳过该天:20190626
不是月底,跳过该天:20190627
不是月底,跳过该天:20190628
不是月底,跳过该天:20190629
是月底,执行该天:20190630
不是月底,跳过该天:20190701
不是月底,跳过该天:20190702
不是月底,跳过该天:20190703
不是月底,跳过该天:20190704
不是月底,跳过该天:20190705
不是月底,跳过该天:20190706
不是月底,跳过该天:20190707
不是月底,跳过该天:20190708
不是月底,跳过该天:20190709
不是月底,跳过该天:20190710
不是月底,跳过该天:20190711
不是月底,跳过该天:20190712
不是月底,跳过该天:20190713
不是月底,跳过该天:20190714
不是月底,跳过该天:20190715
不是月底,跳过该天:20190716
不是月底,跳过该天:20190717
不是月底,跳过该天:20190718
不是月底,跳过该天:20190719
不是月底,跳过该天:20190720
不是月底,跳过该天:20190721
不是月底,跳过该天:20190722
不是月底,跳过该天:20190723
不是月底,跳过该天:20190724
不是月底,跳过该天:20190725
不是月底,跳过该天:20190726
不是月底,跳过该天:20190727
不是月底,跳过该天:20190728
不是月底,跳过该天:20190729
不是月底,跳过该天:20190730
是月底,执行该天:20190731
不是月底,跳过该天:20190801

注释:只需要在输入你需要执行的命令即可。

posted @ 2019-08-14 09:25  醉城、  阅读(2313)  评论(0编辑  收藏  举报