shell脚本工具

#!/bin/bash
#参数输入:开始结束日期;日期格式:20190101;
#功能:跑历史数据脚本时给定时间内的每天日期等的获取
#author:Tengyue_hui
#date:20200113
#函数介绍:
	######01:时间范围内连续日期列,闭区间连续
	######02:时间范围内连续月初,闭区间连续
	######03:时间范围内连续月末,闭区间连续
	######04:时间范围内连续周一,闭区间连续
	######05:时间范围内连续周末,闭区间连续




#01时间范围内连续日期列,闭区间连续
#######输入参数
start='20191201'
end='20200113'
###############

# 定义数组存储连续日期列
declare -a DATE_ARRAY_date
#生成连续日期列的函数
function genAlldate
{
	#开始时间记录游标
	START_DAY_TMP=$start
	#天数记录参数
	I_DATE_ARRAY_INDX=0
	while (( "${START_DAY_TMP}" <= "${end}" )); do
		#插入数据
		DATE_ARRAY_date[${I_DATE_ARRAY_INDX}]=${START_DAY_TMP}
		#插入后游标加一天
		START_DAY_TMP=`date -d "$START_DAY_TMP 1 day" +%Y%m%d`
		((I_DATE_ARRAY_INDX++))
	done
} 
#调用函数生成日期序列数组
genAlldate
#日期序列数组
echo -e "日期序列数组"
for do_date in ${DATE_ARRAY_date[@]};
do
	###########################每日脚本替换位置###########################
	echo ${do_date}
done




#02时间范围内连续月初,闭区间连续
#######输入参数
start='20191201'
end='20200113'
###############

# 定义数组存储连续月初日期
declare -a DATE_ARRAY_monthstart

#定义生成连续月初日期的函数
function genAllmonth_start
{
	#天数记录
	I_DATE_ARRAY_INDX=0
	#分别初始化开始结束时间的月初日期
	if [ $(date -d ${start} +"%d") = '01' ];then
		cur_monthstart=$(date -d ${start} +"%Y%m01")
	else
		cur_monthstart=$(date -d "${start} 1 month" +"%Y%m01")
	fi
	cur_monthend=$(date -d ${end} +"%Y%m01")
	while (( "${cur_monthstart}" <= "${cur_monthend}" )); do
		#日期插入数组
		DATE_ARRAY_monthstart[${I_DATE_ARRAY_INDX}]=${cur_monthstart}
		#往前一个月,返回时间戳
		cur_monthstart=$(date -d "${cur_monthstart} 1 month" +"%Y%m01")
		((I_DATE_ARRAY_INDX++))
	done
}
#调用函数生成月初序列数组
genAllmonth_start
#月初序列数组
echo -e "月初序列数组"
for do_date in ${DATE_ARRAY_monthstart[@]};
do
	###########################每日脚本替换位置###########################
	echo ${do_date}
done



#03时间范围内连续月末,闭区间连续
#######输入参数
start='20191201'
end='20200113'
###############
# 定义数组存储连续月末日期
declare -a DATE_ARRAY_monthend
#定义生成连续月末日期的函数
function genAllmonth_end
{
	start_temp=${start}
    #天数记录
    I_DATE_ARRAY_INDX=0
	#分别初始化开始结束时间对应的月末
	cur_monthstart=$(date -d "$(date -d "${start} 1 month" +"%Y%m01") 1 day ago" +%Y%m%d)
	if [ $(date -d "$(date -d "${end} 1 month" +"%Y%m01") 1 day ago" +%Y%m%d) = $end ];then
		cur_monthend=$(date -d "$(date -d "${end} 1 month" +"%Y%m01") 1 day ago" +%Y%m%d)
	else
		cur_monthend=$(date -d "$(date -d ${end} +"%Y%m01") 1 day ago" +%Y%m%d)
	fi
	#循环找出所有月末
	while (( ${cur_monthstart} <= ${cur_monthend} )); do
		#月末插入数组
		DATE_ARRAY_monthend[${I_DATE_ARRAY_INDX}]=${cur_monthstart}
		#后推两个月的月初,时间戳
		cur_monthstart=$(date -d "${cur_monthstart} 45 days" +"%Y%m01")
		#后推两个月的基础上再往前一个月,相当于值往后推了一个月,得到月末
		cur_monthstart=$(date -d "${cur_monthstart} 1 day ago" +%Y%m%d)
		((I_DATE_ARRAY_INDX++))
	done
}
#调用函数生成月末序列数组
genAllmonth_end
#月末序列数组
echo -e "月末序列数组"
for do_date in ${DATE_ARRAY_monthend[@]};
do
	###########################每日脚本替换位置###########################
	echo ${do_date}
