我制作一个运行无限循环的简单shell脚本,然后如果ping命令的输出包含" time" (表示它已成功ping通)它应该回显"连接!",睡眠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
答案 0 :(得分:5)
您的脚本未提供输出,因为ping
永远不会终止。要让ping
测试您的连接,您需要为其提供运行计数(-c
)和响应超时(-W
),然后检查其返回码:
#!/bin/bash
while true
do
if ping -c 1 -W 5 google.com 1>/dev/null 2>&1
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给定主机名,则返回0
,否则返回非{零}。
值得注意的是,此循环的迭代将运行不同的时间段,具体取决于ping
是快速成功还是失败,例如由于没有网络连接。您可能希望使用time
和sleep
将迭代保持为恒定的时间长度 - 例如15秒。