测试ip能够ping,但只有一个循环结束。

时间:2015-01-21 10:07:23

标签: linux bash

如果我想输入ip来ping,如果能够ping,我希望输入差异ip。我怎么改变剧本? 看看我的脚本,如果我输入ip 192.168.0.1能够ping,我想输入不同的ip。我想补充一下。

echo "==============Ping IP=============="
echo -n "Please enter ip to ping 192.168.0."
read ipaddress
Addip=192.168.0.$bmcipaddress
echo "================================"
echo "IP Add: $Addip"
ping -c 1 $Addip >"pinglog"
ping_ok=`cat "pinglog"| grep Unreachable`
echo "======="


if [ "$ping_ok" == "" ]; then
        echo $bmcip "==>ping PASS"
else
        echo $bmcip "==>ping BMC FAIL"



fi

1 个答案:

答案 0 :(得分:1)

试试这个。

while read -p "Please enter ip to ping 192.168.0." ipaddress; do
    bmcip="192.168.0.$ipaddress"
    if ping -c 1 "$bmcip" >/dev/null; then
        status="PASS"
    else
        status"FAIL"
    fi
    echo "$bmcip ==>ping $status"
done

read命令将在文件末尾失败,因此您可以使用ctrl-D(当然还有ctrl-C)轻松终止脚本。您可以轻松地将其扩展为也可以退出空输入。

来自ping的退出状态表明它是否成功,因此捕获的错误情况多于“无法访问”#34;。通常,shell工具会精确地返回退出状态,以便使用这种条件构造来查看命令是否成功,如果可以,您应该避免硬编码输出字符串(它们可以本地化,在版本之间进行更改,等)。

如果您想进一步减少这种情况,可以将其缩小到

while read -p "Please enter ip to ping 192.168.0." ipaddress; do
    Addip="192.168.0.$ipaddress"
    echo -n "$bmcip ==>ping "
    ping -c 1 "$Addip" >/dev/null && echo "PASS" || echo "FAIL"
done

由于您没有将日志文件用于脚本以外的任何内容,我认为它是一个不必要的临时文件,我们最好不要创建。如果你需要它进行诊断,也许你不应该覆盖它。