shell中进行算术运算的各种方法

  • A+
所属分类:Shell  编程

shell中进行算术运算的各种方法

shell中,无法直接进行算术运算,如果直接进行算术运算会出现如下情况。

shell中进行算术运算的各种方法

从上图可以看出,默认情况下,shell不会直接进行算术运算,而是把"算术符号"当做"字符串"与两个变量的值连接在了一起,形成了一个新的字符串,那么,在bash中,应该怎样进行算术运算呢?细分之下,常用方法有6种,如下。

 

此处先对各种方法进行概述,后续会针对每种方法给出示例。

(1) 使用let命令进行算术运算,只支持整数运算。

(2) 使用expr命令进行算术运算,只支持整数运算。

(3) 使用bc命令进行算术运算,支持小数运算。

(4) 使用运算语法:$[算术表达式],只支持整数运算。

(5) 使用运算语法:$((算术表达式)),只支持整数运算。

(6) 在初始化变量时,将变量定义为"整数"类型,则可直接进行整数运算。

 

上述各种方法的示例如下

 

方法一:借助let命令进行整数运算

let命令是shell的内建命令,我们可以借助let命令进行整数运算,这种方法只支持整数运算,不支持包含小数的运算,示例如下。

shell中进行算术运算的各种方法

从上图中可以看到,当借助let命令进行算术运算时,"运算过程"与"运算结果"中都不会包含小数,而且这种方法需要借助一个变量,将计算后的值赋值给这个变量后进行输出,但是let命令是shell内建命令,这是它的优势,只要当前服务器上存在shell,即可使用它进行整数运算。

 

方法二:借助expr命令进行算术运算

expr命令也支持算术运算功能,虽然它的功能不止于此,但是此处我们只使用它进行算术运算,expr命令与let命令相似,也只能进行整数运算,而且,使用expr命令进行算术运算时,需要注意以下两点

1、数值与运算符号之间需要用空格隔开,否则无法进行算术运算。

2、使用expr命令进行乘法运算时,需要将"乘号"转义,否则会报错。

示例如下,下图中的红线标注的部分体现了上述两点注意点。

shell中进行算术运算的各种方法

当然,如果我们想要使用经过计算过的值,可以使用'命令引用'。

shell中进行算术运算的各种方法

 

方法三:借助bc命令进行算术运算

bc命令大家可能已经很熟悉了,它是linux下最常用的"计算器",我们可以借助bc命令进行算术运算,使用这种方法的优势就是支持小数运算。

注意:在使用"除法"时,需要指定小数点精度,否则运算结果中不会包含小数,使用scale指定小数点精度。

示例如下:

shell中进行算术运算的各种方法

上图中,如果使用bc命令进行除法运算,同时希望计算结果按照指定的精度显示,需要使用scale指定小数点精度,上图中scale=3表示显示小数点后面的三位精度。

但是需要注意,当使用bc命令时,如果运算结果为不到1的小数,则不会显示小数点前面的"零",示例如下。

shell中进行算术运算的各种方法

除了使用管道,将echo输出的内容重定向到bc,还可以使用如下方法利用bc,它们是等效的。

shell中进行算术运算的各种方法

 

方法四:使用运算语法 $[算术表达式]

这种方法使用比较方便,示例如下。

shell中进行算术运算的各种方法

 

方法五:使用运算语法 $((算术表达式))

这种方法与方法四类似,示例如下。

shell中进行算术运算的各种方法

 

方法六:将变量声明为整形

这种方法也比较简单,可以直接将变量声明为"整数",然后即可直接进行整数运算,示例如下:

shell中进行算术运算的各种方法

 

好了,在shell中常用的算术运算方法已经总结完毕,希望这篇文章中的内容对你有所帮助。

weinxin
我的微信公众号
关注"实用运维笔记"微信公众号,当博客中有新文章时,可第一时间得知哦~
朱双印

发表评论取消回复

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:6   其中:访客  4   博主  2

    • avatar 老张 2

      打卡,感谢博主。我还是继续找错别字吧。

      算数 还是 算术
      下图中的红线标准的部分
      这种方法与方法四类型

        • avatar 朱双印 Admin

          @老张 没毛病~错误已经修改,感谢,打卡友军又壮大了

        • avatar 网络游名007 1

          a=3
          b=4
          echo $[a+b]
          在[]里引用变量可以不加$符号

          • avatar hello 2

            非常棒,简洁明了

            • avatar 我的电脑 3

              declare -i i sum
              for ((i=1; i<=10; i=i+1))
              do
              sum+=i
              done
              echo $sum
              请教下,已经声明了i和sum为整数,那么这个for循环为什么不能这么写for (i=1; i<=10; i=i+1) 还是要包两层括号。
              貌似这个for循环必须包两层小括号?