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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值