代码保存为.sh文件
使用 ./*.sh [start|stop|uninstall]

#!/bin/bash

# 配置文件保存路径
CONFIG_FILE="$HOME/.openvpn_client_config"

# 函数:检查并安装 OpenVPN
install_openvpn() {
    if ! command -v openvpn &> /dev/null; then
        echo "OpenVPN 未安装。正在安装 OpenVPN..."
        if [ -f /etc/centos-release ]; then
            # CentOS 系统
            sudo yum install -y epel-release
            sudo yum install -y openvpn
        else
            if [ -f /etc/debian_version ]; then
                # Debian/Ubuntu 系统
                sudo apt-get update
                sudo apt-get install -y openvpn
            else
                echo "不支持的操作系统。请手动安装 OpenVPN。"
                exit 1
            fi
        fi
        echo "OpenVPN 安装完成。"
    else
        echo "OpenVPN 已安装。"
    fi
}

# 函数:卸载 OpenVPN
uninstall_openvpn() {
    if command -v openvpn &> /dev/null; then
        echo "正在卸载 OpenVPN..."
        if [ -f /etc/centos-release ]; then
            # CentOS 系统
            sudo yum remove openvpn -y
            sudo rm -rf /etc/openvpn
        else
            if [ -f /etc/debian_version ]; then
                # Debian/Ubuntu 系统
                sudo apt-get remove --purge openvpn -y
                sudo apt-get autoremove -y
                sudo rm -rf /etc/openvpn
            else
                echo "不支持的操作系统。请手动卸载 OpenVPN。"
                exit 1
            fi
        fi
        echo "OpenVPN 卸载完成。"
    else
        echo "OpenVPN 未安装。"
    fi
}

# 函数:断开 OpenVPN 连接
stop_openvpn() {
    if pgrep openvpn > /dev/null; then
        sudo pkill openvpn
            echo "OpenVPN 正在断开,请稍后。。。。。 。"
        sleep 2  # 等待进程终止
        if pgrep openvpn > /dev/null; then
            echo "OpenVPN 进程未能成功关闭。"
            exit 1
        else
            echo "OpenVPN 已断开。"
        fi
    else
        echo "OpenVPN 未运行。"
    fi
    exit 0
}
# 函数:连接 OpenVPN
start_openvpn() {
    # 检查并安装 OpenVPN
    install_openvpn

    # 检查是否存在配置文件
    if [ -f "$CONFIG_FILE" ]; then
        # 读取配置文件中的证书地址、账号和密码
        source "$CONFIG_FILE"
    else
        # 提示用户输入证书地址、账号和密码
        read -p "请输入 OpenVPN 配置证书地址(/*.ovpn): " CERT_PATH
        read -p "请输入 VPN 账号: " VPN_USER
        read -sp "请输入 VPN 密码: " VPN_PASS
        echo

        # 验证输入的证书地址是否存在
        if [ ! -f "$CERT_PATH" ]; then
            echo "错误:OpenVPN 配置证书地址 '$CERT_PATH' 不存在。"
            exit 1
        fi

        # 保存用户输入到配置文件
        echo "CERT_PATH='$CERT_PATH'" > "$CONFIG_FILE"
        echo "VPN_USER='$VPN_USER'" >> "$CONFIG_FILE"
        echo "VPN_PASS='$VPN_PASS'" >> "$CONFIG_FILE"
    fi

    # 检查是否有 OpenVPN 进程运行
    if pgrep openvpn > /dev/null; then
        echo "OpenVPN 已经在运行。"
        exit 1
    fi

    # 创建临时文件保存账号密码
    AUTH_FILE=$(mktemp)
    echo "$VPN_USER" > "$AUTH_FILE"
    echo "$VPN_PASS" >> "$AUTH_FILE"

    # 设置日志文件路径
    LOG_FILE="$HOME/openvpn_client.log"

    # 启动 OpenVPN 客户端,并在后台运行
    sudo openvpn --config "$CERT_PATH" --auth-user-pass "$AUTH_FILE" --daemon --log "$LOG_FILE"

    # 删除临时文件
    rm -f "$AUTH_FILE"

    # 等待 OpenVPN 连接成功
    sleep 5
    if pgrep openvpn > /dev/null; then
        echo "OpenVPN 连接成功。"
    else
        echo "OpenVPN 连接失败。清除账号密码信息重新输入。"
        rm -f "$CONFIG_FILE"
    fi

    # 提示用户 OpenVPN 客户端已启动
    echo "OpenVPN 客户端已启动并在后台运行。"
    echo "日志文件目录: $LOG_FILE"
    echo "配置文件目录: $CONFIG_FILE"
}

# 根据传递的参数执行相应操作
case "$1" in
    start)
        start_openvpn
        ;;
    stop)
        stop_openvpn
        ;;
    uninstall)
        uninstall_openvpn
        ;;
    *)
        echo "用法: $0 {start|stop|uninstall}"
        exit 1
        ;;
esac