1、概述
shell中无法直接进行算数运算,直接进行会变成字符串之间的合并
常用算数运算方式
(1) 使用let命令进行算术运算,只支持整数运算。
(2) 使用expr命令进行算术运算,只支持整数运算。
(3) 使用bc命令进行算术运算,支持小数运算。
(4) 使用运算语法:$[算术表达式],只支持整数运算。
(5) 使用运算语法:$((算术表达式)),只支持整数运算。
(6) 在初始化变量时,将变量定义为”整数”类型,则可直接进行整数运算。
2、let命令进行整数运算
let命令是shell的内建命令,我们可以借助let命令进行整数运算,这种方法只支持整数运算,不支持包含小数的运算
例:
let a=1+1;echo $a
b=1;c=2;let d=${b}+${c};echo $d
这种方法需要借助一个变量,将计算后的值赋值给这个变量后进行输出,但是let命令是shell内建命令,这是它的优势,只要当前服务器上
存在shell,即可使用它进行整数运算。
3、expr命令进行算术运算
expr命令也支持算术运算功能,虽然它的功能不止于此,但是此处我们只使用它进行算术运算,expr命令与let命令相似,也只能进行整数运
算,而且,使用expr命令进行算术运算时,需要注意以下两点
1、数值与运算符号之间需要用空格隔开,否则无法进行算术运算,不加空格会变成字符串合并。
2、使用expr命令进行乘法运算时,需要将”乘号”转义,否则会报错。
例:
expr 1+2 ==>1+2
expr 1 + 2 ==>3
expr 2 \* 5 ==>10
a=1;b=2;expr ${a} + ${b}
4、bc命令进行算术运算
bc命令大家可能已经很熟悉了,它是linux下最常用的”计算器”,我们可以借助bc命令进行算术运算,使用这种方法的优势就是支持小数运算。
注意:在使用”除法”时,需要指定小数点精度,否则运算结果中不会包含小数,使用scale指定小数点精度
例:
echo "1.111+2.222"|bc ==>3.333
echo "8/3"|bc ==>2
echo "scale=2;8/3"|bc ==>2.66
当使用bc命令时,如果运算结果为不到1的小数,则不会显示小数点前面的”零”,
echo "0.5+0.2"|bc ==>.7 ##少了最前面的0
除了使用管道,将echo输出的内容重定向到bc,还可以使用如下方法利用bc,它们是等效的。
a=1;b=2;bc<<< ${a}+${b} ###
${a}+${b} >>>bc 就会报错
5、使用运算语法 $[算术表达式]
变量不能是小数,可以直接进行/除号,不输出小数部分
echo $[1+2]
a=1;b=2;echo $[${a}+${b}]
a=5;b=2;echo $[${a}/${b}]
6、使用运算语法 $((算术表达式))
和$[算术表达式]基本上一致
变量不能是小数,可以直接进行/除号,不输出小数部分
echo $((5/2))
7、将变量声明为整形
这种方法也比较简单,可以直接将变量声明为”整数”,然后即可直接进行整数运算,计算过程必须都是整数,结果s有小数也会忽略
示例如下:
declare -i s
s=(1+4)/2
echo $s ==>2