Shell变量的数值运算

Shell变量的数值运算

1 expr

# 只能做整数运算,运算符前后必须有空格,乘法需要转义。
[root@shell ~]# expr 10 + 1
11
[root@shell ~]# expr 10 - 1
9
[root@shell ~]# expr 10 \* 3
30
[root@shell ~]# expr 10 / 3
3

# 针对变量
[root@shell ~]# num1=10
[root@shell ~]# num2=20
[root@shell ~]# expr $num1 + $num2
30

2 (())

# $(())双括号是运算,单括号是变量 $(date)。只支持整数运算,是效率最高的大运算。
[root@shell ~]# echo $((10+10))
20
[root@shell ~]# echo $((10-10))
0
[root@shell ~]# echo $((10*10))
100
[root@shell ~]# echo $((10/10))
1
[root@shell ~]# echo $((10+10-5))
15
[root@shell ~]# echo $((10+10-5*6))
-10

num1=10
num2=20
[root@shell ~]# echo $(($num1*$num2))
200

3 $[]

# 做整数运算
[root@shell ~]# echo $[10+10]
20
[root@shell ~]# echo $[10+10*20]
210
[root@shell ~]# echo $[10+10*20-1000]
-790
[root@shell ~]# echo $[10+10*20/1000]
10

4 let

# 整数运算,运算的结果需要用变量接收
[root@shell ~]# let a=10+10
[root@shell ~]# echo $a
20
[root@shell ~]# let a=10*10
[root@shell ~]# echo $a    
100
[root@shell ~]# let a=10/10
[root@shell ~]# echo $a    
1
[root@shell ~]# let a=$num1+$num2
[root@shell ~]# echo $a
30
[root@shell ~]# let i++
[root@shell ~]# echo $i
1
[root@shell ~]# let i++
[root@shell ~]# echo $i
2
[root@shell ~]# let i++
[root@shell ~]# echo $i
3

5 bc

# 整数及小数运算
# bc运算
[root@shell ~]# echo 10*10|bc
100
[root@shell ~]# echo 10*10.5|bc
105.0
[root@shell ~]# echo 10-5.5|bc 
4.5
[root@shell ~]# echo 10/5.5|bc
1

# awk运算
[root@shell ~]# awk 'BEGIN{print 10+10}'
20
[root@shell ~]# awk 'BEGIN{print 10-10}'
0
[root@shell ~]# awk 'BEGIN{print 10*10}'
100
[root@shell ~]# awk 'BEGIN{print 10/10}'
1
[root@shell ~]# awk 'BEGIN{print 10^10}'
10000000000
[root@shell ~]# awk 'BEGIN{print 10-4.5}'
5.5
[root@shell ~]# awk 'BEGIN{print 10*4.5}'
45
[root@shell ~]# awk 'BEGIN{print 10/4.5}'
2.22222

6 小结

expr $(()) $[] let:只能做整数运算,$(())大运算效率最高
bc awk python:支持整数和小数运算