前几天启动的定时任务,有几个实例挂掉了。报错提示:
1 | value too great for base (error token is "08") |
出错的相关代码如下:
1 | if [ $((${hour_s} + ${hour_diff})) -gt 23 ]; then |
这里 ${hour_s}
是当前标定时间的小时数。形如 00
, 01
, 02
, ..., 08
, 09
, ..., 23
。${hour_diff}
是需要向后处理的小时数。这段代码的意图,是判断二者相加是否大于 23
。若大于 23
,则需要在日期上 +1
,否则只需要操作小时即可限定数据范围。
关键就在于 08
和 09
的意思。这里 08
是上午八点的意思,为了保持格式一致,在 8
的前面填充了 0
。但 Shell 把它当成是八进制(base is 8)。这样一来,怪不得 Shell 认为 08
是不合法的八进制数。为解决这个问题,我们需要告知 Shell 这是个前面填充了 0 的十进制数。于是我们需要改成这样:
1 | if [ $((10#${hour_s} + ${hour_diff})) -gt 23 ]; then |