POSIX 浮动比较

POSIX 浮动比较

使用遗留系统,在这里我连接 sqlplus 将返回值存储在变量中,它对我来说工作得很好,但与浮点值a numeric/floating comparison和返回值进行比较的问题可能是 0.052 或 0.0032 或整数值,到目前为止据我所知,Bash 不支持 float 比较,bc 在 POSIX 中也不支持

isubsCount=$( sqlplus -s user/pass <<-EOF
    set pagesize 0;
    set feedback off;
    set verify off;
    set heading off echo off;
    select  to_char((Max(start_time_timestamp+ (2/24))- p.port_statusmoddat), 999.999) Diff
    from  test
    exit;
EOF )


if [ ${isubsCount%.*} -ge 1 ]; then

echo yes

fi

我也尝试过这个,但它不起作用:

if (( $(echo "$isubsCount >= 1" |bc -l) )); then

echo yes

fi

答案1

这将在所有 UNIX 机器上的任何 shell 中使用任何 awk 来工作:

$ isubsCount=0.052
$ awk -v val="$isubsCount" 'BEGIN{exit !(val >= 1)}'
$ echo $?
1
$ if awk -v val="$isubsCount" 'BEGIN{exit !(val >= 1)}'; then echo "yes"; else echo "no"; fi
no

$ isubsCount=1
$ awk -v val="$isubsCount" 'BEGIN{exit !(val >= 1)}'
$ echo $?
0
$ if awk -v val="$isubsCount" 'BEGIN{exit !(val >= 1)}'; then echo "yes"; else echo "no"; fi
yes

显然,您可以将退出语句从 更改为exit !(val >= 1)exit (val < 1)获得相同的结果,但我编写它只是为了展示如何获得您想要的退出状态,而不必编写与您实际想要测试的条件相反的条件。

相关内容