专栏首页耕耘实录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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux系统下漏洞扫描、评估工具OpenVAS9的安装与使用

    版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢。

    耕耘实录
  • Linux中find命令的使用详解(上)

    版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

    耕耘实录
  • Linux中find命令的使用详解(下)

    版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

    耕耘实录
  • Linux系统NFS网络文件系统

    NFS(network file system)网络文件系统,就是通过网络让不同的主机系统之间可以共享文件或目录,此种方法NFS客户端使用挂载的方式让共享文件或...

    民工哥
  • 工具类官网Web原型制作分享-Adobe

    Adobe是全球知名的软件开发团队,研发了设计创意领域全球领先的优秀软件产品,为设计行业提供了巨大的价值。

    奔跑的小鹿
  • web安全防御之RASP技术

    1.一个Web应用开发到上线的过程大致须要经过如下步骤:需求分析、架构设计、系统设计、功能设计、编码实现、测试评估、上线部署、业务运营等关键步骤,其中功能设计、...

    我是小三
  • 腾讯云服务器搭建网站

    对于服务器来说稳定、极速就选择 2核 4G内存配置的云服务器比较稳妥。这个配置跑网站是比较轻松无压力的。配上 avada主题,可以做出的很大气、高大上的企业网站...

    用户5921096
  • sftp config 转

    (adsbygoogle = window.adsbygoogle || []).push({});

    双面人
  • flv文件的onMetaData部分解析

    参考flv的spec文档,写了个解析onMetaData,代码没有整理

    用户3765803
  • Python、Unicode和中文

    python的中文问题一直是困扰新手的头疼问题,这篇文章将给你详细地讲解一下这方面的知识。当然,几乎可以确定的是,在将来的版本中,python会彻底解决此问题,...

    py3study

扫码关注云+社区

领取腾讯云代金券