done




#04时间范围内连续周一,闭区间连续
#######输入参数
start='20191201'
end='20200113'
###############
# 定义数组存储连续周一日期
declare -a DATE_ARRAY_weekstart
#定义生成连续周一日期的函数
function genAllmonday
{
    #天数记录
    I_DATE_ARRAY_INDX=0
	#获取开始结束日期分别是当周的第几天
	start_day_whichday=$(date -d $start +%w)
	end_day_whichday=$(date -d $end +%w)
	#若是周末,将第0天设置为第7天
	if [ $start_day_whichday = 0 ];then
		start_day_whichday=7
	fi
	#分别获取开始时间和结束时间的周一
	start_day_monday=`date -d "$start -$[${start_day_whichday}-1] days" +%Y%m%d`
	end_day_monday=`date -d "$end -$[${end_day_whichday}-1] days" +%Y%m%d`
	#若开始时间恰好是周一,则不变,若不是,返回下一周周一
	if [ $start_day_whichday != 1 ];then
		start_day_monday=`date -d "$start_day_monday 7 days" +%Y%m%d`
	fi
	while (( ${start_day_monday} <= ${end_day_monday} )); do
		DATE_ARRAY_weekstart[${I_DATE_ARRAY_INDX}]=${start_day_monday}
		start_day_monday=`date -d "$start_day_monday 7 days" +%Y%m%d`
		((I_DATE_ARRAY_INDX++))
	done
}
#调用生成连续周一的函数
genAllmonday
#周一序列数组
echo -e "月末序列数组"
for SINGLE_DAY in ${DATE_ARRAY_weekstart[@]};
do
	###########################每日脚本替换位置###########################
	echo ${SINGLE_DAY}
done





#05时间范围内连续周末,闭区间连续
#######输入参数
start='20191201'
end='20200113'
###############
# 定义数组存储连续周日日期
declare -a DATE_ARRAY_weekend
#定义生成连续周日日期的函数
function genAllsunday
{
    #天数记录
    I_DATE_ARRAY_INDX=0
	#获取开始结束日期分别是当周的第几天
	start_day_whichday=$(date -d $start +%w)
	end_day_whichday=$(date -d $end +%w)
	#若是周末,将第0天设置为第7天
	if [ $start_day_whichday = 0 ];then
		start_day_whichday=7
	fi
	#分别获取开始时间和结束时间的周日
	start_day_monday=`date -d "$start -$[${start_day_whichday}-1] days" +%Y%m%d`
	end_day_monday=`date -d "$end -$[${end_day_whichday}-1] days" +%Y%m%d`
	start_day_sunday=`date -d "$start_day_monday 6 days" +%Y%m%d`
	end_day_sunday=`date -d "$end_day_monday 6 days" +%Y%m%d`
	#若结束时间恰好是周日,则不变,若不是,返回上一周周日
	if [ $end_day_whichday != 7 ];then
		end_day_sunday=`date -d "$end_day_sunday 7 days ago" +%Y%m%d`
	fi
	while (( ${start_day_sunday} <= ${end_day_sunday} )); do
		DATE_ARRAY_weekend[${I_DATE_ARRAY_INDX}]=${start_day_sunday}
		start_day_sunday=`date -d "$start_day_sunday 7 days" +%Y%m%d`
		((I_DATE_ARRAY_INDX++))
	done
}
#调用连续周末日期的序列数组
genAllsunday
#周末序列数组
echo -e "月末序列数组"
for SINGLE_DAY in ${DATE_ARRAY_weekend[@]};
do
		###########################每日脚本替换位置###########################
	echo ${SINGLE_DAY}
done







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值