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

- 6

- A+

所属分类：Shell 编程

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

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

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

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

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

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

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

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

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

上述各种方法的示例如下

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

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

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

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

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

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

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

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

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

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

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

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

示例如下：

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

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

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

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

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

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

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

## 方法六：将变量声明为整形

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

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

我的微信公众号
关注"实用运维笔记"微信公众号，当博客中有新文章时，可第一时间得知哦~
赞 34
赏
分享

- Shell（bash）

- 版权声明：本站原创文章，于2017年1月18日19:00:08，由 朱双印 发表，共 1296 字。
- 如需转载，请在文章头部注明出处：shell中进行算术运算的各种方法 | 朱双印博客

shell中常用的变量处理、字符串操作（之三）
shell中常用的变量处理、字符串操作（之二）
shell中常用的变量处理、字符串操作（之一）
bash中 [ ] 与 [[ ]] 的区别

### 发表评论取消回复

欢迎 pangzi 再次光临！
修改信息

正在提交, 请稍候...
#

昵称*

邮箱*

网址

有回复时邮件通知我

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

2. 老张 2
   回复 2018年11月21日 下午2:50 沙发

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

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

   - 朱双印 Admin
     回复 2018年11月21日 下午3:08 1层

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

4. 网络游名007 1
   回复 2018年9月30日 上午10:52 板凳

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

6. hello 2
   回复 2017年12月25日 上午8:51 地板

   非常棒，简洁明了

8. 我的电脑 3
   回复 2017年10月13日 下午10:43 4楼

   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循环必须包两层小括号？

   - 朱双印 Admin
     回复 2017年10月14日 上午10:57 1层

     @我的电脑 这是语法规定，不用纠结~~

- 文章目录

×
×
拖拽到此处
图片将完成下载