算术运算:
Shell允许在某些情况下对算术表达式进行求值,比如:let和declare 内置命令,(( ))复合命令和算术扩 展。求值以固定宽度的整数进行,不检查溢出,尽管除以0 被困并标记为错误。运算符及其优先级,关 联性和值与C语言相同。以下运算符列表分组为等优先级运算符级别。级别按降序排列优先。
注意:bash 只支持整数,不支持小数
乘法符号有些场景中需要转义
实现算术运算:
(1) let var=算术表达式
(2) ((var=算术表达式)) 和上面等价
(3) var=$[算术表达式]
(4) var=$((算术表达式))
(5) var=$(expr arg1 arg2 arg3 ...)
(6) declare -i var = 数值
(7) echo '算术表达式' | bc (只有bc支持小数点运算)
其他运算方式都不支持小数点运算
举例演示:但是结果运算不是外面想要的结果?怎么办?
let var=算术表达式
var=$[算术表达式]
var=$((算术表达式))
echo '算术表达式' | bc
expr运算
[root@centos8 ~]# type expr expr is /usr/bin/expr [root@centos8 ~]# expr 2 + 57[root@centos8 ~]# expr 2+52+5[root@centos8 ~]# expr 3 + 58[root@centos8 ~]# expr 4 + 59[root@centos8 ~]# expr 4 / 22[root@centos8 ~]# expr 4 / 50[root@centos8 ~]# expr 4 * 5expr: syntax error: unexpected argument ‘1.txt’ [root@centos8 ~]# expr 4 \* 520[root@centos8 ~]# expr (4 * 5)-bash: syntax error near unexpected token `4'[root@centos8 ~]#
其他运算方式都不支持小数点运算,所以4/5,结果为0
重点理解:
[root@centos8 ~]# i=100[root@centos8 ~]# [root@centos8 ~]# let i++[root@centos8 ~]# echo $i101[root@centos8 ~]# let ++i [root@centos8 ~]# echo $i102
[root@centos8 ~]# i=100;let j=i++;echo i=$i,j=$j
i=101,j=100
说明:j=i++, i在前先用,先把j=i,然后再给i赋值去加+,因为j=i,i的初始值100,i得加1是101,j还是100
[root@centos8 ~]# i=100;let j=++i;echo i=$i,j=$j
i=101,j=101
说明:j=++i,1++;i在后,+在前相当于是先加,i就是100+1,最后赋值给j,j=i=101
j=i++, i在前先用,先把j=i,然后再给i赋值去加+,因为j=i,i的初始值100,i得加1是101,j还是100
j=++i,1++;i在后,+在前相当于是先加,i就是100+1,最后赋值给j,j=i=101