当我运行ping -c 1 -q ipaddress | awk -F"/" '{print $6}'
时
我得到一个值0.123
($MAXTIME
用于该ping)
但是当我尝试使用它(作为整数值)时,它会失败:
#!/bin/bash
MAXTIME=`ping -c 1 -q 172.200.201.18 | awk -F"/" '{print $6}' | xargs`
if [ $MAXTIME > 0.4 ]
then
echo "ALERT ALERT ALERT - Slow time"
echo "Actual max time $MAXTIME is greater than 0.400 ms"
echo "Napping..."
sleep 10
else
echo "Fast ping - OK"
echo "Napping..."
sleep 10
fi
我在输出中收到“错误”:
ALERT ALERT ALERT - Slow time
Actual max time 0.193 is greater than 0.400 ms
Napping...
如果我将语句更改为[ $MAXTIME > 0.1 ]
:
ALERT ALERT ALERT - Slow time
Actual max time 0.258 is greater than 0.100 ms
Napping...
如果我将语句更改为[ $MAXTIME > 1 ]
:
ALERT ALERT ALERT - Slow time
Actual max time 0.324 is greater than 1.000 ms
Napping...
似乎逻辑错误(因为它总是返回true)并且$MAXTIME
可能不是数值?如何使其成为在if / then语句中使用的数值?
答案 0 :(得分:1)
在您的代码中,语句>
被解释为重定向。因此,如果您查看目录,则会发现由于您的问题测试而导致文件名为0.4
,0.1
和1
的空文件。
if expr "$MAXTIME" '<' 0.4 >/dev/null
if [ "$MAXTIME" -lt 4 ] #the most portable way
if (( "$MAXTIME" > 4 )) #(if you use bash) this one is the most readable
if [[ $MAXTIME -lt 4 ]] #(if you use bash) double-quotes (") are not required
信息:双引号"
可防止$MAXTIME
中存在空格或任何其他特殊字符。例如,如果您在使用其他版本ping
但行为方式不同的计算机上使用脚本,则会发生这种情况。