bash中的算术

expr

expr命令是最常用的计算命令,但是expr只能进行整数计算,另外若要使用括号和乘法,需要转义\* \( \)避免shell中的特殊含义。

expr 2 + 4
expr 2 \* 4

注意全部都要空白分割。
另外,expr除了支持简单运算和数字比较外,还支持一些字符串运算。请详查其文档。

可以计算小数的bc

echo "scale=2; 3.3 + 3.4" | bc
bc <<< "scale=2; 3.3 + 3.4"

bc是个强大的计算工具,还有内置数学库,可以计算诸如三角函数类的运算。
另外还有不直观略显复杂的的dc,不写了。

awk也能算

echo 2.2 3.1 |awk '{print $1+$2}'

let和双圆括号(())

let命令是bash中用于整数计算的工具,提供常用运算符还提供了方幂**运算符。在变量的计算中不需要加上$来表示变量,如果表达式的值是非0,那么返回的状态值(即$?)是0;否则,返回的状态值是1。

let命令用空格分割每个计算式, 可以指定多个计算式,比如let a=5+4 b=9-3; echo $a $b, 单个表达式有空格的话需要加引号,即let "a = 5 + 4",注意和expr的区别,expr中都要空白分割的。

双圆括号(())是bash的算术运算语法,其中的变量可以加$也可以不加,等同于let计算一个表达式;双圆括号外不加$的话无法取出结果,但运算还是执行了的。

$[]也可以执行算术运算,旧形式。

这样,对变量i加1就有下面几种形式:

i=`expr $i + 1`;
let i+=1;
((i++));
i=$[$i+1];
i=$(( $i + 1 ))

发表评论

电子邮件地址不会被公开。 必填项已用*标注