Shell中的数值运算

问题
本案例要求熟悉Linux Shell环境的特点,主要练习以下操作:
使用expr、$[ ]、let等整数运算工具:定义变量X=1234,然后计算X与78的四则运算及求模结果
使用bc实现小数运算操作:以交互方式计算12.34与56.78的四则运算结果,另外再以非交互方式重复上述计算,最多显示4位小数
步骤
实现此案例需要按照如下步骤进行。

步骤一:整数运算工具

1)使用expr命令
乘法操作应采用 * 转义,避免被作为Shell通配符;参与运算的整数值与运算操作符之间需要以空格分开,引用变量时必须加$符号。
首先定义变量X=1234,然后分别计算与78的加减乘除和求模运算结果:

[root@svr5 ~]# X=1234  							//定义变量X
[root@svr5 ~]# expr  $X  +  78  					//加法
1312
[root@svr5 ~]# expr  $X  -  78   					//减法
1156
[root@svr5 ~]# expr  $X  \*  78  					//乘法,操作符应添加\转义
96252
[root@svr5 ~]# expr  $X  /  78  					//除法,仅保留整除结果
15
[root@svr5 ~]# expr  $X  %  78 					//求模
64

2)使用 [ ] 或 []或 [](())表达式
乘法操作*无需转义,运算符两侧可以无空格;引用变量可省略 $ 符号;计算结果替换表达式本身,可结合echo命令输出。
同样对于变量X=1234,分别计算与78的加减乘除和求模运算结果:

[root@svr5 ~]# X=1234   
[root@svr5 ~]# echo $[X+78]
1312
[root@svr5 ~]# echo $[X-78]
1156
[root@svr5 ~]# echo $[X*78]
96252
[root@svr5 ~]# echo $[X/78]
15
[root@svr5 ~]# echo $[X%78]
64

3)使用let命令
expr或 [ ] 、 []、 [](())方式只进行运算,并不会改变变量的值;而let命令可以直接对变量值做运算再保存新的值。因此变量X=1234,在执行let运算后的值会变更;另外,let运算操作并不显示结果,但是可以结合echo命令来查看:

[root@svr5 ~]# X=1234  
[root@svr5 ~]# let X+=78 ; echo $X
1312
[root@svr5 ~]# let X-=78 ; echo $X 
1234
[root@svr5 ~]# let X*=78 ; echo $X 
96252
[root@svr5 ~]# let X/=78 ; echo $X 
1234
[root@svr5 ~]# let X%=78 ; echo $X 
64

步骤二:小数运算工具

1)bc交互式运算
先执行bc命令进入交互环境,然后再输入需要计算的表达式。以计算小数12.34与5.678的四则运算为例,相关操作如下:

[root@svr5 ~]# 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'. 
12.34+56.78										//加法
69.12
12.34-56.78										//减法
-44.44
12.34*56.78										//乘法
700.66
12.34/56.78										//除法
0
quit  											//退出交互计算器
[root@svr5 ~]#

2)bc非交互式运算
将需要运算的表达式通过管道操作交给bc运算。注意,小数位的长度可采用scale=N限制,除此以外也受参与运算的数值的小数位影响。以计算小数12.34与5.678的四则运算为例,相关操作如下:

[root@svr5 ~]# echo 'scale=4;12.34+5.678' | bc
18.018
[root@svr5 ~]# echo 'scale=4;12.34-5.678' | bc 
6.662
[root@svr5 ~]# echo 'scale=4;12.34*5.678' | bc 
70.0665
[root@svr5 ~]# echo 'scale=4;12.34/5.678' | bc 
2.1733

你可能感兴趣的:(Shell中的数值运算)