我确定对此有一个简单的答案,但是我对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
谢谢
答案 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