最近天天写SHELL,写到想吐,没有系统学习SHELL,写的时候出现很多问题,觉得挺吃力的!
特别是关于时间的,之前接了一个需求,获取某天的上一周的星期一和最后一天星期日的日期
网上找了很久都没找到,唯有用自己的方法写了一个SHELL的算法了,写这么一个东西研究了半天
我真的向SHELL吐槽,怎么那么难用。。。
#!/bin/bash
#########注意:这里获取的是'某天'的'上一周'时间############
#得到今天是第几周
this_week=$(date +%W)
#得到某天是第几周
before_week=$(date -d $* +%W)
#某天-今天=周差
subweek=$[before_week-$this_week-1]
#利用加减周数获取,获取某周的‘今天’
today=`date -d "$subweek week" +%Y%m%d`
#获取today究竟是一个周的哪一天
whichday=$(date -d $today +%w)
#用(today-whichday)+1,就是某周的第一天,这里是星期一
startday=`date -d "$today -$[${whichday}-1] days" +%Y%m%d`
#某周的最后一天,星期日为最后一天
endday=`date -d "$startday +6 days" +%Y%m%d`
echo $startday
echo $endday
#get week by year : 2013W32
week=$(date -d $startday +%W)
year=$(date -d $* +%Y)
yearweek=${year}W${week}
上述代码经过测试,有个跨年的BUG,修复版本
#取得入参的时间
indate=$*;
if [ ! $indate ]; then
indate=$(date +%Y%m%d)
fi
#取得统计日期(一般为入参的上周的今天)
statday=`date -d "$indate -1 weeks" +%Y%m%d`
#得到是当周的周几 (0为星期日,1为星期一,...6为星期六)
whichday=$(date -d $statday +%w)
#用(statday-whichday)+1,就是某周的第一天,这里是星期一
if [ $whichday == 0 ]; then
startday=`date -d "$statday -6 days" +%Y%m%d`
else
startday=`date -d "$statday -$[${whichday} - 1] days" +%Y%m%d`
fi
#某周的最后一天,星期日为最后一天
endday=`date -d "$startday +6 days" +%Y%m%d`