千家信息网

line 40: 09: value too great for base (error token is "09")

发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,os:rhel6.8 2.6.32-642.el6.x86_64今天在测试编写的redis数据库的ping检测脚本时报了一个错误"./redis_ping.sh: line 40: 09: value
千家信息网最后更新 2024年11月22日line 40: 09: value too great for base (error token is "09")os:rhel6.8 2.6.32-642.el6.x86_64

今天在测试编写的redis数据库的ping检测脚本时报了一个错误"./redis_ping.sh: line 40: 09: value too great for base (error token is "09")",问了度娘,说是因为shell中的双括号运算符会将0开头的数字当做8进制来计算,所以会报错,09比基数大。脚本中用到双括号运算符的地方是处理日期时分秒的地方,如下:
cur_date=`date "+%Y-%m-%d %H:%M:%S"`---获取格式化时间
cur_hour_m2=$(($((${cur_date:11:2}+0))%2))---截取字符串,并用双括号运算符使之与0相加(为了去掉占位0,通常是使用let,expr等加0),但是事与愿违,恰好双括号运算符对于0开头的数字不能当做十进制计算
cur_min=$((${cur_date:14:2}+0))--截取字符串,并加0
cur_sec=$((${cur_date:17:2}+0))--截取字符串,并加0

修改为:
cur_hour=$(($(date +%-H)%2))--模2,也就是控制2小时执行一次
cur_min=$(date +%-M)
cur_sec=$(date +%-S)

这个脚本的思路是,死循环,每3秒ping一次redis集群中的所有服务器,如果有问题就写预警信息,如果全部正常,那么没2小时也写一次预警信息,代表ping脚本的心跳正常。
0