linux - 测试ip能ping通,但是只有一个loop就结束了。

标签 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

最佳答案

试试这个。

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 的退出状态表明它是否成功,因此它捕获了比“无法访问”更多的错误场景。通常,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

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

关于linux - 测试ip能ping通,但是只有一个loop就结束了。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28064417/

相关文章:

linux - Shebang 选项 ' #!/bin/csh -f '

linux - 删除除文件扩展名以外的所有内容

linux - 通过 fstab 作为普通用户使用 Sshfs

javascript - 由 JavaScript 脚本控制的 Mongo shell 退出值

android - scp/secure 从远程 android 设备/SSH 服务器复制最新文件

linux - 绕过 "-"在 bash 中作为算术运算符处理

linux - 无法识别的规则 lex 中的错误

linux - 如何在 bash 中计算 arccos()?

bash - 在循环中读取用户输入

php - 尝试使用 PHP 执行 Python 脚本