shell脚本中遇到的八进制与十进制的问题: 08: value too great for base (error token is “08“)

问题描述:
因项目需求 要取出月份的数字 做相应的操作 月份的数字一般是07 08这样的 被默认识别为八进制 导致异常 在执行shell脚本时抛出异常 如下

[postgres@localhost ~]$ sh auto_partition.sh
uto_partition.sh: line 15: 08: value too great for base (error token is "08")

这种异常主要是由于在shell中以0开头的 例如06 会默认被识别为八进制数字 如果使用八进制数字与十进制数字比较或运算就会提示如上信息

脚本中涉及的比较如下 既有比较 也有计算

if [ $mon -eq 12 ];then
    mon=01
else
    mon=$(($mon+1))
fi

下边用shell命令说明一下怎么解决 举例如下

十进制下的计算如下 没问题
[postgres@localhost ~]$ mon=8
[postgres@localhost ~]$ echo $(($mon+1))
9

八进制的 如下 抛出异常
[postgres@localhost ~]$ mon=08
[postgres@localhost ~]$ echo $(($mon+1))
-bash: 08: value too great for base (error token is "08")

这时候需要将八进制转换为十进制 其中$((10#$mon))的作用是将八进制转换为十进制

[postgres@localhost ~]$ mon=08
[postgres@localhost ~]$ echo $(($((10#$mon))+1))
9

你可能感兴趣的:(日常报错)