Linux Shell关于传入时间字符串的修改

之前写脚本需要用到传入时间的一小时之后的时间,在网上找了一种方法是这样的做修改的

dt=$1
day=`expr substr $dt 1 8`
hour=`expr substr $dt 9 2`
daynext=`date --date=$[day+1] +'%Y%m%d'`
if [ $hour -eq 23 ];
then
hournext=00
elif [ $hour -eq 08 ];
then
hournext=09
elif [ $hour -eq 09 ];
then
hournext=10
else
hournext=$[hour+1]
fi

这里会有一个问题,就是hour=08或09时,$[hour+1]会报错,原因是系统会认为这是八进制,+1超出范围。无奈只能在最后做了if判断。


再说一下后来发现的改进做法(传入2016081923)

dt=$1
day=`expr substr $dt 1 8`
hour=`expr substr $dt 9 2`
dtnext=`date -d "${day} ${hour} 1 hours" +"%Y%m%d%H"`
daynext=`expr substr $dtnext 1 8`
hournext=`expr substr $dtnext 9 2`

尝试了一下这样的写法,结果会报错

dtnext=`date -d "${dt} 1 hours" +"%Y%m%d%H"`

最后再贴一下获取当前系统时间以及根据系统当前时间获取所需时间的例子

day=$(date +%Y%m%d)
day=`date --date='1 days ago' +'%Y%m%d'`
day=`date --date='1 days' +'%Y%m%d'`
day=`date --date='1 hours' +'%Y%m%d%H'`
day=`date -d "${day} 1 days ago" +"%Y%m%d"`
day=`date -d '1hours ago' +'%Y%m%d%H'`

你可能感兴趣的:(心得)