bash: 09: value too great for base (error token is 09)

前幾天在寫一個腳本, 每隔三天程序更新一下數據,然後重啓一下進程。 


day =$(date +%d)
ret=$(($day %3))
if [ $ret -ne 0 ];then
echo "we don\'t restart $spellcmd"
exit 0
fi

但是腳本運行一段時間後, 發現程序有些異常,每月9號沒有更新數據,也沒有重啓進程,其它時間點都是工作正常的,難道在shell腳本中 9%3 不等於0嗎?看了腳本的運行日記 , 創造這個過錯 : -bash: 09: value too great for base (error token is "09");  在網上搜了一下, date +%d發生 的小時是類似01 02 ... 10 .... 23的樣子, 默認情況下, 不足2位的前面補零, 而$(())在做數學運算的時間 , 把0開頭的數字認爲 是8進制的, 以是 $((09)), 就報了”value too great for base“的錯誤。 


       再查了一下date的手冊, 發現: 
-      (hyphen) do not pad the field 
0      (zero) pad with zeros (這是缺省行爲)

因此,將腳本day =$(date +%d) 修改爲day =$(date +%-d),就可以產生類似於 0 1 2 3...12的輸出,而不是位數不足前面補0的輸出。
發佈了105 篇原創文章 · 獲贊 35 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章