Bash shell中四种算术运算方式的区别与联系简介

在bash shell中,整数的运算也会偶尔遇到。为了彻底弄清其中的奥秘,我们通过实例验证的方式来探索一下常见的四种运算中的区别与联系。实例验证之前,我们来定义一组变量,并对其赋值:


[root@GeekDevOps ~]# a=9;b=13;c=-1;d=+4;e=7.2

[root@GeekDevOps ~]# echo $a $b $c $d $e

9 13 -1 +4 7.2

一、expr


[root@GeekDevOps ~]# echo `expr $a + $b`

22

[root@GeekDevOps ~]# echo `expr $c + $d`

expr: 非整数参数

[root@GeekDevOps ~]# echo `expr $c + $b`

12

[root@GeekDevOps ~]# echo `expr $a + $d`

expr: 非整数参数

[root@GeekDevOps ~]# echo `expr $a + $e`

expr: 非整数参数

从以上例子中我们可以看出,使用expr来进行数字运算时,不支持浮点类型的数字计算,也不支持带符号+的运算,支持整数运算(包括带符号-的运算)。另外,需要特别注意的是expr后面的变量与命令expr之间及变量与运算符之间必须使用空格隔开。此处的引号为ESC下方的按键,不是通常的单引号。

二、小括号


[root@GeekDevOps ~]# echo $a $b $c $d $e

9 13 -1 +4 7.2

[root@GeekDevOps ~]# echo $((a+b))

22

[root@GeekDevOps ~]# echo $((c+d))

3

[root@GeekDevOps ~]# echo $((a+d))

13

[root@GeekDevOps ~]# echo $((a+c))

8

[root@GeekDevOps ~]# echo $((a+e))

-bash: 7.2: 语法错误: 无效的算术运算符 (错误符号是 ".2")

从以上例子中我们可以看出,采用小括号这种运算方式,完美的支持有符号及无符号的整数运算,不支持浮点类型的数学运算。需要特别注意的是,需要使用双层小括号来将运算表达式结果括起来才能得到正确的运算结果。

三、中括号


[root@GeekDevOps ~]# echo $a $b $c $d $e

9 13 -1 +4 7.2

[root@GeekDevOps ~]# echo $[a+b]

22

[root@GeekDevOps ~]# echo $[a+c]

8

[root@GeekDevOps ~]# echo $[a+d]

13

[root@GeekDevOps ~]# echo $[a+e]

-bash: 7.2: 语法错误: 无效的算术运算符 (错误符号是 ".2")

[root@GeekDevOps ~]# echo $[c+d]

3

从以上例子中我们可以看出,采用中括号与小括号没有很大的差异,只是书写方式不一样而已。

四、let


[root@GeekDevOps ~]# echo $a $b $c $d $e

9 13 -1 +4 7.2

[root@GeekDevOps ~]# let x=a+b

[root@GeekDevOps ~]# echo $x

22

[root@GeekDevOps ~]# let x=a+c

[root@GeekDevOps ~]# echo $x

8

[root@GeekDevOps ~]# let x=a+d

[root@GeekDevOps ~]# echo $x

13

[root@GeekDevOps ~]# let x=a+e

-bash: let: 7.2: 语法错误: 无效的算术运算符 (错误符号是 ".2")

[root@GeekDevOps ~]# let x=c+d

[root@GeekDevOps ~]# echo $x

3

从以上例子中,我们可以看到,使用let命令来进行算术运算与小括号及中括号无较大差异,仅仅存在书写差异而已。

五、总结

以上例子中为了节约篇幅,仅仅以加法运算来进行实验。在bash shell中还支持减法(-)、乘法(*)、除法(/)、求余(%)等运算,其运算规则及方式大同小异,不一一介绍。特别需要注意的是在使用expr进行乘法运算时,“*”号需要进行转义否则会出错。


[root@GeekDevOps ~]# echo `expr $b \* $a`

117

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,657评论 0 5
  • 特别说明:以下内容来自简书,链接为原文出处,一切权益归原作者所有,在此感谢原作者的分享,大家可以点击以下链接查看原...
    沈祥佑阅读 616评论 0 4
  • 在编写shell scripts时,经常会用到括号,各种括号,各种用法。 一、小括号、圆括号:() 1、单小括号。...
    大菜鸟_阅读 1,998评论 0 2
  • 运算符是处理数据的基本方法,用来从现有的值得到新的值。JavaScript 提供了多种运算符,本章逐一介绍这些运算...
    徵羽kid阅读 763评论 0 0
  • 本章将会介绍 模块和源文件访问级别访问控制语法自定义类型子类常量、变量、属性、下标构造器协议扩展泛型类型别名位运算...
    寒桥阅读 985评论 0 2

友情链接更多精彩内容