从脚本的ping命令获取整数值

时间:2012-02-02 16:42:20

标签: integer ping

当我运行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语句中使用的数值?

1 个答案:

答案 0 :(得分:1)

在您的代码中,语句>被解释为重定向。因此,如果您查看目录,则会发现由于您的问题测试而导致文件名为0.40.11的空文件。

对于浮点值(您的情况)

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但行为方式不同的计算机上使用脚本,则会发生这种情况。