元字符
元字符指的是能够被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")