Linux 下创建文本界面对话框

Administrator
发布于 2024-12-09 / 20 阅读 / 0 评论 / 1 点赞

Linux 下创建文本界面对话框

Linux命令行下创建文本界面对话框

最近接了一些外包的活,主要是基础环境部署。大部分比较简单但是重复性工作,如安装JDK、Nginx、OpenSSH升级等。如果编写 ansible 个人觉得比较麻烦,于是上网搜了一下发现 dialog 这么一个小工具。只要维护好图形化里的安装表就可以快速安装一些单节点中间件工具。

必须要线安装 dialog 包
sudo yum install dialog

Dialog 脚本

#!/bin/bash

LOG_FILE="/tmp/install.log"

# 菜单选项列表
MENU_ITEMS=(
    1 "显示当前日期和时间"
    2 "查看系统信息"
    3 "列出当前目录文件"
    4 "安装 JDK21"
    5 "安装 nginx 1.26"
    6 "安装 polardbx"
    7 "退出"
)

show_menu() {
    dialog --title "菜单" --menu "选择一个操作:" 30 40 20 \
        "${MENU_ITEMS[@]}" \
        2> /tmp/choice.txt

    # 检查 dialog 的退出状态
    if [[ $? -ne 0 ]]; then
        echo "cancel" > /tmp/choice.txt
    fi
}

# 通用安装函数
install_software() {
    local script_name=$1
    local software_name=$2

    # 检查脚本是否存在
    if [[ ! -f "$script_name" ]]; then
        dialog --msgbox "${software_name} 安装脚本不存在: $script_name" 10 50
        return
    fi

    > "$LOG_FILE"

    (
        echo "开始安装 ${software_name}..." >> "$LOG_FILE"
        sleep 1
        sh "$script_name" >> "$LOG_FILE" 2>&1
        if [[ $? -eq 0 ]]; then
            echo "${software_name} 安装成功!" >> "$LOG_FILE"
        else
            echo "${software_name} 安装失败,请检查日志!" >> "$LOG_FILE"
        fi
    ) &

    dialog --title "安装 ${software_name} 日志" --tailbox "$LOG_FILE" 20 60

    wait
    dialog --msgbox "安装完成!请检查日志以确认结果。" 10 50
}

perform_action() {
    local choice=$(< /tmp/choice.txt)
    case $choice in
        1)
            dialog --msgbox "当前日期和时间:$(date)" 10 50
            ;;
        2)
            dialog --msgbox "系统信息:$(uname -a)" 10 50
            ;;
        3)
            dialog --msgbox "当前目录文件列表:$(ls)" 10 50
            ;;
        4)
            install_software "jdk.sh" "JDK"
            ;;
        5)
            install_software "nginx.sh" "Nginx"
            ;;
        6)
            install_software "polardbx.sh" "Polardbx"
            ;;
        7 | cancel)
            exit_script
            ;;
        *)
            dialog --msgbox "无效选择,请重新输入。" 10 50
            ;;
    esac
}

exit_script() {
    clear
    exit 0
}

# 主循环
while true; do
    show_menu
    perform_action
done

中间件脚本

安装 JDK

脚本之类编写就可以简单些,并不需要复杂的环境。


#!/bin/bash

set -x

tar -xf jdk-21_linux-x64_bin.tar.gz -C /usr/local

cat <<EOF >> /etc/profile

# JDK environment variables
export JAVA_HOME=/usr/local/jdk-21.0.5
export PATH=\${PATH}:\${JAVA_HOME}/bin:\${JAVA_HOME}/lib
EOF

echo "无法自动 source 需要手动执行一下"

编译安装 Nginx

#!/bin/bash

set -x

tar -xf nginx-1.26.2.tar.gz -C /root

cd /root/nginx-1.26.2

./configure --prefix=/usr/local/nginx --with-http_ssl_module

make && make install