shell 之 每月最后一天的计算及cron设置

1, 计算方法

#!/bin/bash

# month.lastday.sh

# 指定月份,必须是 YYYYMM 格式
if [[ $1 == "" ]]; then
    # 未指定,默认当月
    S_MTH=`date "+%Y%m"`
else
    S_MTH=$1
fi

# 第一种方法
## 原理:打印月历、参数化、取最后一列
## 解析日期字符串
S_YEAR=${S_MTH:0:4}
S_MONTH=${S_MTH:4:2}

S_LAST_DAY=`cal $S_MONTH $S_YEAR | xargs | awk '{print $NF}'`
echo $S_MTH$S_LAST_DAY

# 第二种方法
## 原理: 指定月份的下月1日,减1天,即为上月最后一天
S_NEXT_MTH_FIRST_DAY=`date -d "${S_MTH}01 1 months" "+%Y%m%d"`
S_LAST_DAY=`date -d "-d $S_NEXT_MTH_FIRST_DAY -1 days" "+%Y%m%d"`
echo $S_LAST_DAY

程序输出

[ossNokia@bo-interface02 ~]$ ./month.lastday.sh
20200731
20200731
[ossNokia@bo-interface02 ~]$ ./month.lastday.sh 202006
20200630
20200630
[ossNokia@bo-interface02 ~]$ ./month.lastday.sh 202012
20201231
20201231
[ossNokia@bo-interface02 ~]$ ./month.lastday.sh 201901
20190131
20190131
[ossNokia@bo-interface02 ~]$ ./month.lastday.sh 202002
20200229
20200229
[ossNokia@bo-interface02 ~]$ ./month.lastday.sh 201902
20190228
20190228
[ossNokia@bo-interface02 ~]$

2, cron设置

59 23 28-31 * * /home/root/run.month.lastday.task.sh

3, 任务程序

#!/bin/bash

# run.month.lastday.task.sh

# 第一种方法
S_MONTH_YEAR=`date "+%m %Y"`
if [[ `date "+%d"` == `cal $S_MONTH_YEAR | xargs | awk '{print $NF}'` ]]; then
    # 这里编写你自己的功能代码
    df -Th
fi

# 第二种方法
S_NEXT_MTH_FIRST_DAY=`date -d "1 months" "+%Y%m%d"`
if [[ `date "+%d"` == `date -d "-d $S_NEXT_MTH_FIRST_DAY -1 days" "+%d"` ]]; then
    # 这里编写你自己的功能代码
    df -Th
fi

你可能感兴趣的:(开船)