我正在制作一个运行无限循环的简单 shell 脚本,然后如果 ping 命令的输出包含“time”(表明它已成功 ping)它应该回显“已连接!”, sleep 1,然后清除。但是,我的脚本没有输出。
#!/bin/bash
while :
do
if [[ $(ping google.com) == *time* ]];
then
echo -en '\E[47;32m'"\033[1mS\033[0m"
echo "Connected!"
else
echo -en '\E[47;31m'"\033[1mZ\033[0m"
echo "Not Connected!"
fi
clear
sleep 1
done
最佳答案
您的脚本没有给出输出,因为 ping
永远不会终止。要让 ping
测试您的连接性,您需要为其提供运行计数 (-c
) 和响应超时 (-W
), 然后检查它的返回码:
#!/bin/bash
while true
do
if ping -c 1 -W 5 google.com 1>/dev/null 2>&1
then
echo "Connected!"
break
else
echo "Not Connected!"
sleep 1
fi
done
ping
如果能够成功 ping 给定的主机名,将返回 0
,否则返回非零值。
还值得注意的是,此循环的迭代将运行不同的时间段,具体取决于 ping
是快速成功还是失败,例如由于没有网络连接。您可能希望使用 time
和 sleep
将迭代保持恒定的时间长度(例如 15 秒)。
关于bash - 创建一个 shell 脚本来检查网络连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32384417/