Answers:
ping您的本地网关;
#!/bin/bash ping -q -w 1 -c 1 `ip r | grep default | cut -d ' ' -f 3` > /dev/null && echo ok || echo error
就在我的头顶上:
ping您的路由器
ping google.com
ifconfig
有效网关和/或有效IP地址的grep 输出
grep
ping进行有效回复。在一段时间内循环,直到满足所有条件。只是ping不会做很多事情。Jivings引用了不错的代码行。
grep
,ping使用退出代码来告诉您有关结果的信息,例如ping -qc 1 192.168.1.1 && echo ok || echo error
基于Jivings示例代码和我自己的一些逻辑。
#!/bin/bash
STATE="error";
while [ $STATE == "error" ]; do
#do a ping and check that its not a default message or change to grep for something else
STATE=$(ping -q -w 1 -c 1 `ip r | grep default | cut -d ' ' -f 3` > /dev/null && echo ok || echo error)
#sleep for 2 seconds and try again
sleep 2
done
#put your VPN code here...
正确的方法是创建一个在while比较器上返回布尔值的函数。但这就是外壳逻辑的样子。
Debian现在使用新贵。使用init.d脚本,这可能是一种更简单的方法。
您可能需要尝试一些其他服务来等待,但是networking
(如果有)network-manager
可能是个不错的选择。
这是针对Ubuntu的,但您不应发现太多差异http://upstart.ubuntu.com/cookbook/
sleep 20
在脚本之前添加一个。或者,最好将您的脚本放在中/etc/network/if-up.d
。这样,一旦网络接口启动,脚本就会运行。