2つの数字の違いを計算するシナリオがあります。
次に、計算された違いを範囲にわたって確認する必要があります。
この範囲内であれば表示状態は成功で、そうでなければ失敗とマークされます。
以下は私のコードです
Range = -1 to 1
var1=12.23
var2=13.23
diff=$(echo "($var1-$var2)"| bc -l)
echo $diff
if [ "$diff" -ge -1 ] && [ "$diff" -le 1 ]; then
echo "$diff" "success"
else
echo "Not within range -1 to 1"
echo "Failure"
fi
エラーは次のとおりです。
script.sh: 8: [: Illegal number: -1.00
答え1
これで遊びたい場合は、awk
次のスクリプトを使用できます。
var1=12.23
var2=13.23
echo |awk -v v1=$var1 -v v2=$var2 '{diff=v1-v2;if(diff >= -1 && diff <=1) print diff " success" ;else printf "%s not within range [-1,1]\nFailure\n", diff }'
答え2
シェルは、算術コンテキストで浮動小数点値を表す文字列を比較できません。ただし、bc
以下を使用して計算したブール値(整数)を評価できます。できるシェルで使用:
#!/bin/bash
val1=12.23
val2=13.23
difference=$( bc -l <<<"$val1 - $val2" )
range_ok=$( bc -l <<<"$difference >= -1 && $difference <= 1" )
if [ "$range_ok" -ne 0 ]; then
printf '%s success\n' "$difference"
else
printf '%s not within range [-1,1]\n' "$difference"
echo "Failure"
fi