简单方法
((i=$j+$k)) 等价于 i=`expr $j + $k`
((i=$j-$k)) 等价于 i=`expr $j - $k`
((i=$j*$k)) 等价于 i=`expr $j \* $k`
((i=$j/$k)) 等价于 i=`expr $j / $k`
Let expressions 执行一个或多个表达式。表达式中的变量前不必有$.如果表达式中包含了空格或其他特殊字符,则必须引起来。
例:let “I = I + 1” 或 let i=i+1
算术运算符指的是可以在程序中实现加、减、乘、除等数学运算的运算符。Shell中常用的数学运算符如下所示。
+:对两个变量做加法。
-:对两个变量做减法。
*:对两个变量做乘法。
/:对两个变量做除法。
**:对两个变量做幂运算。
%:取模运算,第一个变量除以第二个变量求余数。
+=:加等于,在自身基础上加第二个变量。
-=:减等于,在第一个变量的基础上减去第二个变量。
*=:乘等于,在第一个变量的基础上乘以第二个变量。
/=:除等于,在第一个变量的基础上除以第二个变量。
%=:取模赋值,第一个变量对第二个变量取模运算,再赋值给第一个变量。
在使用这些运算符时,需要注意到运算顺序的问题。例如输入下面的命令,输出1+2的结果。
echo 1+2
Shell并没有输出结果3,而是输出了1+2。在shell中有三种方法可以更改运算顺序。
用expr改变运算顺序。可以用echo expr 1 +2
来输出1+2的结果,用expr表示后面的表达式为一个数学运算。需要注意的是,`并不是一个单引号,而是“Tab”键上面的那个符号。
用let指示数学运算。可以先将运算的结果赋值给变量b,运算命令是let b=1+2。然后用echo $b来输出b的值。如果没有let,则会输出1+2。
用$[] 表示数学运算。将一个数学运算写到$[] 符号的中括号中,中括号中的内容将先进行数学运算。例如命令echo $[1+2],将输出结果3。
浮点运算
expr 5.0 - 4
expr: 非法参数
echo $((5.0-4))
-bash: 5.0-4: syntax error in expression (error token is “.0-4”)
从上面运算结果,看来上面表达式,不足以支持浮点运算了。查阅资料才发现:bash 不支持浮点运算,如果需要进行浮点运算,需要借助bc,awk 处理。
方法一:
c=$(echo "5.01-4*2.0"|bc)
echo $c
-2.99
方法二:
c=$(awk 'BEGIN{print 7.01*5-4.01 }')
echo $c
31.04
如果两个操作数是保存在变量中,必然 a=2.2,b=5,需要计算a除以b该怎么操作呢? awk ‘{print
a
/
a/
a/b}’,很可惜,这样是不行的,似乎在awk里面无法通过$a来获取变量的值,但是可以通过echo的方式把变量值传入, echo “$a $b” | awk ‘{print $1/$2}’,这样就可以了,如果还有操作数,都加在echo中就行了
注:在shell 中$() 与 ``等效。 中间包含命令语句执行,返回执行结果。