首页 > 代码库 > SHELL脚本攻略(学习笔记)--1.5 进行数学运算

SHELL脚本攻略(学习笔记)--1.5 进行数学运算

使用let、(())或[]进行基本的整数运算,使用expr和bc进行高级的运算,包括小数运算。

[root@xuexi tmp]# str=10[root@xuexi tmp]# let str=str+6[root@xuexi tmp]# let str-=5[root@xuexi tmp]# echo $str

11

还可以自增、自减运算。

[root@xuexi tmp]# let str++;echo $str

12

[root@xuexi tmp]# let ++str;echo $str 

13

[root@xuexi tmp]# let str--;echo $str 

12

[root@xuexi tmp]# let --str;echo $str 

11

如果要让运算处于命令之中,即不需要额外的赋值行为,可以使用$(())。

[root@xuexi tmp]# echo $((str++))

12

[root@xuexi tmp]# echo $((str--))  #从这个结果中是否发现了问题?

13

[root@xuexi tmp]# echo $((str--))

12

[root@xuexi tmp]# echo $((str++))  #还有这个结果

11

[root@xuexi tmp]# echo $((str++))

12

不知道是我计算不来,还是$(())的问题,如果是$(())后缀自加(i++)和后缀自减(i--),则在后缀自增后再后缀自减将再执行一次自增行为,反之自减到自增也是。 

但是使用$(())计算前缀自增和自减变换时没问题,let自增自减也都没有问题。

[root@xuexi tmp]# echo $((--str))

12

[root@xuexi tmp]# echo $((--str))

11

[root@xuexi tmp]# echo $((++str))  #结果正常

12

[root@xuexi tmp]# echo $((++str))

13

[root@xuexi tmp]# echo $((--str))

12

使用[]也可以。

[root@xuexi tmp]# echo $[str=$str+6]  #在[]中使用了变量符号$

18

[root@xuexi tmp]# echo $[str=str+6]  #[]中没有使用$符号

24

但是如果$[$str=str+6]或$[$str=$str+6]将出错。

[root@xuexi tmp]# echo $[$str=str+6]

-bash: 24=str+6: attempted assignment to non-variable (error token is "=str+6")

[root@xuexi tmp]# echo $[$str=$str+6]

-bash: 24=24+6: attempted assignment to non-variable (error token is "=24+6")

总结下变量的运算方法:

[root@xuexi tmp]# i=10[root@xuexi tmp]# let i=i-1[root@xuexi tmp]# let i-=1[root@xuexi tmp]# i=$((i-1))[root@xuexi tmp]# i=$[ i - 1 ]  #中括号隔壁必须写空格[root@xuexi tmp]# i=$[ $i - 1 ]

SHELL脚本攻略(学习笔记)--1.5 进行数学运算