BASH 脚本 - 将数值存储在变量中,然后进行比较
BASH script - Storing numerical value in variable, then doing comparison
在 BASH 中有很多关于变量比较的重复 questions/examples,但 none 似乎对我有用。
代码逻辑:
通过执行命令导出 ping_val 的(平均)值:
ping_val=`ping -c 4 8.8.8.8| tail -1| awk '{print }' | cut -d '/' -f 2`
然后,如果该值小于20,则将另一个变量减20:
if [ $ping_val -lt 20 ] #line 30
then
$tot_health = $tot_health - 20
fi
这是我的输出:
./my-report.sh: 第 30 行: [: 65.464: 整数表达式预期
注意:ping_val 的值已经过验证,因为我通过稍后图表中的原始数字进行了验证。
您的原脚本中有很多错误。基本上你的语法是你的问题。
这里有一个可用的版本。
ping_val=$( ping -c 4 8.8.8.8 | tail -1 | awk '{print }' | cut -d '/' -f 2 )
if [[ awk -v PING_VAL="$ping_val" 'BEGIN{ if(PING_VAL <20) { exit(0)} else{ exit(1)}}' ]]
then
tot_health=$(( tot_health - 20 ))
fi
希望对您有所帮助!
ping 的最后一行如下所示:
rtt min/avg/max/mdev = 36.731/72.502/90.776/21.038 ms
你正在解析这个例子中的 72.502。这不是一个整数。 Bash 仅适用于整数。如果你想比较浮点数,你需要一个像bc
这样的外部工具。您还可以使用您喜欢的命令行语言(awk
、python
、perl
等)。由于您无论如何都想与整数进行比较(特别是小于比较),您可以截断小数点并进行比较。
像这样的东西会让你的比较工作:
if [ ${ping_val/.*} -lt 20 ] #line 30
then
tot_health=$((tot_health - 20))
fi
所有 ${ping_val}
都在做,取 72.502 并将其变为 72。这永远不会改变程序的逻辑,因为您正在进行小于比较。
在 BASH 中有很多关于变量比较的重复 questions/examples,但 none 似乎对我有用。
代码逻辑: 通过执行命令导出 ping_val 的(平均)值:
ping_val=`ping -c 4 8.8.8.8| tail -1| awk '{print }' | cut -d '/' -f 2`
然后,如果该值小于20,则将另一个变量减20:
if [ $ping_val -lt 20 ] #line 30
then
$tot_health = $tot_health - 20
fi
这是我的输出: ./my-report.sh: 第 30 行: [: 65.464: 整数表达式预期
注意:ping_val 的值已经过验证,因为我通过稍后图表中的原始数字进行了验证。
您的原脚本中有很多错误。基本上你的语法是你的问题。
这里有一个可用的版本。
ping_val=$( ping -c 4 8.8.8.8 | tail -1 | awk '{print }' | cut -d '/' -f 2 )
if [[ awk -v PING_VAL="$ping_val" 'BEGIN{ if(PING_VAL <20) { exit(0)} else{ exit(1)}}' ]]
then
tot_health=$(( tot_health - 20 ))
fi
希望对您有所帮助!
ping 的最后一行如下所示:
rtt min/avg/max/mdev = 36.731/72.502/90.776/21.038 ms
你正在解析这个例子中的 72.502。这不是一个整数。 Bash 仅适用于整数。如果你想比较浮点数,你需要一个像bc
这样的外部工具。您还可以使用您喜欢的命令行语言(awk
、python
、perl
等)。由于您无论如何都想与整数进行比较(特别是小于比较),您可以截断小数点并进行比较。
像这样的东西会让你的比较工作:
if [ ${ping_val/.*} -lt 20 ] #line 30
then
tot_health=$((tot_health - 20))
fi
所有 ${ping_val}
都在做,取 72.502 并将其变为 72。这永远不会改变程序的逻辑,因为您正在进行小于比较。