首页 >> 学习 >> Shell脚本编程基础 >> 算术运算
算术运算

本节重要性:★★★☆☆    本节难度:★★★★☆

算术运算不是Shell语言的长项,Shell只提供了简单的整数运算,如果要在Shell下做浮点数运算,需要使用外部工具如bc。

1. 整数运算

Shell的整数运算符有:

+	对两个变量做加法
-	对两个变量做减法
*	对两个变量做乘法
/	对两个变量做除法
**	对两个变量做幂运算
%	取模运算,第一个变量除以第二个变量求余数
+=	加等于,在自身基础上加第二个变量
-=	减等于,在第一个变量的基础上减去第二个变量
*=	乘等于,在第一个变量的基础上乘以第二个变量
/=	除等于,在第一个变量的基础上除以第二个变量
%=	取模赋值,第一个变量对第二个变量取模运算,再赋值给第一个变量
++	自加1
--	自减1

Bash有4种方法可以做整数运算,expr命令、let命令、(( ))和$[ ]。

(1)expr

expr后面跟的是运算表达式,运算返回值可以用反引号``引用。另外,expr后面的算术表达式中运算符两侧应该有空格,其中的乘法运算符(*)前需有转义符(\),因为Shell中的*是通配符。

[peter@ibi98 shell]$ expr 2 + 3
5
[peter@ibi98 shell]$ expr 3 \* 5
15
[peter@ibi98 shell]$ expr 5 / 2
2
[peter@ibi98 shell]$ sum=`expr 2 + 3`
[peter@ibi98 shell]$ echo $sum
5

Bash的除法运算的结果只取整数部分。

(2)let

与expr不同的是,let后跟的是赋值表达式:

[peter@ibi98 shell]$ let sum=4+5
[peter@ibi98 shell]$ echo $sum
9
[peter@ibi98 shell]$ let product=3*5
[peter@ibi98 shell]$ echo $product
15
[peter@ibi98 shell]$ let a=5/3
[peter@ibi98 shell]$ echo $a
1

let里的*前不需要转义符。

(3)(( ))

(( ))返回表达式运算结果,前面加$引用后可以给变量赋值或直接用echo输出。表达式中的运算符前后可以有空格也可以没有,*前不需要转义符。

[peter@ibi98 shell]$ a=$((5+4))
[peter@ibi98 shell]$ echo $a
9
[peter@ibi98 shell]$ a=$((5*4))
[peter@ibi98 shell]$ echo $a
20
[peter@ibi98 shell]$ echo $((10/2))
5
[peter@ibi98 ~]$ i=0
[peter@ibi98 ~]$ ((i++))
[peter@ibi98 ~]$ echo $i
1

(4)$[ ]

$[ ]的用法与$(( ))类似,但表示整数运算时前面的$不能少,单独的[ ]表示条件测试:

[peter@ibi98 shell]$ a=$[2*3]
[peter@ibi98 shell]$ echo $a
6
[peter@ibi98 shell]$ echo $[10/2]
5

2. 非整数运算

Bash本身并不提供非整数运算。如果要进行浮点数运算,需要使用外部的工具,常用的是bc。bc可以在管道中使用,也可以用-i选项进入交互模式。

[peter@ibi98 shell]$ echo "scale=4;10/3" |bc
3.3333
[peter@ibi98 shell]$ bc -i
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'.
2*3		#输入
6
scale=3		#输入
5/3		#输入
1.666

<<上一节  下一节>>