1. 程式人生 > >Linux Shell關於傳入時間字串的修改

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'`