shell从入门到精通(11)Shell算术运算

Posted 奇妙之二进制

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell从入门到精通(11)Shell算术运算相关的知识,希望对你有一定的参考价值。

如果要执行算术运算(数学计算),就离不开各种运算符号,和其他编程语言类似,Shell 也有很多算术运算符,下面就给大家介绍一下常见的 Shell 算术运算符,如下表所示。

算术运算符说明/含义
+、-加法(或正号)、减法(或负号)
*、/、%乘法、除法、取余(取模)
**幂运算
++、–自增和自减,可以放在变量的前面也可以放在变量的后面
!、&&、||逻辑非(取反)、逻辑与(and)、逻辑或(or)
<、<=、>、>=比较符号(小于、小于等于、大于、大于等于)
==、!=、=比较符号(相等、不相等;对于字符串,= 也可以表示相当于)
<<、>>向左移位、向右移位
~、|、 &、^按位取反、按位或、按位与、按位异或
=、+=、-=、*=、/=、%=赋值运算符,例如 a+=1 相当于 a=a+1,a-=1 相当于 a=a-1但是,Shell 和其它编程语言不同,Shell 不能直接进行算数运算,必须使用数学计算命令,这让初学者感觉很困惑,也让有经验的程序员感觉很奇葩。

下面我们先来看一个反面的例子:

$ a=2+8                                                                          130
$ echo $a        
2+8
$ a=2  
$ b=3      
$ echo $a + $b               
2 + 3

从上面的运算结果可以看出,默认情况下,Shell 不会直接进行算术运算,而是把+两边的数据(数值或者变量)当做字符串,把+当做字符串连接符,最终的结果是把两个字符串拼接在一起形成一个新的字符串。

这是因为,在 Bash Shell 中,如果不特别指明,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。

换句话说,Bash shell 在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为字符串,这一点和大部分的编程语言不同。

shell提供了很多方法,我记住最简单有用的一种即可,$((算术表达式))。

$ echo $((1+2))                                                                    1
3
$ a=1
$ b=2
$ echo $(($a+$b))
3

括号内的表达式随便你写,基本上符合C语言表达式的写法都可以。

例如,除了可以是算术运算表达式,还可以是逻辑运算表达式:

$ echo $((1+2 && 0))
0
$ echo $((1+2 && 1))
1

以上是关于shell从入门到精通(11)Shell算术运算的主要内容,如果未能解决你的问题,请参考以下文章

shell从入门到精通(15)双中括号[[]]用法

Shell编程Shell从入门到精通

Shell脚本入门 04:算术与逻辑运算

京峰Linux Shell编程从入门到精通

shell脚本从入门到精通(中级)之提高篇

shell从入门到精通(-1)初次会面运行第一个shell脚本