bash在线调试工具:Bash 在线工具 | 菜鸟工具
浮点数的比较有点特殊,无法使用字符串和整型的比较方式,需要使用到额外的命令,命令有好几种,我们就选择内置的命令expr,以免去安装
浮点数比较符
比较符 | 含义 | 运算情况 |
expr == | 等于 | 相等返回 1 |
expr != | 不等于 | 不相等返回 1 |
expr \> | 大于,要使用转义符\ | 大于返回 1 |
expr \>= | 大于等于,要使用转义符\ | 大于等于返回 1 |
expr \< | 小于,要使用转义符\ | 小于返回 1 |
expr \<= | 小于等于,要使用转义符\ | 小于等于返回 1 |
正确用法
#!/bin/bash
function before()
{
# 功能:浮点数计算前的预处理,请调用示例:before 1.1 2.3 +2312.2 $a $b -30.23
# $@:待处理的浮点数,空格隔开
# return:ret_all_para 处理好后的浮点数
all_para=($@)
ret_all_para=()
# 寻找最大的整数位
max_int_num=0
for each in ${all_para[@]}
do
# 去掉符号
if [[ ${each:0:1} == '-' ]] || [[ ${each:0:1} == '+' ]];then
each=${each:1}
fi
int_part_num=`echo $each|cut -d '.' -f 1|wc -m`
if [ $int_part_num -gt $max_int_num ];then
max_int_num=$int_part_num
fi
done
# 不足位数的前方补零
i=0
for each in ${all_para[@]}
do
zero_num=""
# 去掉符号
if [[ ${each:0:1} == '-' ]] || [[ ${each:0:1} == '+' ]];then
each_tmp=${each:1}
else
each_tmp=${each}
fi
int_part_num=`echo $each_tmp|cut -d '.' -f 1|wc -m`
if [ $int_part_num -lt $max_int_num ];then
diff=`expr $max_int_num - $int_part_num`
j=1
while [ $j -le $diff ]
do
zero_num=$zero_num"0"
let j++
done
fi
# 符号处理
if [[ ${each:0:1} == '-' ]];then
each=${each:1}
symbol='0'
elif [[ ${each:0:1} == '+' ]];then
each=${each:1}
symbol='1'
else
symbol='1'
fi
ret_all_para[$i]=$symbol$zero_num$each
let i++
done
}
a=1.1
b=6.1
c=1.1
d=1.4
e=40.1
f=-543.232
before $a $b $c $d $e $f
a=${ret_all_para[0]}
b=${ret_all_para[1]}
c=${ret_all_para[2]}
d=${ret_all_para[3]}
e=${ret_all_para[4]}
f=${ret_all_para[5]}
# 等于
if [[ `expr $a == $c` == 1 ]];then
echo "a == c"
fi
# 不等于
if [[ `expr $a != $b` == 1 ]];then
echo "a != b"
fi
# 大于
if [[ `expr $b \> $a` == 1 ]];then
echo "b > a"
fi
# 大于等于
if [[ `expr $c \>= $a` == 1 ]];then
echo "c >= a"
fi
if [[ `expr $e \>= $b` == 1 ]];then
echo "e >= b"
fi
# 小于
if [[ `expr $a \< $b` == 1 ]];then
echo "a < b"
fi
# 小于等于
if [[ `expr $c \<= $a` == 1 ]];then
echo "c <= a"
fi
if [[ `expr $b \<= $e` == 1 ]];then
echo "b <= e"
fi
# 负数的比较
if [[ `expr $f \<= $a` == 1 ]];then
echo "f <= a"
fi
运行结果
a == c
a != b
b > a
c >= a
e >= b
a < b
c <= a
b <= e
f <= a