shell脚本报错:value too great for base (error token is "08")

刺骨的言语ヽ痛彻心扉 2021-09-23 21:22 706阅读 0赞

在shell开发中,会遇到将10以内的数字前面加0的情况,例如按小时分区执行hive脚本,具体代码如下:

  1. #!/bin/sh
  2. START_DAY=$1
  3. END_DAY=$2
  4. FLAG_DAY=${START_DAY}
  5. START_HOUR=$3
  6. END_HOUR=$4
  7. executeHive() {
  8. while :
  9. do
  10. local STAT_HOUR=00
  11. local FLAG_HOUR=23
  12. local START_DAY=$(date -d "$START_DAY 1day" +%Y%m%d)
  13. local STAT_DAY=`date -d "${START_DAY} -1 day" +%Y%m%d`
  14. # 判断执行日期是否为开始日期或结束日期
  15. if [ ${STAT_DAY} -eq ${FLAG_DAY} ]; then
  16. STAT_HOUR=${START_HOUR}
  17. elif [ ${STAT_DAY} -eq ${END_DAY} ]; then
  18. FLAG_HOUR=${END_HOUR}
  19. fi
  20. while :
  21. do
  22. printf "[INFO] `date '+%F %T'` current execute partition is dt=${STAT_DAY} hour=${STAT_HOUR}\n"
  23. exitCode=$?
  24. if [ $exitCode -ne 0 ];then
  25. printf "[ERROR] `date '+%F %T'` hivesql execute ${SOL_FILE} is failed!!!\n"
  26. exit $exitCode
  27. else
  28. printf "[INFO] `date '+%F %T'` hivesql ${STAT_DAY} ${STAT_HOUR} data execute success!!!\n"
  29. fi
  30. # 因为小时小于10时前面有0,shell脚本会认为是八进制数字,所以要转为十进制数字
  31. #STAT_HOUR=$((10#$STAT_HOUR+1))
  32. STAT_HOUR=$(($STAT_HOUR+1))
  33. # 判断小时是否小于10
  34. if [ ${STAT_HOUR} -lt 10 ]; then
  35. STAT_HOUR=0${STAT_HOUR}
  36. fi
  37. # 如果执行小时大于设置的结束小时,退出循环
  38. if [ ${STAT_HOUR} -gt ${FLAG_HOUR} ]; then
  39. break;
  40. fi
  41. done
  42. # 判断执行日期是否等于结束日期,等于则退出循环
  43. if [ ${STAT_DAY} -eq ${END_DAY} ]; then
  44. break;
  45. fi
  46. done
  47. }
  48. if [ ${START_DAY} -gt ${END_DAY} ]; then
  49. printf "[ERROR] `date '+%F %T'` --start-day:${START_DAY} greater than --end-day:${END_DAY}\n"
  50. exit 1
  51. elif [ ${START_HOUR} -ge 24 ] || [ ${START_HOUR} -lt 0 ] || [ ${END_HOUR} -ge 24 ] || [ ${END_HOUR} -lt 0 ]; then
  52. printf "[ERROR] `date '+%F %T'` --start-hour:${START_DAY} or --end-hour:${END_DAY} is not 00-23 \n"
  53. exit 1
  54. else
  55. executeHive
  56. printf "[INFO] `date '+%F %T'` hivesql ${START_DAY} to ${END_DAY} data execute success!!!\n"
  57. fi

当执行命令:sh houeTest.sh 20200202 20200203 19 23会报如下错误:
houeTest.sh: line 38: 08: value too great for base (error token is "08")
在这里插入图片描述
解决方法:将代码第38行改为第37行
STAT_HOUR=$(($STAT_HOUR+1))改为:STAT_HOUR=$((10#$STAT_HOUR+1))就不会报错了

发表评论

表情:
评论列表 (有 0 条评论,706人围观)

还没有评论,来说两句吧...

相关阅读