比较:
方法一: if [ ${A} -lt ${B} ]; then …
这是最基本的比较方法,使用lt(小于),gt(大于),le(小于等于),ge(大于等于),优点:还没发现;缺点:只能比较整数,使用lt,gt等不直观
方法二: if ((${A} < ${B})) then …
这是CShell风格比较,优点:不用使用lt,gt等难记的字符串;缺点:还是只能比较整数
方法三: if (echo ${A} ${B} | awk ‘!($1>$2){exit 1}’) then …
这是使用awk比较,优点:可以比较小数;缺点:表达式太复杂,难记
方法四: if (echo ${A} – ${B} | bc -q | grep -q “^-”); then …
这是使用bc计算比较,优点:可以比较小数;缺点:表达式更复杂,难记
计算:
方法一:typeset C=$(expr ${A} + ${B});
SHELL中的基本工具,优点:方便检测变量是否为数字;缺点:只能计算整数,且只能计算加减法,不能计算乘除法
方法二:let “C=${A}+${B}”; 或 let “C=A+B”
内嵌命令计算,优点:能计算乘除法及位运算等;缺点:只能计算整数
方法三:typeset C=$((A+B))
CShell风格的计算,优点:能计算乘除法及位运算等,简介,编写方便;缺点:不能计算小数
方法四:typeset C=${echo ${A} ${B} | awk ‘{print $1+$2}’)
使用awk计算,优点:能计算小数,可以实现多种计算方式,计算灵活;缺点:表达式太复杂
方法五:typeset C=${echo ${A} + ${B} | bc -q)
使用awk计算,优点:能计算小数,计算方式比awk还多,计算灵活;缺点:表达式太复杂,小数点后面的位数必须使用scale=N来设置,否则可能会将结果截断为整数
【以上是转帖,正确性未经验证】
【以下是自己亲自验证过的】:
(1)除法运算
经过验证可行的除法运算①(含小数):
RESULT=`echo "scale=1; $A/$B" | bc`
表示变量A除以变量B,结果保留1位小数,最终结果保存在RESULT中。如果系统中没有安装“bc”程序,这条命令就行不通了,那么就可以使用下面的命令。
经过验证可行的除法运算②(含小数):
RESULT=`awk 'BEGIN{printf "%.1f", '$A'/'$B'}'`
实现的效果与上面的那条命令完全相同。
(2)两个小数的大小比较
不能用 gt,lt 等来判断,因为它们只支持整数。小数的大小比较可以用下面的方法:
expr $A \> $B
返回1表示A>B, 返回0表示A<B。