BASH脚本运行基于变量的命令

时间:2015-09-15 07:29:59

标签: bash

基本上我有一个我计划运行的脚本,它将查看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

1 个答案:

答案 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