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

简介: 在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
相关文章
shell脚本变量 $name ${name}啥区别
shell脚本变量 $name ${name}啥区别
|
Unix Shell Windows
随笔:What is Bash? What is shell?
随笔:What is Bash? What is shell?
299 1
|
Shell Docker 容器
使用exec模式与shell模式,执行ENTRYPOINT和CMD的区别
结合 `exec`与 `shell`模式,`ENTRYPOINT`与 `CMD`在Docker容器启动时的交互方式展现出不同的特点。选择哪种模式,取决于对执行环境的纯净度、性能需求以及是否需要利用shell特性。理解这些细微差别,有助于更精细地控制容器的行为,优化应用部署与管理流程。
437 0
|
JSON Java Shell
Dockerfile中RUN、CMD、ENTRYPOINT、SHELL命令的区别
理解这些指令的差异和应用场景,有助于构建高效、灵活且易于管理的Docker镜像。在实际应用中,根据需要选择合适的指令,可以有效地控制镜像构建和容器运行的行为。
856 0
|
Shell Linux
在Linux中,哪⼀个bash内置命令能够进行数学运算?
在Linux中,哪⼀个bash内置命令能够进行数学运算?
|
缓存 Shell Linux
在Linux中,bash shell 中的 hash 命令有什么作用?
在Linux中,bash shell 中的 hash 命令有什么作用?
|
人工智能 物联网 Shell
在Linux中,BASH 和 DOS之间的区别是什么?
在Linux中,BASH 和 DOS之间的区别是什么?
|
资源调度 网络协议 Shell
在Linux中,Linux内核和Shell有何区别?
在Linux中,Linux内核和Shell有何区别?
|
Shell Linux
在Linux中,使用bash shell实现条件判断和循环结构的例子是什么样的?
在Linux中,使用bash shell实现条件判断和循环结构的例子是什么样的?
|
关系型数据库 MySQL iOS开发
干货文:Mac 中 .bash_profile 和 .zshrc 的区别
干货文:Mac 中 .bash_profile 和 .zshrc 的区别
2363 1