使用遗留系统,在这里我连接 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)
获得相同的结果,但我编写它只是为了展示如何获得您想要的退出状态,而不必编写与您实际想要测试的条件相反的条件。