当前位置: 首页 > news >正文

Shell编程 - dialog 程序使用指南

Linux 中的 dialog 是一个经典的 TUI(文本用户界面)工具,用于在终端中创建交互式对话框。以下是完整的使用指南:


一、安装

# Debian/Ubuntu
sudo apt-get install dialog# CentOS/RHEL/Fedora
sudo yum install dialog    # 或 dnf install dialog# Arch Linux
sudo pacman -S dialog

二、基本语法

dialog [通用选项] <框类型> <框选项> <框参数>

三、常用对话框类型

1. 消息框(msgbox)

显示信息,按 OK 继续:

dialog --msgbox "Hello, World!" 10 40
  • 10 = 高度(行数)
  • 40 = 宽度(列数)

2. 确认框(yesno)

返回退出码:0=Yes, 1=No:

dialog --yesno "Are you sure?" 10 40
if [ $? -eq 0 ]; thenecho "You chose YES"
elseecho "You chose NO"
fi

3. 输入框(inputbox)

获取用户输入,结果输出到 stderr:

result=$(dialog --stdout --inputbox "Enter your name:" 10 40 "default")
echo "You entered: $result"
  • --stdout 将结果输出到 stdout 而非 stderr
  • "default" 为默认值

4. 密码框(passwordbox)

隐藏输入内容:

password=$(dialog --stdout --passwordbox "Enter password:" 10 40)

5. 菜单(menu)

单选菜单:

choice=$(dialog --stdout --menu "Choose an option:" 15 50 4 \1 "Option One" \2 "Option Two" \3 "Option Three" \4 "Option Four")
echo "You chose: $choice"
  • 15 = 总高度
  • 50 = 宽度
  • 4 = 菜单项可见行数

6. 复选框(checklist)

多选,标记状态用 on/off

choices=$(dialog --stdout --checklist "Select items:" 15 50 4 \1 "Item A" on \2 "Item B" off \3 "Item C" on)
echo "Selected: $choices"

7. 单选列表(radiolist)

互斥单选:

choice=$(dialog --stdout --radiolist "Pick one:" 15 50 4 \1 "Red" on \2 "Green" off \3 "Blue" off)

8. 进度条(gauge)

显示进度百分比:

(echo "10" ; sleep 1echo "50" ; sleep 1echo "XXX"  # 分隔符echo "Halfway done..."echo "XXX"echo "75" ; sleep 1echo "100"
) | dialog --gauge "Processing..." 10 40 0

9. 文件选择(fselect)

浏览选择文件:

file=$(dialog --stdout --fselect /home/user/ 20 60)

10. 日历/时间选择

# 日历
date=$(dialog --stdout --calendar "Select date:" 10 40 17 5 2026)# 时间
time=$(dialog --stdout --timebox "Select time:" 10 40 16 30 00)

四、通用选项

选项 说明
--title "标题" 设置窗口标题
--backtitle "背景标题" 设置屏幕顶部背景标题
--stdout 将结果输出到 stdout(默认是 stderr)
--no-cancel 隐藏 Cancel 按钮
--nocancel 同上
--defaultno 默认选中 No(用于 yesno)
--default-item <id> 设置默认选中项
--clear 完成后清屏
--keep-window 保留窗口内容(不覆盖)
--colors 支持颜色代码(如 \Z1 红色)
--shadow 显示阴影效果
--insecure 密码框显示星号而非完全隐藏

五、颜色与样式

启用颜色支持:

dialog --colors --msgbox "\Z1Red\Zn \Z2Green\Zn \Z4Blue\Zn" 10 40
  • \Z0~\Z7 = 颜色代码
  • \Zn = 恢复正常颜色
  • \Zb = 粗体,\Zr = 反色

六、完整示例脚本

