元字符指的是能够被shell解释的特殊字符,每个特殊字符都有其特殊含义,这些字符一方面可用于变量值的运算、我们可以称之为运算符,另外一方面可以和shell命令配合使用来达到更高级的效果
一 算数运算符
算数运算符需要配合下述操作使用
# 浮点运算 bc # 整数运算 expr $(()) $[] let
bc是比较常用的linux计算工具了,而且支持浮点运算
[root@m01 ~]# res=`echo 1+1 | bc` [root@m01 ~]# echo $res 2 [root@m01 ~]# res=`echo 10 % 3| bc` % 取余数 [root@m01 ~]# echo $res 1 [root@m01 ~]# res=`echo 1.2+1.3|bc` [root@m01 ~]# echo $res 2.5 [root@m01 ~]# res=`echo 5.0+3.0|bc` [root@m01 ~]# echo $res 8.0 [root@m01 ~]# res=`echo "scale=2;5.0/3.0"|bc` / 除(取相除后的值,scale=2保留两位小数) [root@m01 ~]# echo $res 1.66 [root@m01 ~]# res=`echo "scale=3;5.0/6.0"|bc` / 除(取相除后的值,scale=3保留三位小数) [root@m01 ~]# echo $res .833
expr不支持浮点数计算,而且要注意数字与运算符中的空格
[root@m01 ~]# res=`expr 5 / 3` # 不支持浮点计算 [root@m01 ~]# echo $res 1 [root@m01 ~]# res=`expr 1+1` # 注意:要有空格 [root@m01 ~]# echo $res 1+1 [root@m01 ~]# res=`expr 1 + 1` [root@m01 ~]# echo $res 2 如果是乘法,需要转义\* [root@m01 ~]# expr 3 \* 10 30
$(( )) 同expr,不支持浮点数运算
[root@m01 ~]# echo $((1+1)) 2 [root@m01 ~]# echo $((1.0+1.0)) $(())不支持浮点数运算 -bash: 1.0+1.0: syntax error: invalid arithmetic operator (error token is ".0+1.0") # 注意: echo $(($num1+$num2)) # 也可以简写为 echo $((num1+num2)) echo $(((5-3)*2)) # 可以嵌套括号
let 不支持浮点数运算,而且不支持直接输出,只能赋值
[root@m01 ~]# let res=1+1 [root@m01 ~]# echo $res 2 [root@m01 ~]# let res=10/2 [root@m01 ~]# echo $res 5 [root@m01 ~]# let c=1.3*3 -bash: let: c=1.3*3: syntax error: invalid arithmetic operator (error token is ".3*3")