简介

Bash所支持的算术运算和C语言是一样的,这里指的是操作符(operator)以及它们的优先级(precedence)、结合性(associativity)和值,详见Shell Arithmetic (Bash Reference Manual)。

注意:如果乘号“*”在某些场景中失效,有可能是它被解释成了通配符,可尝试对其转义。

1+2=3

在上面这个简单的算术运算中,1和2叫做操作数/运算元(operand),“+”加号叫做操作符/运算符(operator),1+2整个叫做算术表达式(arithmetic expression),对于算术表达式的求值过程叫做evaluate。

在bash脚本编程中,变量的默认类型是字符串型,因此是无法直接执行算术运算的。

[root@c7-server ~]# num1=3
[root@c7-server ~]# num2=4
[root@c7-server ~]# echo $num1+$num2
3+4

即便是使用declare命令显式声明变量为整型,也是不行的。

[root@c7-server ~]# declare -i num1=3
[root@c7-server ~]# declare -i num2=4
[root@c7-server ~]# echo $num1+$num2
3+4

方法

在bash中,想要支持算术运算有以下四种方式:

方法一:内置命令let

let arg [arg ...]

每个arg,都是一个算术表达式。

[root@c7-server ~]# num1=5
[root@c7-server ~]# num2=10
[root@c7-server ~]# let sum=$num1+$num2
[root@c7-server ~]# echo $sum
15

一般都会使用一个变量来存储算术表达式的结果,let命令本身是不会将算术表达式的结果返回的。

[root@c7-server ~]# let $num1+$num2
[root@c7-server ~]#

方法二:$[ARITHMETIC EXPRESSION]

这种方式,马哥有提到,但是在bash的手册中似乎没找到。应该是一种非官方的方式,慎用。

[root@c7-server ~]# sum=$[$num1+$num2]
[root@c7-server ~]# echo $sum
15

方法三:Bash算术展开

这个是bash自身支持的shell展开中的一种。Arithmetic Expansion (Bash Reference Manual)

$(( ARITHMETIC EXPRESSION ))
[root@c7-server ~]# sum=$(($num1+$num2))
[root@c7-server ~]# echo $sum
15

方法四:外部命令expr

需要使用命令替换的方式来赋值。

[root@c7-server ~]# expr $num1 + $num2
15
[root@c7-server ~]# sum=$(expr $num1 + $num2)
[root@c7-server ~]# echo $sum
15

操作符的两边需要有空格,不然操作符无法被正确解释。

[root@c7-server ~]# expr $num1+$num2
5+10

总结

内置命令let和shell展开中的算术展开是bash所自带的算术运算方式,比较推荐使用这类方式;外部命令expr是来自于CentOS所提供的程序包coreutils;最后的$[…]没有找到其来源,可以不使用它。

在本实例中只展示了简单的加法运算,在实际使用当中会比较复杂,建议用户可使用一种方式(如算术展开)来熟练即可。