#!/bin/bash# 使用 dialog 创建交互式安装向导# 设置背景标题
BACKTITLE="Server Setup Wizard v1.0"# Step 1: 欢迎
dialog --backtitle "$BACKTITLE" --msgbox "Welcome to the setup wizard!" 10 40# Step 2: 输入主机名
hostname=$(dialog --stdout --backtitle "$BACKTITLE" \--inputbox "Enter hostname:" 10 40 "server01")# Step 3: 选择服务
services=$(dialog --stdout --backtitle "$BACKTITLE" --checklist \"Select services to install:" 15 50 4 \"nginx" "Web Server" on \"mysql" "Database" off \"redis" "Cache Server" off \"docker" "Container Runtime" on)# Step 4: 确认
dialog --backtitle "$BACKTITLE" --yesno \"Hostname: $hostname\nServices: $services\nProceed?" 10 50if [ $? -eq 0 ]; thendialog --backtitle "$BACKTITLE" --msgbox "Setup complete!" 10 40
elsedialog --backtitle "$BACKTITLE" --msgbox "Setup cancelled." 10 40
fi# 清屏
clear

七、注意事项

  1. 输出重定向:dialog 默认将结果输出到 stderr,建议用 --stdout3>&1 1>&2 2>&3 技巧捕获
  2. 终端尺寸:确保终端足够大以容纳对话框,否则会报错
  3. 退出码
    • 0 = OK / Yes
    • 1 = Cancel / No
    • 255 = ESC 键 / 错误
  4. 替代工具:现代替代方案有 whiptail(更轻量)、gum(更美观)、fzf(模糊搜索)

http://www.jsqmd.com/news/835027/

相关文章:

  • 长沙除甲醛公司深度测评:直营与加盟的五大评判标准 - 博客湾
  • 西安除甲醛公司实测解析:商业模式拆解与避坑选购指南 - 博客湾
  • 郑州除甲醛市场真相:三类公司怎么选?别再被“全国直营”话术忽悠了 - 博客湾
  • 南京除甲醛服务公司选择指南:从评判标准到模式解析 - 博客湾
  • 昇腾应用部署实践
  • 宁波奢侈品钻石首饰回收实体店评测 二手钻戒项链首饰回收报价行情分享 - 博客湾
  • 郑州除甲醛公司真相:别被“百城直营”忽悠,看懂模式才算真懂行 - 博客湾
  • Ascend C 新一代算子编程语言
  • 2026年|拒绝智商税!亲测5款降AI工具,谁才是过知网的真正救星? - 降AI实验室
  • 昇腾性能分析工具体系
  • 昇腾框架适配层
  • 2026春招薪资陆续开奖:大厂应届生待遇,到底拉开了多大差距?
  • 如何在 Nginx Lua 脚本中实现 HMAC 签名验签 API 鉴权?
  • 西安除甲醛公司怎么选?三大硬核标准识破“伪直营”套路 - 博客湾
  • MindSpore 与 PyTorch 在昇腾上的开发
  • # 2026年GEO优化服务商推荐:按企业需求场景选择合作伙伴的决策指南 - 科技焦点
  • 郑州除甲醛公司避坑:直营、伪直营与加盟的本质区别 - 博客湾
  • 苏州除甲醛公司怎么选:别被“百城直营”四个字带走节奏 - 博客湾
  • 昇腾算子开发体系
  • 《觉醒时刻:AI Agent引爆企业效率革命》第一章
  • 2026年|Turnitin查出AIGC率爆表?3个亲测有效方法教你高效去AI痕迹,附官方检测报告! - 降AI实验室
  • 苏州除甲醛真相:别被“全国直营”话术忽悠,这三类公司才靠谱 - 博客湾
  • 昇腾分布式训练策略
  • 金华木门厂家哪家好?2026年本地源头与全国品牌深度对比 - Amonic
  • 芝柏官方售后网点2026年5月【亲测】报告:实地【数据验证】与【避坑指南】 - 亨得利官方服务中心
  • 2026年GEO优化公司选型指南:五家靠谱服务商深度分析 - 科技焦点
  • 昇腾TBE张量加速引擎
  • 南京除甲醛公司的水有多深?百城直营基本都是骗子 - 博客湾
  • 杭州奢侈品包包回收哪家靠谱?本地门店深度测评 热门款二手回收报价行情 - 博客湾
  • 实木门哪家厂家好?2026年实木门厂家实力盘点与选择指南 - Amonic