Shell - 数值运算
因为shell脚本是属于弱语言,没有变量类型的概念,所以定义变量会默认为字符串。就算看上去是一个数字,当直接进行计算时,就会出错:
x=1
echo $x+=1
# 输出1+=1,并不是自己想要的2
所以当我们需要进行数值运算时,我们需要一些特殊的方法,在Linex中提供了好几种方法。
1. 使用 $[]
x=1
echo $[$x+=1]
2. 使用 expr
expr为Linux中的一个命令,可以用于数值计算,也可以用于字符串操作:
x=1
expr 14 % 9
expr 10 + 10
expr $x + 1
# 使用乘号比较特殊,必须用反斜杠
expx $x \* 3
使用expr
也存在缺陷:进行计算的值只能为整数,得到的结果也会以整数形式返回。
3. 使用 (())
相比于$[]
和expr
,这种方式功能比较强大:
- 支持++,--操作
- 支持多个表达式运算,用逗号分隔
- 双括号可以进行逻辑运算,四则运算
- 双括号结构拓展了for,while,if条件测试运算
- 在双括号结构中,所有变量可以不加入
$
符号前缀
x=1
(( y = x + 1,z = y + 1 ))
echo $z
a=10
b=10
total=$((a*b))
4. 使用 let
var=1
# 这种写法运算符间不能有空格
let "var+=1"
let var+=1
echo $var