Bash脚本编程之算术运算
简介
Bash所支持的算术运算和C语言是一样的,这里指的是操作符(operator)以及它们的优先级(precedence)、结合性(associativity)和值,详见Shell Arithmetic (Bash Reference Manual)。
注意:如果乘号“*”在某些场景中失效,有可能是它被解释成了通配符,可尝试对其转义。
+=
在上面这个简单的算术运算中,1和2叫做操作数/运算元(operand),“+”加号叫做操作符/运算符(operator),1+2整个叫做算术表达式(arithmetic expression),对于算术表达式的求值过程叫做evaluate。
在bash脚本编程中,变量的默认类型是字符串型,因此是无法直接执行算术运算的。
[root@c7-server ~]# num1=
[root@c7-server ~]# num2=
[root@c7-server ~]# echo $num1+$num2
+
即便是使用declare命令显式声明变量为整型,也是不行的。
[root@c7-server ~]# declare -i num1=
[root@c7-server ~]# declare -i num2=
[root@c7-server ~]# echo $num1+$num2
+
在bash中,想要支持算术运算有以下四种方式:
方法一:内置命令let
let arg [arg ...]
每个arg,都是一个算术表达式。
[root@c7-server ~]# num1=
[root@c7-server ~]# num2=
[root@c7-server ~]# let sum=$num1+$num2
[root@c7-server ~]# echo $sum
一般都会使用一个变量来存储算术表达式的结果,let命令本身是不会将算术表达式的结果返回的。
[root@c7-server ~]# let $num1+$num2
[root@c7-server ~]#
方法二:$[ARITHMETIC EXPRESSION]
这种方式,马哥有提到,但是在bash的手册中似乎没找到。应该是一种非官方的方式,慎用。(后续在条件和循环结构体的博文中,涉及的算术运算很多都使用了这种方式,当时给忘记了,大家尽量避免使用这种方式)
[root@c7-server ~]# sum=$[$num1+$num2]
[root@c7-server ~]# echo $sum
方法三:Bash算术展开
这个是bash自身支持的shell展开中的一种。Arithmetic Expansion (Bash Reference Manual)
$(( ARITHMETIC EXPRESSION ))
[root@c7-server ~]# sum=$(($num1+$num2))
[root@c7-server ~]# echo $sum
方法四:外部命令expr
需要使用命令替换的方式来赋值。
[root@c7-server ~]# expr $num1 + $num2 [root@c7-server ~]# sum=$(expr $num1 + $num2)
[root@c7-server ~]# echo $sum
操作符的两边需要有空格,不然操作符无法被正确解释。
[root@c7-server ~]# expr $num1+$num2
+
总结
内置命令let和shell展开中的算术展开是bash所自带的算术运算方式,比较推荐使用这类方式;外部命令expr是来自于CentOS所提供的程序包coreutils;最后的$[...]没有找到其来源,可以不使用它。
在本实例中只展示了简单的加法运算,在实际使用当中会比较复杂,建议用户可使用一种方式(如算术展开)来熟练即可。
Bash脚本编程之算术运算的更多相关文章
- 高级bash脚本编程(三)
高级bash脚本编程 知识点 compound 和 comparison -a 逻辑与 exp1 -a exp2 如果表达式 exp1 和 exp2 都为真的话,那么结果为真. -o 逻辑或 exp1 ...
- bash脚本编程知识储备
bash脚本编程: 脚本程序:解释器解释执行: 首先得理清一些琐碎的知识点,我尽量把我所学的帮朋友一起梳理一下 编程环境:(我会在接下来的篇章,图文例子三结合的方式带大家一起学习) ...
- Bash脚本编程学习笔记07:循环结构体
本篇中涉及到算术运算,使用了$[]这种我未在官方手册中见到的用法,但是确实可用的,在此前的博文<Bash脚本编程学习笔记03:算术运算>中我有说明不要使用,不过自己忘记了.大家还是尽量使用 ...
- 脚本命令高级Bash脚本编程指南(31):数学计算命令
题记:写这篇博客要主是加深自己对脚本命令的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢. 高等Bash脚本编程指南(31):数学盘算命令 成于坚持,败于止步 操作数字 factor ...
- 高级Bash脚本编程指南(27):文本处理命令(三)
高级Bash脚本编程指南(27):文本处理命令(三) 成于坚持,败于止步 处理文本和文本文件的命令 tr 字符转换过滤器. 必须使用引用或中括号, 这样做才是合理的. 引用可以阻止shell重新解释出 ...
- 高级Bash脚本编程指南《Advanced Bash-Scripting Guide》 in Chinese
<Advanced Bash-Scripting Guide> in Chinese <高级Bash脚本编程指南>Revision 10中文版 在线阅读链接:http://ww ...
- 高级Bash脚本编程(二)
高级Bash脚本编程(二) 退出 退出状态码 退出:exit 被用来结束一个脚本,它也返回一个值,并且这个值会传递给脚本的父进程,父进程会使用这个值做下一步的处理. 每个命令都会返回一个退出状态码,成 ...
- 高级Bash脚本编程(一)
高级Bash脚本编程 Bash 它是能力很强的计算机语言,被称为解释性语言或脚本语言,它可以调用所有的UNIX命令和工具再加上公共程序. Bash中的特殊字符 注释(#) (除#!外,#!是用于指定当 ...
- Bash脚本编程总结
bash脚本编程之用户交互: read [option]… [name …] -p ‘PROMPT’ -t TIMEOUT bash -n /path/to/some_script 检测脚本中的 ...
随机推荐
- Ubuntu 一键伪装成Win 10,Kali Linux 2019 kali-undercover软件嫁接;
今天,下午刷手机的时候,突然看到kali出了一个非常新颖的主题:该主题可以使得kali系统伪装成windows 10而变得低调起来:就像下面这样: 具体新闻链接:https://www.freebuf ...
- SpringMVC 前端传递list到后台
---恢复内容开始--- 1.前端获取传入后台的list 2.ajax写法: $.ajax({ type: 'post', url: url, async:false, dataType:" ...
- 九、Spring Boot 优雅的实现CORS跨域
前言 我们的springboot 架手架已经包含了mysql,redis,定时任务,邮件服务,短信服务,文件上传下载,以及docker-compose 构建镜像等等. 接下来让我们解决另一个常见的问题 ...
- 侠梦说pinpoint--左侧服务地图调用量和WasOn过滤
前言 这篇文章主要是从pinpoint-web界面入手,我们的目标是弄清楚两个问题: 1. pinpoint左侧服务地图上的调用量数据是怎么查询的? 2.界面查询条件WasOnly是什么意思? 左侧服 ...
- ThinkPHP5——安装验证码和使用
1.使用composer安装验证码 首先要安装composer,大部分“composer require topthink/think-captcha”命令无法运行或者提示不是内部文件或可执行命令,都 ...
- PHP数组总汇
数组,顾名思义,本质上就是一系列数据的组合.在这个组合中,每个数据都是独立的,可以对每个单独的数据进行分配和读取.PHP对数据的操作能力非常强大,尤其是PHP为程序开发人员提供了大量方便.易懂的数组操 ...
- Android实现图片一边的三角形边框
在每一个图片的某一侧都可以展示出一个三角形的边框视图,就是咱们的三角形标签视图.这个视图在电商类APP当中比较常用,使用过ebay的同学应该都还记得有些商品的左上角或者右上角都会显示一个三角形的边框, ...
- TC297B - 外设头文件解析(以IO为例)
打开例程,目录树下的Includes中包含了各个片上资源对应的头文件,这些头文件定义了相应外设的寄存器地址(寄存器是内置于各个 IP 外设中,是一种用于配置外设功能的存储器,就是一种内存,并且有相对应 ...
- png兼容IE6的方法
1.通过CSS滤镜使背景图的PNG对IE6进行兼容 定义一个样式,给某个div应用这个样式后,div的透明png背景图片自动透明了. <style> body{background: li ...
- windows下RocketMQ下载安装教程
一.下载(原文链接:http://www.studyshare.cn/software/details/1183/0 ) 1.官网下载:下载地址 2.百度网盘下载:下载地址 提取码:0g5a ja ...