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会先直接拿当前月份(如果指定日期就按照指定日期)减去指定月份,得到精确到天的一个日期A,然后和标准日期按天比对,如果计算出来日期不存在就往后推算N天,N=A-当月最后一天。
在我们的例子中,date -d '2 months ago' +'%Y-%m-%d
的结果应该是2017-06-31,但是这一天不存在,所以结果为2017-07-01
如果需要计算某个月最后一天,应该先计算出后一个月的第一天,然后往前推算一天得到指定日期;计算月份也同样。
2. getopts问题
for i in {1..100}
do
#OPTIND=1
execute_sql -d "db" -t "table"
done
当i=2时:参数将无法传递给函数 execute_sql
解释:
在一个shell脚本执行过程中,OPTIND记录了参数处理的状态,对于第二次循环,OPTIND并没有改变,因此参数将不会被传递,除非手动修改OPTIND的值为1。