上篇总结了一些常用的函数,这篇写一个经常会用到的,与时间有关的应用场景:
给一个起始时间和结束时间,遍历中间的每一天,用于文件名组成部份。
直接上代码:
#!/bin/bash@H_403_8@
# iterate day between begindate and enddate@H_403_8@
# @H_403_8@
get_seconds_by_date@H_403_8@@H_403_8@()
{
if@H_403_8@ [ "$1@H_403_8@"@H_403_8@ ]; then@H_403_8@
date -d@H_403_8@ "$1@H_403_8@"@H_403_8@ +%s
else@H_403_8@
date +%s
fi@H_403_8@
}
get_date_by_seconds@H_403_8@@H_403_8@()
{
date -d@H_403_8@ "1970-01-01 UTC $1@H_403_8@ seconds"@H_403_8@ +%Y%m%d
}
beginsec=$(get_seconds_by_date "$1@H_403_8@"@H_403_8@)
endsec=$(get_seconds_by_date "$2@H_403_8@"@H_403_8@)
curr=$beginsec@H_403_8@
while@H_403_8@ [ $curr@H_403_8@ -le $endsec@H_403_8@ ];
do@H_403_8@
get_date_by_seconds "$curr@H_403_8@"@H_403_8@
curr=$((curr+24@H_403_8@*60@H_403_8@*60@H_403_8@))
done@H_403_8@
测试命令
root@ADT:~# bash test.sh 2017-08-30 2017-09-30@H_403_8@
20170830@H_403_8@
20170831@H_403_8@
20170901@H_403_8@
20170902@H_403_8@
20170903@H_403_8@
20170904@H_403_8@
20170905@H_403_8@
20170906@H_403_8@
20170907@H_403_8@
20170908@H_403_8@
20170909@H_403_8@
20170910@H_403_8@
20170911@H_403_8@
20170912@H_403_8@
20170913@H_403_8@
20170914@H_403_8@
20170915@H_403_8@
20170916@H_403_8@
20170917@H_403_8@
20170918@H_403_8@
20170919@H_403_8@
20170920@H_403_8@
20170921@H_403_8@
20170922@H_403_8@
20170923@H_403_8@
20170924@H_403_8@
20170925@H_403_8@
20170926@H_403_8@
20170927@H_403_8@
20170928@H_403_8@
20170929@H_403_8@
20170930@H_403_8@
#另一个简单的方法@H_403_8@
#! /bin/sh@H_403_8@
date=`date -d@H_403_8@ "+0 day $1@H_403_8@"@H_403_8@ +%Y%m%d`
enddate=`date -d@H_403_8@ "+1 day $2@H_403_8@"@H_403_8@ +%Y%m%d`
echo@H_403_8@ "------------------------------"@H_403_8@
echo@H_403_8@ "date=$date@H_403_8@"@H_403_8@
echo@H_403_8@ "enddate=$enddate@H_403_8@"@H_403_8@
echo@H_403_8@ "------------------------------"@H_403_8@
while@H_403_8@ [[ $date@H_403_8@ < $enddate@H_403_8@ ]]
do@H_403_8@
echo@H_403_8@ $date@H_403_8@
date=`date -d@H_403_8@ "+1 day $date@H_403_8@"@H_403_8@ +%Y%m%d`
done@H_403_8@
执行:./test.sh 2014@H_403_8@-06@H_403_8@-01@H_403_8@ 2014@H_403_8@-06@H_403_8@-06@H_403_8@