testingIP是能够ping,但只有一个循环结束。

如果我想input一个IP来ping,如果它能够ping,我希望input一个差异IP。 我将如何改变脚本? 看看我的脚本,如果我inputIP 192.168.0.1是能够ping,我想input不同的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 

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