#!/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
shell脚本工具
最新推荐文章于 2024-06-27 17:50:47 发布