基本上我有一个我计划运行的脚本,它将查看OpenVPN连接的当前状态,如果状态不是" VPN' ibVPN正在运行&#34,则重新连接;但无论连接是否正在运行,它似乎都会尝试重新连接作为此脚本的一部分。
我手动运行命令vpncon =(" /etc/init.d/openvpn status")然后在终端中检查了这个结果,在运行后出现" * VPN' ibVPN'正在运行"所以它看起来是传递信息。我担心我还没有完全理解我是如何进入我的if状态文本以匹配它的。
基本上我想要的是$ vpncon = * VPN' ibVPN'正在运行然后不运行脚本/ 如果$ vpncon不是* VPN' ibVPN'正在运行,运行脚本。
任何帮助都将不胜感激。
#!/bin/bash +x
while [ "true" ]
do
vpncon=("/etc/init.d/openvpn status")
if [[ $vpncon != *"VPN 'ibVPN' is running"* ]]; then
echo "Disconnected, trying to reconnect..."
(sleep 1s && sudo /etc/init.d/openvpn start ibVPN)
else
echo "Already connected !"
fi
sleep 30
done
答案 0 :(得分:1)
在您的情况下,vnpncon是值"/etc/init.d/openvpn status"
,而不是该命令的结果。您应该使用$("command")
代替。同样在您的[[ $vpncon != *"VPN 'ibVPN' is running"* ]];
条件下,您应该使用$vpncon
的双引号。
这应该有效
#!/bin/bash +x
while true
do
vpncon="$(/etc/init.d/openvpn status)"
if [[ "$vpncon" != *"VPN 'ibVPN' is running"* ]]; then
echo "Disconnected, trying to reconnect..."
(sleep 1s && sudo /etc/init.d/openvpn start ibVPN)
else
echo "Already connected !"
fi
sleep 30
done