value too great for base (error token is "09")报错

报错提示:

bakstatus.sh: line 38: [[: 2020-04-09: value too great for base (error token is “09”)

脚本:

#打印年月日
DATE=$(date +%Y-%m-%d)

2020-04-09

原因:

if [[ $Y -eq $DATE ]]
then
	echo -e "\033[36m 小爱提示:$(sed -n "${Z}p" /home/soft/bakstatus/ip.txt)备份正常哟!\033[0m"
else
	echo -e "\033[41m 警告:$(sed -n "${Z}p" /home/soft/bakstatus/ip.txt)备份文件有问题!\033[0m"
fi
let Z++
done

因为判断数据文件是否是当天的备份,【2020-04-09 == 2020-04-09】,因为shell中的双括号运算符会将0开头的数字当做8进制来计算,所以会报错,09比基数大。

个人解决方法:

#使用过滤的方法,打印想输出的值,进行传参,判断。
[root@test /home/soft/bakstatus]# date +%Y%m%d
20200409

[root@test /home/soft/bakstatus]# cat /home/soft/bakstatus/bak.txt | awk -F_ ‘{print $2}’ | sed ‘s/-//g’
20200409
20200409
20200409
20200409
20200409

for Y in $(cat /home/soft/bakstatus/bak.txt | awk -F_ '{print $2}' | sed 's/-//g')
do
if [[ $Y -eq $DATE ]]
then
	echo -e "\033[36m 小爱提示:$(sed -n "${Z}p" /home/soft/bakstatus/ip.txt)备份正常哟!\033[0m"
else
	echo -e "\033[41m 警告:$(sed -n "${Z}p" /home/soft/bakstatus/ip.txt)备份文件有问题!\033[0m"
fi
let Z++
done

网络解决方法:

day =$(date +%d)
ret=$(($day %3))
if [ $ret -ne 0 ];then
echo "we don\'t restart $spellcmd"
exit 0
fi

但是脚本运行一段时间后, 发现程序有些异常,每月9号没有更新数据,也没有重启进程,其它时间点都是工作正常的,难道在shell脚本中 9%3 不等于0吗?看了脚本的运行日记 , 创造这个过错 : -bash: 09: value too great for base (error token is “09”); 在网上搜了一下, date +%d发生 的小时是类似01 02 … 10 … 23的样子, 默认情况下, 不足2位的前面补零, 而$(())在做数学运算的时间 , 把0开头的数字认为 是8进制的, 以是 $((09)), 就报了”value too great for base“的错误。

   再查了一下date的手册, 发现: 
  •  (hyphen) do not pad the field 
    

0 (zero) pad with zeros (这是缺省行为)

因此,将脚本day = ( d a t e + (date +%d) 修改为day = (date+(date +%-d),就可以产生类似于 0 1 2 3…12的输出,而不是位数不足前面补0的输出。

PS:希望对您有所帮助!!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值