Shell允许在某些情况下对算术表达式进行求值,比如:let和declare 内置命令,(( ))复合命令和算术扩展。求值以固定宽度的整数进行,不检查溢出。
文章目录
1 运算表达式
运算表达式
(1) expr 变量1 运算符 变量2 [运算符 变量3]...
(2) let var=算术表达式
(3) ((var=算术表达式)),和上一个等价
(4) var=$[算术表达式]
(5) var=$((算术表达式))
(6) var=$(expr arg1 arg2 arg3 ...)
(7) var= `expr arg1 arg2 arg3 ...`
(8) echo '算术表达式' | bc
运算符:
加法 +
减法 -
乘法 \ *
除法 /
取余 (取模)%
运算法则:
加法: num1 + num2
减法:num1 - num2
乘法:num1 \ * num2
整除:num1 / num2
取余(求模):num1 % num2 (求 num1 除以 num2 的余数)
2 运算演示
2.1 expr
expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。
变量和运算符之间,要用空格隔开。
用反斜杠 \ 放在 shell 特定的字符前面;
对包含空格和其他特殊字符的字符串要用引号括起来
示例
[root@localhost ~]# expr 4 + 3
7
[root@localhost ~]# expr 4 - 3
1
[root@localhost ~]# expr 4 * 3 //乘号前要加反斜杠
12
[root@localhost ~]# expr 10 / 2
5
[root@localhost ~]# expr 10 % 3 //10除以3取余数
1
[root@localhost ~]# expr 1 + 2 \* 3 //先乘除,再加减
7
2.2 let 和 (( ))
let var=算术表达式 和 ((var=算术表达式)) 效果等同。
两者都不返回结果,需要借助echo命令。
示例
[root@localhost ~]# let y=1+2
[root@localhost ~]# echo $y
3
[root@localhost ~]# ((z=1+2))
[root@localhost ~]# echo $z
3
2.3 [ ] 和 [ ]和 []和(( ))
$[ ] 和 $(( ))效果相同,且都支持对变量进行运算。
[root@localhost ~]# echo $[10+3]
13
[root@localhost ~]# echo $[10-3]
7
[root@localhost ~]# echo $[10*3]
30
[root@localhost ~]# echo $[10/3]
3
[root@localhost ~]# echo $[10%3]
1
[root@localhost ~]# a=2
[root@localhost ~]# b=5
[root@localhost ~]# echo $[a+b]
7
[root@localhost ~]# echo $[a*b]
10
[root@localhost ~]# echo $((a+b))
7
[root@localhost ~]# echo $((a*b))
10
3 小数运算(浮点数运算)
3.1 使用bc计算器
Bash内置了对整数运算的支持,但是并不支持浮点运算,而 bc 计算器可以很方便的进行浮点运算。
支持交互式和非交互式两种方式。
使用scale=n可以指定精度,即小数点后的位数。要写在算术表达式之前。
非交互式运算,使用 echo “算术表达式” | bc。 多个算术表达式之间用分号隔开,例如:echo '1+1;2+2" | bc。
示例
[root@localhost ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation,
Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1.1*1.1 //输入1.1*1.1,敲回车
1.2 //返回结果
3.3+3.3
6.6
scale=2 //指定精度,小数点后显示2位
1.1*1.1 //输入1.1*1.1,敲回车
1.21 //显示2位小数
quit //退出计算器
[root@localhost ~]#
3.2 使用awk命令
使用awk进行浮点数的运算,运算结果最多显示6个有效数字。
格式:awk “BEGIN{print 算术表达式}”
示例
[root@localhost ~]# awk "BEGIN{print 6.5+3.4}"
9.9
[root@localhost ~]# awk "BEGIN{print 6.5-3.4}"
3.1
[root@localhost ~]# awk "BEGIN{print 6.5*3.4}"
22.1
[root@localhost ~]# awk "BEGIN{print 6.5/3.4}"
1.91176
[root@localhost ~]# awk "BEGIN{print (6.5-3.4)*7}" //混合运算
21.7