如果变量在另一个变量的范围内

问题描述 投票:0回答:1

我有一个循环,当GPS坐标在小数点后第三位发生变化时,通过比较以前的坐标和当前的坐标,每10分钟更新一次。

然而,我只希望更新发生在小数点变化超过+- 0.002的时候。意思是,如果$latA = 64.019或$lonA = -152.617,而$latB = 64.017、64.018、64.020或64.021;或$lonB = -152.615、-152.616、-152.618或-152.619;那么我希望if语句改为true。

while :
do
    LAT=$(cat /tmp/getGPS | awk 'BEGIN{RS=","; FS=":"} /lat/ {save=$2} END {print save}')
    LON=$(cat /tmp/getGPS | awk 'BEGIN{RS=","; FS=":"} /lon/ {save=$2} END {print save}')
    ALT=$(cat /tmp/getGPS | awk 'BEGIN{RS=","; FS=":"} /alt/ {save=$2} END {print save}')
    ALT=$(echo "scale=0; $ALT * 3.281/1" | bc)
    latB=$(echo "scale=3; $LAT /1" | bc)
    lonB=$(echo "scale=3; $LON /1" | bc)
  if [ "$latA" = "$latB" ] || [ "$lonA" = "$lonB" ]
    then
      echo "latA = latB"
      sleep 600
    else
      echo "latA != latB"
      latA=$latB
      lonA=$lonB
  fi
done

输出结果是这样的。

$ ./getGPS
0 - 64.019123167 -152.617497833 114ft
A -
B - 64.019 -152.617
latA != latB
0 - 64.019124167 -152.617497667 115ft
A - 64.019 -152.617
B - 64.019 -152.617
latA = latB
Sleeping...

谢谢你的帮助

谢谢你的帮助。

bash if-statement while-loop syntax
1个回答
0
投票

您可以继续使用 bc 来计算。

$ epsilon="0.002"
$ echo "define abs(i) {if (i < 0) return (-i); return (i)}; abs(64.019 - 64.018) <= $epsilon" | bc
1
$ echo "define abs(i) {if (i < 0) return (-i); return (i)}; abs(64.019 - 64.016) <= $epsilon" | bc
0

这个bc脚本返回0(false),如果差值大于: epsilon,否则为1(true)。

你可以这样使用。

latNearlyEqual=$(echo "define abs(i) {if (i < 0) return (-i); return (i)}; abs($latA - $latB) <= $epsilon" | bc)
if [ $latNearlyEqual -eq 1 ]
then
    ...
fi
© www.soinside.com 2019 - 2024. All rights reserved.