免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 16174 | 回复: 8
打印 上一主题 下一主题

Bash 报错 "08 :value too great for base" 的原因及解决办法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-16 20:31 |只看该作者 |倒序浏览
我自己写的这段代码有问题,但又不知道是什么引起的,请说明下。

while (( 0<1 ))
do
     second=$(date +%S)
     echo $second
done


为什么没次在第8秒的时候都会报错呢?
bash: 08 :value too great for base  (error token is "08" )

[ 本帖最后由 MMMIX 于 2008-8-18 23:11 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2008-08-16 20:48 |只看该作者
没法重现。

把能重现问题的完整代码贴上来罢。

论坛徽章:
0
3 [报告]
发表于 2008-08-16 21:21 |只看该作者
不好意思。现在把我的代码贴上

#!/bin/bash
#功能:当有新邮件时,会通知用户
len=$(wc -l  /var/spool/mail/$USER |awk '{print $1}')
len_new=len

declare -i tsecond
while (( 0<1 ))
do
    tsecond=$(date +%S)
    tt=$((tsecond%30))   
    if (( tt==0 ))
    then
            len_new=$(wc -l  /var/spool/mail/$USER |awk '{print $1}')
            if  (( len_new > len ))
            then
                    echo "you have a new mail"
                    len=len_new
             else
                     len=len_new
             fi
         fi
done

论坛徽章:
0
4 [报告]
发表于 2008-08-16 21:28 |只看该作者
不好意思,第一行漏了管道符号
len=$(wc -l | /var/spool/mail/$USER |awk '{print $1}')

论坛徽章:
0
5 [报告]
发表于 2008-08-16 21:31 |只看该作者
上面是自己看错了,代码是对的

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2008-08-16 23:16 |只看该作者
原帖由 cyf2119128 于 2008-8-16 21:21 发表

while (( 0<1 ))
do
    tsecond=$(date +%S)
    tt=$((tsecond%30))   

问题就出在取模运算(%)这了,原因如下:
Numbers starting with leading 0 are Octal numbers  (base 8) in many programming
languages including C, Perl and shell. Valid octal digits are
0,1,2,3,4,5,6,7 so it barfs if it sees an 8 or a 9. You probably want
to work in straight numbers and make a leading 0 in your output
format with a sprintf("%02d") kind of formatting thing.
Anything starting with 0x or 0X is a hex number.

So the error message means exactly as it says- it's an error from
the let function complaining about the value being too big for the base.

Have fun,
Stuart.

原贴地址:http://www.google.com/search?cli ... =UTF-8&oe=UTF-8

下面是解决办法:
You can explicitly state the base of a number using base#number
Code:
if [ $((10#$item)) -eq 0 ] ; then
That will have trouble if the number starts with a minus sign.
The '-' needs to be in front of the base like -10#009 for -9.

原贴地址:http://ubuntuforums.org/showthread.php?p=4206419

[ 本帖最后由 MMMIX 于 2008-8-16 23:21 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
7 [报告]
发表于 2008-08-16 23:22 |只看该作者
原帖由 cyf2119128 于 2008-8-16 21:28 发表
不好意思,第一行漏了管道符号
len=$(wc -l | /var/spool/mail/$USER |awk '{print $1}')

多用编辑功能吧。

论坛徽章:
0
8 [报告]
发表于 2008-08-17 15:09 |只看该作者
谢谢MMMIX ,我明白了。已经更正了这个错误

tsecond=$(date +%S)
做一个强制转换就可以了
tsecond=10#$(date +%S)

论坛徽章:
0
9 [报告]
发表于 2010-06-23 11:18 |只看该作者
无比感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP