1. date month問題
date +'%Y-%m-%d' : 2017-08-31
date -d '1 months ago' +'%Y-%m-%d' : 2017-07-31
date -d '2 months ago' +'%Y-%m-%d' : 2017-07-01 ???
解釋:
shell計算month會先直接拿當(dāng)前月份(如果指定日期就按照指定日期)減去指定月份扁凛,得到精確到天的一個日期A,然后和標(biāo)準(zhǔn)日期按天比對沸毁,如果計算出來日期不存在就往后推算N天,N=A-當(dāng)月最后一天傻寂。
在我們的例子中息尺,date -d '2 months ago' +'%Y-%m-%d
的結(jié)果應(yīng)該是2017-06-31,但是這一天不存在疾掰,所以結(jié)果為2017-07-01
如果需要計算某個月最后一天搂誉,應(yīng)該先計算出后一個月的第一天,然后往前推算一天得到指定日期静檬;計算月份也同樣炭懊。
2. getopts問題
for i in {1..100}
do
#OPTIND=1
execute_sql -d "db" -t "table"
done
當(dāng)i=2時:參數(shù)將無法傳遞給函數(shù) execute_sql
解釋:
在一個shell腳本執(zhí)行過程中,OPTIND記錄了參數(shù)處理的狀態(tài)拂檩,對于第二次循環(huán)凛虽,OPTIND并沒有改變,因此參數(shù)將不會被傳遞广恢,除非手動修改OPTIND的值為1凯旋。