레거시 시스템을 사용하여 여기에서 sqlplus를 연결하여 반환 값을 변수에 저장했는데 제대로 작동하지만 a numeric/floating comparison
현재로서는 부동 소수점 값과 반환 값을 비교할 때 문제가 0.052 또는 0.0032 또는 정수 값일 수 있습니다. Bash는 float 비교를 지원하지 않으며 POSIX에서는 bc도 지원하지 않습니다.
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
이는 awk를 사용하는 모든 UNIX 시스템의 모든 쉘에서 작동합니다.
$ 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)
분명히 동일한 결과를 얻기 위해 종료 문을 to에서 변경할 수 있지만 exit (val < 1)
실제로 테스트하려는 것과 반대되는 조건을 작성하지 않고도 원하는 종료 상태를 얻는 방법을 보여 주기 위해 작성했습니다.