Bash脚本编程之算术运算相关推荐

  1. bash脚本编程之算术运算:加减乘除

    编写shell脚本 vim 6.sh 回车 a或i 进入编辑 #! /bin/bash read -p "input number: " a read -p "input ...

  2. 高级Bash脚本编程指南《Advanced Bash-Scripting Guide》 in Chinese

    <Advanced Bash-Scripting Guide> in Chinese <高级Bash脚本编程指南>Revision 10中文版 在线阅读链接:http://ww ...

  3. bash脚本编程入门_Bash编程入门

    bash脚本编程入门 对Unix的最初希望之一是,它将使日常的计算机用户能够微调其计算机以适应其独特的工作风格. 在过去的几十年中,对计算机定制的期望已经降低,许多用户将他们收集的应用程序和网站视为他 ...

  4. linux bash脚本编程知识点

    bash变量类型: 环境变量 本地变量(局部变量) 位置变量 特殊变量 本地变量: set VARNAME=VALUE: 作用域为整个bash进程: 引用变量 $(varname) 局部变量: loc ...

  5. linux的逻辑运算参数,Linux基础之bash脚本编程初级-逻辑运算与测试

    引言 前面介绍了bash编程的基础变量与算术表达式,本文介绍在脚本中的进阶知识:测试 在bash中测试大体分两部分:条件测试.组合测试. 而条件测试又分:数值测试.字符串测试.文件测试. 组合测试则有 ...

  6. bash脚本编程之条件判断、条件测试

    脚本编程: 编程面向过程有如下几种执行方式 顺序执行 选择执行:  如 if, case 循环执行:  如 for, while, until bash的变量类型: 本地变量 set VAR_NAME ...

  7. linux内核与bash脚本接囗,Bash脚本编程之脚本基础和bash配置文件

    脚本基础 不严谨地说,编程语言根据代码运行的方式,可以分为两种方式: 编译运行:需要先将人类可识别的代码文件编译成机器可运行的二进制程序文件后,方可运行.例如C语言和Java语言. 解释运行:需要一个 ...

  8. Bash脚本编程学习笔记02:脚本基础和bash配置文件

    脚本基础 参考资料:Shell Scripts (Bash Reference Manual) 不严谨地说,编程语言根据代码运行的方式,可以分为两种方式: 编译运行:需要先将人类可识别的代码文件编译成 ...

  9. linux脚本编程if[-z],Linux基础之bash脚本编程进阶篇-选择执行语句(if,case)

    bash脚本的书写规范简介 看本文需要了解的脚本撰写习惯:bash 开头顶格写#!紧接着写解释器路径/bin/bash 由于bash属于脚本语言,脚本语言的运行方式 解释运行:源代码 --> 运 ...

最新文章

  1. 米莱狄机器人怎么那么多_王者荣耀排位遇到米莱狄太恶心?三大短板可以轻松克制!...
  2. JS高级-闭包-this指向
  3. java在退出前释放资源_Java中如何通过try优雅地释放资源?
  4. 在一个Java版本上运行Eclipse IDE,但在另一个Java版本上运行
  5. 安装音量控制程序 WINDOWS
  6. 系统设计之路:如何设计一个URL短链服务
  7. 使用 HTML5 控制摄像头摄像和拍照
  8. 单片机c语言小灯闪烁,单片机c语言闪烁灯程序.doc
  9. Octane帮助文档中英双语版免费下载、oc用户手册、oc帮助手册
  10. linux 内核 mtd读取,linux内核 mtd分区
  11. 淘宝补单可以补金币数据吗?大神导航,一个神奇的网站,从此开启大神之路!
  12. Mybatis的collection和association
  13. maven-compiler-plugin 插件配置详解
  14. 员工晒出60后、70后、80后、90后辞职原因,80后回复:我不服
  15. HTML开心餐厅网页制作,开心餐厅技巧经验总结
  16. 证券市场基础知识(一)——证券市场概述
  17. 好记性不如烂笔头、多记笔记、多总结、多反思
  18. 图解 Vue3.0 编译器核心原理(Vue3.0源码解析)
  19. python表格处理实例_python列表格
  20. OpenCV学习记录(三):简单的使用图像掩膜提取图像中感兴趣对象

热门文章

  1. arcgis 9.3 许可文件过期问题及解决办法(有2048年过期许可)
  2. 智能公厕的厕所智能管护软件
  3. 【英语月总】我真的意识到英语的重要性了吗
  4. windows11 安装R与Rstudio
  5. LeetCode——802. 找到最终的安全状态(Find Eventual Safe States)[中等]——分析及代码(Java)
  6. Android开发——AS插件批量解决XML中的String/Color/Dimen硬编码
  7. redis 管理工具比对
  8. 28.EXTI外部中断原理与配置
  9. C++ perimer plus 第三章!
  10. Photoshop CS5初学者必读(29)——通道混合器