解决方法:将要转换成十进制的变量或者数字 在前面加上`10#`

Linux Shell 编程进行数学运算时,如果有字符 '0' 打头的数 Bash 会当做八进制解释,而这经常会引起问题。比如我们用"08"参加运算,本意是当做10进制的8,实际却会运行报错。

通常情况下,直接写的数值不会以0打头,但如果是以前面命令的格式化输出为参数时,则往往不能控制。更危险的是,如果参与运算的以'0'打头数值达到了两位数或更多,且数值的每一位均在0-7之间,则 Shell 不会报错,但会输出错误的运算结果。下面是两个会出错的例子:

time=`date +%S`
time2=$((time%15))

当当前时间的秒正好是8或9的时候便会出现类似

aulddays:~$ time=`date +%S`
aulddays:~$ time2=$((time%15))
bash: 08: value too great for base (error token is "08")  \or
bash: 08: value too great for base (error token is "09")

的报错。又如,使用 seq 时,为了格式工整,往往会在个位数前补'0'对齐:

for hour in `seq -f %02g 0 23`
dohour2=$(($hour+10))
done

之类,当循环到8时也会出错。

究其原因,就是shell将“08”当成了8进制数,而8进制数中合法的最大的数字是'7',因而出错了。要解决这个问题,必须让Shell强制将"08"当成10进制来解释,具体做法,已第一个例子来讲需要改写成:

time=`date +%S`
time2=$((10#time%15))

这样便可让 Bash 将"08"解释为十进制数。前面已经说过,当以'0'打头的数值位数有多位时且每一位都在0-7之间时,Bash 会以八进制解释且不会报错。如果发现脚本执行结果中的数值出现了诡异的问题时,一定要检查一下是否是整数进制发生了错误。

Linux Shell 进制错误 - value too great for base相关推荐

  1. linux进制转换的函数,Linux shell 进制转换

    源地址链接:http://blog.csdn.net/axdc_qa_team/article/details/6090182 既然有需要,就把搜到感觉有用的进制转换函数或指令都贴在这里,便于以后应用 ...

  2. Linux shell 进制转换

    shell可以在不调用第3方命令,表示不同进制数据.这里总结以下表示方法.shell 脚本默认数值是由10 进制数处理,除非这个数字某种特殊的标记法或前缀开头. 才可以表示其它进制类型数值.如:以 0 ...

  3. linux下进制是如何转换?

    一 其他进制转换为十进制方式 1 二进制转换为十进制 echo $((2#11111111))  结果是255 2 八进制转换为十进制 ((num=8#333));echo $num   结果是219 ...

  4. linux错误日志重定向,Linux shell 重定向标准错误输出

    文件描述符文件描述符是程序发送输出和获取输入的地方.当执行一个程序时,运行该程序的进程打开了3个文件描述符,分别是:0(标准输入).1(标准输出)和2(标准错误输出).重定向输出符号(>)是1& ...

  5. Linux编辑器进制转换以及进制转换

    1.vim和gedit编辑器 vim 文件名 如果文件存在,直接打开,进行编辑 如果文件不存在,则创建并打开,进行编辑 vim:最经典的文本编辑工具,没有菜单,只有命令 1.1三种模式: 输入模式 命 ...

  6. linux 16进制 字符串转数字,〖Linux〗Shell十进制数值转换十六进制

    Servlet的生命周期+实现方式 1.Servlet的生命周期:        (1)被创建:            默认情况下,Servlet第一次被访问时,被服务器创建.会调用init()方法. ...

  7. linux shell mv/cp 错误: will not overwrite just-created <filename> with <sameFilename> 解决方法

    运行shell脚本时,mv/cp时出现如下提示: mv: will not overwrite just-created <filename> with <sameFilename& ...

  8. linux shell 设置 标准 错误流 输出流 不显示

    echo "123" >/dev/null 2>&1 > 代表重定向到哪里,例如:echo "123" > /home/123. ...

  9. linux 文件 16进制显示,linux 16进制 产看文件

    hexdump - ascii, decimal, hexadecimal, octal dump 查看十六机制的首选工具. -c 每单元以字节为单位,显示出对应的ASCII码 -C 每单元以字节为单 ...

最新文章

  1. Networkx-cycle
  2. 独家 | 指南:不平衡分类的成本敏感决策树(附代码链接)
  3. 二进制安装部署 4 kubernetes集群---超详细教程
  4. Zabbix housekeeper processes more than 75% busy
  5. deMeer5_Attacker
  6. android虚拟电话号码,为何安卓手机坚持虚拟按键?这才是原因
  7. Java工作笔记-类型转换的一种思路(前后端分离、反射)
  8. wpf绑定 dictionary 给定关键字不再字典中_为什么要在 JavaScript 中学习函数式编程?...
  9. ssm框架重定向_精选 SSM 框架面试题整理
  10. JavaScript在发送请求AJAX请求时,URL的域名地址是使用绝对地址还是相对地址?
  11. HTMLCSS常见面试题
  12. 先锋在线APP操作指南
  13. 谈谈未来 APP 产品设计的革命性趋势
  14. 李宏毅学习笔记35.GAN.06.Tips for Improving GAN
  15. iOS开发 Tips 保存视频文件到相册
  16. 基因-药物相互作用数据库 DGIdb 介绍
  17. 2010年IT十大人物猜想
  18. Java中字符串为什么不以\0结尾
  19. 某马程序员NodeJS速学笔记
  20. 【English学习】10句电话英语礼貌结束通话

热门文章

  1. SecureCRT自动化脚本
  2. zoj4110 Strings in the Pocket(manacher)
  3. mysql /tmp目录爆满问题的处理
  4. 2018.5.12说说反射的用途及实现------要再花费时间加强理解
  5. mysql集群的配置
  6. ArcBruTile 0.2.2
  7. Zabbix监控之常用snmp-OID
  8. 为什么携程要做好持续交付?
  9. Spring / Spring boot 异步任务编程 WebAsyncTask
  10. Groovy初体验:构建高性能JVM应用