在阅读本文前,您需要对变量替换、命令替换和数值替换有一点认识。
阅读完本文,您应该获得解决下列问题的信息:
  1. 不同shell(bash,csh,ksh)下如何处理数值的运算
  2. 常用来数值运算的命令
  3. 关于运算结果精确到几位小数点的问题
运算方式一:
$[]
适用范围:只适用于bash,而sh(如solaris的默认shell)、ksh(如IBM AIX的默认shell)、csh都不支持。
注意我们要计算10+2*((3+1)*(5-1)/2)
需要机变一下,通过这种方式
echo $[10+2*$[$[3+1]*$[5-1]/2]]
注意中间不能有空格否则就会被错误解析。
[附注]
运算方式五:关于进制的处理
关于进制:表达和使用不同的进制。数字可以表达为二进制数、十进制数和十六进制数等等,范围从2进制~36进制。
 
我们用下面的形式实现:
$ echo $[8#17]
15
$ echo $[16#b]
11
实际中我们甚至可以计算7进制的一个数6543210的值表示的10进制是多少。
echo $[7#6543210]
注意上面的操作只是bash上的小技巧,ksh和csh都不支持。
运算方式二:
(())
适用范围:只适用于bash和ksh,不支持csh。
((sum=10+2*((((3+1))*((5-1))/2))));echo $sum;
运算方式三:
expr命令
适用范围:包括bash、ksh、csh、sh的大部分shell,但有一点要特别注意就是一定要转义shell环境下的特殊字符。
要特别注意:
必须对表达式 (Expression) 参数应用以下规则
用空格隔开每个项;
用 (反斜杠)放在 shell 需要转义的字符前;
对包含空格和其他特殊字符的字符串 (字符参与运算) 要用引号括起来;
expr ( 10 + 2 * ( ( 3 + 1 ) * ( 5 - 1 ) / 2 ) )
通用的做法是:"(" ")" "|" "!" 和 "*" ">" "<"都需要转义。
更多信息请查看其帮助,man expr
运算方式四:
awk命令
适用范围:这种方法是一种机变吧,适用于所有系统中包含了awk命令的shell环境,而且支持的数字函数也很多。
使用awk,由于awk的命令内部使用的是类C的,所以也不用考虑括号会被识别为其它子程序的情况。
awk 'BEGIN{sum=10+2*((3+1)*(5-1)/2)} END{print sum}' /dev/null
至于awk都支持哪些数学函数,欢迎大家参照我后续的文章。
运算方式六:关于小数的处理
bc命令
适用范围:包括bash、ksh、csh、sh的大部分shell。
也许大家都注意到了,上面提到的方式除了使用awk命令以外,运算结果都是被四舍五入过的整数值,但是实际中精确地保留一定位数的小数也很必要,这时我们就要用到bc这个数学工具了。
如果要熟练地使用bc,不只要对bc命令有一定的了解,对于命令替换(Command Substitution)、命令重定向(Input  Redirect & Output  Redirect)也要有清晰的认识。
对于bc命令
$ bc
scale=4 #计算结果保留到小数点后四位
10/2 
5.0000
obase=16 #计算的结果以十六进制表达
ibase=10 #输入的数值被识别为十进制
10/2
5.000
17/2
8.800
scale=0 #运算结果为整数
17/2
8
quit
这样我们就可以通过bc命令来计算10+2*((3+1)*(5-1)/2)的值了,并且让计算结果精确到小数点后的四位。
# echo `echo "scale=4;10+2*((3+1)*(5-1)/2)" | bc `
26.0000
本文转自xiaoyuwang 51CTO博客,原文链接:http://blog.51cto.com/wangxiaoyu/197658,如需转载请自行联系原作者

Linux/unix不同shell环境下数值运算的处理相关推荐

  1. Linux/UNIX不同shell环境下数组的处理

    有遗漏和不当的地方请大家指正,谢谢! [关于声明] 比较通用的做法,如ksh和bash declare -a 数组名 注意在ksh下还支持另外一种独特的变量声明赋值语法比较特殊. set -A var ...

  2. Shell入门:掌握Linux,OS X,Unix的Shell环境

    为什么80%的码农都做不了架构师?>>>    在Linux或类Unix系统中,每个用户和进程都运行在一个特定环境中.这个环境包含了变量.设置.别名.函数以及更多的东西.下面是对Sh ...

  3. Linux Shell环境下用jq命令处理json文件

    有时候需要在Shell环境下处理json文件,这时使用jq命令非常方便. 安装 CentOS下可以直接通过yum安装: yum install jq -y 使用方法 假设有一个名为test.json的 ...

  4. arm linux 2.6下载,ARM+LINUX(montavista2.6.x)环境下SIMCOM5218使用

    ARM+LINUX(montavista2.6.x)环境下 SIMCOM5218使用 http://blog.sina.com.cn/s/blog_4c796ed20100hpxg.html 一. 系 ...

  5. Nginx在Linux(centos7)环境下的下载与安装

    Nginx在Linux(centos7)环境下的下载与安装 一.下载Nginx 1.免费的开源版本官方网址 2.选择需要下载的版本 二.安装Nginx 1.安装前准备(需要安装相关依赖库) 2.安装N ...

  6. shell编程之数值运算

    shell编程是Linux学习中的难点,很多人学了几个月也是不明就里,那么今天我带着大家看一看,shell编程里面的数值运算 Shell 编程中的基本数值运算,这类运算包括: 数值(包括整数和浮点数) ...

  7. Linux挖坑脚本,Windows环境下写Linux sh脚本的一次挖坑和填坑

    最近在研究Docker集群和安装的时候,需要准备若干台机器.所以我为节约时间,打算批量复制VM机器,然后用sh脚本命令执行机器名称和IP等基础配置信息的修改. 具体操作:我在windows环境下,用N ...

  8. linux(ubuntu)环境下安装及配置JDK

    安装完IDEA之后遇到了问题,发现jdk安装完之后配置环境变量好困难,下面总结一下我的安装及配置方式: JDK下载链接:http://download.oracle.com/otn-pub/java/ ...

  9. linux centos7 mysql_Linux centos7环境下安装MySQL的步骤详解

    Linux centos7环境下安装MySQL的步骤详解 安装MySQL mysql 有两个跟windows不同的地方 1).my.ini 保存到/etc/my.ini 2).用户权限,单独用户执行 ...

最新文章

  1. Linux查看进程内存状况
  2. 将xscj指定为当前数据库_(2)连接登陆数据库
  3. node开启子线程_真Node多线程
  4. Exchange2010 控制台提示您的权限不足,无法查看此数据
  5. idea 使用 git 教程
  6. HashMap 面试 21 问,这次要跪了!
  7. LRU LeetCode
  8. Angular的property binding一个例子
  9. 15个实用的grep示例
  10. Linux tp5伪静态设置
  11. 数据库安装时的log路径
  12. extjs java 教程,JAVA开发工具 - 在IntelliJ IDEA下开发ExtJS应用指南
  13. box-shadow用法;http://riny.net/lab/css3/box-shadow.html
  14. 办公室计算机应用简单知识,新入职办公室人员基础电脑操作知识.doc
  15. Windows和ubuntu互传文件
  16. CSS盒模型与box-sizing详解
  17. 康托尔点集matlab实数,康托尔集是什么。详细解释
  18. 大学生python作业代做_代写COMP9021作业、代做Python编程语言作业、代写Python实验作业、代做program留学生作业...
  19. Java ServiceLoader使用和解析
  20. python立方根求解_python – 如何获得立方根的整数?

热门文章

  1. zoj 1109 Language of FatMouse 解题报告
  2. EVE-NG安装步骤
  3. 分治法在排序算法中的应用(JAVA)--归并排序
  4. Extra Data after Last Expected Column:hawq建外表load数据报错
  5. java环境变量设置详解_JAVA环境变量配置详解(Windows)
  6. Mybatis多表模型
  7. python不同版本共存_多个python版本共存时的pip配置
  8. cas .net 重定向循环_接口测试平台接入企业cas(一)
  9. android studio课程管理系统,8 个最优秀的 Android Studio 插件
  10. arraylist扩容是创建新数组吗 java_Java编程之数组扩容