一平二结果

时间:2018-08-11 11:32:53

标签: linux bash

我确定对此有一个简单的答案,但是我对BASH不太流利,我只是绕圈转。 我想这样做

ping -c1 8.8.8.8 1>/dev/null 2>/dev/null
SUCCESS=$?
if [ $SUCCESS -eq 0 ]  etc....

但是还要将ping结果分配给一个变量,以便获得时间延迟

ping -c1 8.8.8.8 1>/dev/null 2>/dev/null | DELAY=awk '{print $11}'
SUCCESS=$?
if [ $SUCCESS -eq 0 ]  etc....
echo $DELAY

谢谢

2 个答案:

答案 0 :(得分:1)

您的代码有很多问题。一个已经解决了。如果你这样做

ping -c1 8.8.8.8 1>/dev/null 2>/dev/null | cat

您首先将ping的所有标准输出放入/ dev / null,然后希望在管道中获得一些标准输出。那行不通。

第二,语法

ping -c1 8.8.8.8 1> / dev / null 2> / dev / null | DELAY = awk'{print $ 11}'

不正确。您可能会收到一条消息

-bash: {print $11}: command not found

即:DELAY = awk语法用于将变量DELAY设置为'awk',以执行'{print $ 1}'命令。那不是你想要的。

还请注意,$?是最后一条命令的退出代码。因此,如果前一行会起作用,则$?将是awk的结果,而不再是ping的结果。

最后,当我执行ping操作时,awk '{print $11}'只是给了我一堆空行。

那该怎么办?例子:

tempfile=/tmp/tempfile.$$
host=8.8.8.8
ping -c1 $host > $tempfile
success=$?
if [ $success -eq 0 ] ; then
    sed -n 's/.*time=//p' $tempfile
else
    echo "AAaarrghh... My Ping FAILED"
fi
rm $tempfile

或类似的东西

答案 1 :(得分:0)

谢谢大家,是的,我知道我的代码有错误,但这只是为了描述问题。我最终想到了:-

PING=$(ping -c1 8.8.8.8 2>&1);
SUCCESS=$?
DELAY=$(echo $PING | awk '{print $14}' | awk -F= '{print $2}')
if [ $SUCCESS -eq 0 ]
  then
    echo $DELAY
  else
    echo 0
fi