shell获取当月末,以及获取前半年的月末时间

本文介绍了如何使用Shell脚本获取当前月份的最后一天日期,并且展示了获取过去六个月末日期的方法,这对于自动化报告或者定时任务中处理日期相关的问题非常有用。
#!/bin/sh
##接收传入的时间,$1表示接受外面传进来的第一个参数,$2,$3依次类推
time=$1

##获取对应时间的当月末
##1 day ago表示减去1天
##1 months表示的是本月的天数,加上本月天数
##先将传入时间变为月初,然后加一个月变为下月初,再减一天变为当月末
##``表示是Linux命令,将执行后结果赋值给变量mondayend
mondayend=`date -d "$(date -d "${time}" "+%Y%m01") 1 months 1 day ago" "+%Y%m%d"`

##将变量mondayend打印一下
echo "===本月末:"${mondayend}"==="

##有了上面的基础,可以获取更多的时间,如获取取当前时间的前半年的月末
echo "===获取当前时间的前半年的月末==="

##再定义一个变量来接收传入的第一个参数
start_day=$1
##定义一个变量来存储前半年的时间
mon_end=""
##for循环,要获取前几个月,num变为对应的数值
for ((num=1; num<=6; num++))
do	
	start_day=`date -d "$(date -d "${start_day}" "+%Y%m01") 1 day ago" "+%Y%m%d"`
	##将本身给排除掉,可以将此赋值定义在外面就不用排除了,这里只是记录一下shell里面if的写法和continue的应用
	##eq —比较两个参数是否相等
	##ne —不相等
	##lt —小于
	##le —小于等于
	##gt —大于
	##ge —大于等于
	if [ ${start_day} -eq  ${mondayend} ]
	then
		##跳出本次循环		
		continue	
	fi
	##将数值赋值给变量mon_end,${start_day}放在${mon_end}前面就是升序,放在后面就是降序	
	mon_end="${start_day} ${mon_end}"
done

echo "===前半年的月末:"${mon_end}"==="
#将前半年的月末依次打印出来
##shell支持加强型for循环,而且可以将字符串作为数组来循环,每个值通过空格分隔
for mon in ${mon_end};
do
	echo "====月末:"${mon}"==============="
done

运行结果
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值