従来のシステムを使用してここで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)
実際にテストしたい条件とは反対の条件を作成せずに、目的の終了ステータスを取得する方法を示すために作成しました。