Bash基础学习(三)-算术运算

算法表达式

1.算数表达式
a. ((...)) 括号中写算式

((...)) 括号中写算式
+:加法
-:减法
*:乘法
/:除法(整除)
%:余数
**:指数
++:自增运算(前缀或后缀)
--:自减运算(前缀或后缀)
如果要读取算术运算的结果,需要在((...))前面加上美元符号$((...)),使其变成算术表达式,返回算术运算的值。
echo $((2+2)) #中间有无空格都可以
i=1
echo $((++i)) #先运算再返回值
j=1
echo $((j++)) #先返回值再运算执行echo

执行结果

2
1

嵌套使用

echo $(((5*2)*3)

((...))内部可以用圆括号改变运算顺序。

echo $(((3+2)*3))

2.数值的进制
Bash 的数值默认都是十进制,但是在算术表达式中,也可以使用其他进制。

  • number:没有任何特殊表示法的数字是十进制数(以10为底)。
  • 0number:八进制数。
  • 0xnumber:十六进制数。
  • base#number:base进制的数。

3.位运算

$((...))支持以下的二进制位运算符。

<<:位左移运算,把一个数字的所有位向左移动指定的位。
>>:位右移运算,把一个数字的所有位向右移动指定的位。
&:位的“与”运算,对两个数字的所有位执行一个AND操作。
|:位的“或”运算,对两个数字的所有位执行一个OR操作。
~:位的“否”运算,对一个数字的所有位取反。
^:位的异或运算(exclusive or),对两个数字的所有位执行一个异或操作。
echo $((16>>2))
echo $((16<<2))
打印结果:
4
64

4.逻辑运算
$((...))支持以下的逻辑运算符。

<:小于
>:大于
<=:小于或相等
>=:大于或相等
==:相等
!=:不相等
&&:逻辑与
||:逻辑或
!:逻辑否
expr1?expr2:expr3:三元条件运算符。若表达式expr1的计算结果为非零值(算术真),则执行表达式expr2,否则执行表达式expr3。
如果逻辑表达式为真,返回1,否则返回0。
echo $((3>1 ? 1:0))
打印结果:
1

5.赋值运算
算术表达式$((...))可以执行赋值运算。

echo $((a=1))
a=1对变量a进行赋值。这个式子本身也是一个表达式,返回值就是等号右边的值。
注:赋值运算时=前后不能有空格

6.求值运算
逗号,在$((...))内部是求值运算符,执行前后两个表达式,并返回后一个表达式的值。

echo $((a=1+2,3+4))
打印结果:
7
echo $a
打印结果:
3

上面例子中,逗号前后两个表达式都会执行,然后返回后一个表达式的值7。
7.expr 命令
expr命令支持算术运算,可以不使用((...))语法。

expr 3+2
打印结果:
3+2
expr 3 + 2
打印结果:
5
结论:使用expr 做算术运算时,算术中间要带空格

expr 命令支持变量替换

tmpNum=3
expr $tmpNum + 2
打印结果:
5

expr命令也不支持非整数参数。

expr 3.5 + 2
打印结果:
expr: not a decimal number: '3.5'
注:expr 命令也不支持非整数参数。

8.let命令
let命令用于将算术运算的结果,赋予一个变量。

let x=2+3
echo $x
5

你可能感兴趣的:(Bash基础学习(三)-算术运算)