Shell的几种计算方式
shell中只支持整数计算,也就是所有可能产生小数的运算都会舍去小数部分
支持常规算术运算符(+,-,*,/,%,**(幂运算))和复合算术运算符(+=,-=,*=,/=,%=)以及位运算(<<,>>,&,|,^,~)和自增自减(++,--)【操作对象只能是变量,不能是常数或表达式】
1. let 计算方式
# let "value=4<<2" # echo $value 16
2.$[]和$(())类似,用于简单的算术运算
# echo $[1+1] 2 # echo $[2-1] 1
3.expr计算方式 (特殊符号需要用转义字符,操作数和操作数之间需要有空格,否则就只会打印出字符串)
# expr 1+1 1+1 # expr 1 + 1 2 # expr 2 * 2 4 # rsult=$(expr 2 * 2) # echo $rsult 4
4.内建运算命令declare (-i 指定变量为整型)
# I=1+1 # echo $I 1+1 # declare -i J # J=1+1 # echo $J 2
5.算术扩展
为shell内置整数变量的运算机制,是shell内建命令之一
语法:$((算术表达式))
# i=2 # echo $((2*i+1)) 5# echo $((2*(i+1))) 6# var=$((2*i+2)) # echo $var 6
6.使用bc做运算 (bc:一款高精度计算语言)
# 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'. a=9 b=5 a+b 14 a-b 4 a*b 45 a/b 1 #设置显示的小数位数 scale=3 a/b 1.800 #比较运算,真为1,假为0 2>1 1 2<1 0 1==1 1 #逻辑运算,真为1,假为0 1&&2 1 1&&0 0 1||0 1 1||2 1 !0 1
动态地给变量赋值:
# NUM01=10 # NUM02=15 # TOTAL=$(echo "$NUM01+$NUM02" | bc) # echo $TOTAL 25
关于bc的更多用法可以参考man文件,比如它和常规编程语言一样的支持顺序执行、判断、循环等运行机制,还支持自定义函数等等,有兴趣的可以深入了解。