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的輸出。