You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下Bash Dialog脚本:日历、删除功能及按钮异常问题排查

基于Dialog的Bash交互脚本问题修复

问题描述

  • 日历选项无法实现事件保存、检索、展示的预期功能
  • 删除文件/文件夹功能仅支持手动输入路径,无GUI式文件浏览器选择
  • 菜单的“OK”和“Cancel”按钮失效,需重新运行脚本才能切换选项

修复后的完整代码

#!/bin/bash

# 创建空事件文件(如果不存在)
touch events.txt

while true; do
    # 显示主菜单
    OPTION=$(dialog --menu "选择操作:" 0 0 0 \
        1 "保存事件" \
        2 "检索事件" \
        3 "展示所有事件" \
        4 "查看日期/时间" \
        5 "日历与事件管理" \
        6 "系统信息" \
        7 "CPU信息" \
        8 "挂载信息" \
        9 "删除文件" \
        10 "删除文件夹" \
        11 "内存信息" \
        12 "磁盘信息" \
        13 "退出" \
        3>&1 1>&2 2>&3 3>&- )

    # 处理用户取消操作的情况
    if [ -z "$OPTION" ]; then
        dialog --clear --msgbox "已取消操作" 0 0
        continue
    fi

    case $OPTION in
        1)
            # 修复保存事件功能:选择日期后输入事件
            DATE=$(dialog --clear --calendar "选择要保存事件的日期:" 0 0 2>&1 1>&2)
            if [ $? -eq 0 ]; then
                EVENT=$(dialog --clear --inputbox "输入事件内容:" 0 0 2>&1 1>&2)
                if [ $? -eq 0 ]; then
                    echo "$DATE:$EVENT" >> events.txt
                    dialog --clear --msgbox "事件已保存" 0 0
                fi
            fi
            ;;
        2|5)
            # 整合检索事件和日历选项的功能,实现选择日期后查看/添加事件
            DATE=$(dialog --clear --calendar "选择日期:" 0 0 2>&1 1>&2)
            if [ $? -eq 0 ]; then
                EVENT=$(grep "^$DATE:" events.txt | cut -d ':' -f 2-)
                if [ -z "$EVENT" ]; then
                    EVENT=$(dialog --clear --inputbox "该日期无事件,输入新事件:" 0 0 2>&1 1>&2)
                    if [ $? -eq 0 ]; then
                        echo "$DATE:$EVENT" >> events.txt
                        dialog --clear --msgbox "事件已添加" 0 0
                    fi
                else
                    dialog --clear --msgbox "日期 $DATE 的事件:\n$EVENT" 0 0
                fi
            fi
            ;;
        3)
            if [ -s events.txt ]; then
                dialog --clear --msgbox "$(cat events.txt)" 0 0
            else
                dialog --clear --msgbox "暂无事件记录" 0 0
            fi
            ;;
        4)
            dialog --clear --msgbox "$(date)" 0 0
            ;;
        6)
            dialog --clear --msgbox "$(uname -a)" 0 0
            ;;
        7)
            dialog --clear --msgbox "$(lscpu)" 0 0
            ;;
        8)
            dialog --clear --msgbox "$(mount)" 0 0
            ;;
        9)
            # 用--fselect实现GUI文件选择
            FILE_PATH=$(dialog --clear --fselect "$HOME/" 0 80 2>&1 1>&2)
            if [ $? -eq 0 ]; then
                if [ -f "$FILE_PATH" ]; then
                    rm "$FILE_PATH"
                    dialog --clear --msgbox "文件 $FILE_PATH 已删除" 0 0
                else
                    dialog --clear --msgbox "选择的不是有效文件" 0 0
                fi
            fi
            ;;
        10)
            # 用--dselect实现GUI文件夹选择
            FOLDER_PATH=$(dialog --clear --dselect "$HOME/" 0 80 2>&1 1>&2)
            if [ $? -eq 0 ]; then
                if [ -d "$FOLDER_PATH" ]; then
                    rm -r "$FOLDER_PATH"
                    dialog --clear --msgbox "文件夹 $FOLDER_PATH 已删除" 0 0
                else
                    dialog --clear --msgbox "选择的不是有效文件夹" 0 0
                fi
            fi
            ;;
        11)
            dialog --clear --msgbox "$(free -m)" 0 0
            ;;
        12)
            dialog --clear --msgbox "$(df -h)" 0 0
            ;;
        13)
            break
            ;;
        *)
            dialog --clear --msgbox "无效选项" 0 0
            ;;
    esac
done

关键修复说明

1. 日历选项功能完善

  • 将原选项5(仅弹出日历)与选项2的事件检索/保存逻辑整合,选择日期后自动检查对应事件:
    • 若存在事件则直接展示
    • 若不存在则提示用户输入新事件并保存
  • 修复了原选项1(保存事件)的逻辑错误,使其真正实现选择日期保存事件的功能

2. GUI式文件/文件夹选择

  • 删除文件功能替换为dialog --fselect,支持从GUI浏览器中选择文件,默认起始路径为用户主目录
  • 删除文件夹功能替换为dialog --dselect,同样支持GUI浏览选择,无需手动输入路径
  • 移除了原脚本中可能导致脚本直接退出的cd "$path" || exit,改用完整路径操作,避免意外退出

3. 按钮失效问题修复

  • 改用case语句替代原有的if-elif结构,更安全处理空值(用户按Cancel时$OPTION为空)
  • 添加了空值判断逻辑,当用户取消操作时显示提示并返回主菜单,而非进入错误分支
  • 优化了事件文件为空时的提示,避免展示空内容给用户

内容的提问来源于stack exchange,提问作者AspiringCSStudent3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 06:05:23