【Linux-shell】探索Dialog 工具在 Shell 图形化编程中的高效范式重构

🔥个人主页 🔥

😈所属专栏😈

目录

dialog在不同系统下的安装

[Debian/Ubuntu 及其衍生版](#Debian/Ubuntu 及其衍生版)

[Red Hat/CentOS/Fedora](#Red Hat/CentOS/Fedora)

基本语法

dialog的窗口部件

选择类组件

文件与目录操作

输入与表单

进度与信息展示

时间与日期

特殊组件

dialog的命令选项

界面布局类选项

按钮与标签类选项

输入输出类选项

行为控制类选项

dialog的颜色设置


Dialog 是 Linux Shell 中用于创建图形化界面的工具,它能让脚本实现类似 GUI 的交互效果(如菜单、表单、进度条等),而无需 X Window 支持


dialog在不同系统下的安装

Debian/Ubuntu 及其衍生版

复制代码
sudo apt update
sudo apt install dialog

Red Hat/CentOS/Fedora

bash 复制代码
# RHEL/CentOS 7 及以下
sudo yum install dialog

# RHEL/CentOS 8+ 或 Fedora
sudo dnf install dialog

基本语法

bash 复制代码
dialog [--选项] [--标题 "标题文本"] [--文本 "提示信息"] [参数...]

dialog的窗口部件

选择类组件

组件 中文解释 示例
--buildlist 创建可编辑的列表,用户可添加 / 删除 / 修改项 dialog --buildlist "选择文件" 15 40 5 "file1" "文件一" "on" "file2" "文件二" "off" 2> result
--checklist 复选列表,可选择多个项 dialog --checklist "选择爱好" 15 40 5 "1" "读书" "on" "2" "音乐" "on" "3" "运动" "off" 2> result
--radiolist 单选列表,只能选择一项 dialog --radiolist "选择颜色" 10 30 3 "1" "红色" "off" "2" "绿色" "on" "3" "蓝色" "off" 2> result
--menu 简单菜单,通过标签选择 dialog --menu "主菜单" 15 40 5 "1" "查看日志" "2" "重启服务" "3" "退出" 2> choice
--inputmenu 可输入的菜单,用户可修改选项值 dialog --inputmenu "设置参数" 15 40 3 "IP" "192.168.1.1" "Port" "8080" "User" "admin" 2> config
--treeview 树形结构选择器,支持层级关系 dialog --treeview "文件结构" 15 50 5 "/home" "主目录" "on" "0" "/home/user" "用户目录" "on" "1" 2> selected

创建可编辑的列表,用户可添加 / 删除 / 修改项

  • 高度:对话框的总高度(行数)15
  • 宽度:对话框的总宽度(列数)40
  • 列表高度:列表区域的高度(行数)5
bash 复制代码
dialog --buildlist "选择文件" 15 40 5 "file1" "文件一" "on" "file2" "文件二" "off" 2> result

复选列表,可选择多个项

bash 复制代码
dialog --checklist "选择爱好" 15 40 5 "1" "读书" "on" "2" "音乐" "on" "3" "运动" "off" 2> result

单选列表,只能选择一项

bash 复制代码
dialog --radiolist "选择颜色" 10 30 3 "1" "红色" "off" "2" "绿色" "on" "3" "蓝色" "off" 2> result

简单菜单,通过标签选择

bash 复制代码
dialog --menu "主菜单" 15 40 5 "1" "查看日志" "2" "重启服务" "3" "退出" 2> choice

可输入的菜单,用户可修改选项值

bash 复制代码
dialog --inputmenu "设置参数" 15 40 3 "IP" "192.168.1.1" "Port" "8080" "User" "admin" 2> config

树形结构选择器,支持层级关系

bash 复制代码
dialog --treeview "文件结构" 15 50 5 "/home" "主目录" "on" "0" "/home/user" "用户目录" "on" "1" 2> selected

文件与目录操作

组件 中文解释 示例
--dselect 目录选择器,返回选中的目录路径 dialog --dselect "/home/user/" 15 50 2> directory
--fselect 文件选择器,返回选中的文件路径 dialog --fselect "/etc/" 15 50 2> filename
--editbox 文件编辑器,可直接编辑文本文件 dialog --editbox "/tmp/config.txt" 20 60
--textbox 文本查看器,显示文件内容(只读) dialog --textbox "/var/log/syslog" 20 60
--tailbox 动态文本查看器,实时更新文件内容 dialog --tailbox "/var/log/messages" 20 60
--tailboxbg 后台动态文本查看器(显示后继续执行脚本) dialog --tailboxbg "/var/log/nginx/access.log" 20 60 &

目录选择器,返回选中的目录路径

bash 复制代码
dialog --dselect "/home/user/" 15 50 2> directory

文件选择器,返回选中的文件路径

bash 复制代码
dialog --fselect "/etc/" 15 50 2> filename

文件编辑器,可直接编辑文本文件

bash 复制代码
dialog --editbox "/tmp/config.txt" 20 60

文本查看器,显示文件内容(只读)

bash 复制代码
dialog --textbox "/var/log/syslog" 20 60

输入与表单

组件 中文解释 示例
--inputbox 单行文本输入框 dialog --inputbox "输入用户名" 10 30 "admin" 2> username
--passwordbox 密码输入框(隐藏输入内容) dialog --passwordbox "输入密码" 10 30 2> password
--form 多字段表单,支持不同类型输入 dialog --form "用户信息" 15 40 3 "姓名:" 1 1 "" 1 10 20 0 "年龄:" 2 1 "" 2 10 3 0 2> info
--passwordform 密码表单,部分字段隐藏输入 dialog --passwordform "登录" 15 40 2 "用户名:" 1 1 "admin" 1 10 20 0 "密码:" 2 1 "" 2 10 20 1 2> login
--mixedform 混合表单,支持多种输入类型 dialog --mixedform "设置" 15 40 3 "姓名:" 1 1 "" 1 10 20 0 "年龄:" 2 1 "" 2 10 3 0 "男" 2 15 "" 2 20 1 1 2> settings

行文本输入框

bash 复制代码
dialog --inputbox "输入用户名" 10 30 "admin" 2> username

密码输入框(隐藏输入内容)

bash 复制代码
dialog --passwordbox "输入密码" 10 30 2> password

多字段表单,支持不同类型输入

bash 复制代码
dialog --form "用户信息" 15 40 3 "姓名:" 1 1 "" 1 10 20 0 "年龄:" 2 1 "" 2 10 3 0 2> info

密码表单,部分字段隐藏输入

bash 复制代码
dialog --passwordform "登录" 15 40 2 "用户名:" 1 1 "admin" 1 10 20 0 "密码:" 2 1 "" 2 10 20 1 2> login

进度与信息展示

组件 中文解释 示例
--gauge 进度条,显示百分比进度 echo "50" | dialog --gauge "进度信息" 10 50 50
--mixedgauge 混合进度条,显示多项进度 dialog --mixedgauge "系统状态" 15 50 60 "CPU" 80 "内存" 40 "磁盘" 60
--infobox 信息框(自动消失,无需用户交互) dialog --infobox "正在处理,请稍候..." 8 40; sleep 3
--msgbox 消息框(需用户确认) dialog --msgbox "操作完成!" 10 30
--yesno 确认对话框,提供是 / 否选项 dialog --yesno "确定要删除此文件吗?" 10 40 && rm file.txt
--pause 暂停提示框,显示倒计时 dialog --pause "系统将在10秒后重启" 10 40 10

进度条,显示百分比进度

bash 复制代码
echo "50" | dialog --gauge "进度信息" 10 50 50 

混合进度条,显示多项进度

bash 复制代码
dialog --mixedgauge "系统状态" 15 50 60 "CPU" 80 "内存" 40 "磁盘" 60

信息框(自动消失,无需用户交互)

bash 复制代码
dialog --infobox "正在处理,请稍候..." 8 40; sleep 3

消息框(需用户确认)

bash 复制代码
dialog --msgbox "操作完成!" 10 30	

确认对话框,提供是 / 否选项

bash 复制代码
dialog --yesno "确定要删除此文件吗?" 10 40 && rm file.txt

暂停提示框,显示倒计时

bash 复制代码
dialog --pause "系统将在10秒后重启" 10 40 10

时间与日期

组件 中文解释 示例
--calendar 日历选择器,返回日期 dialog --title "Calendar" --calendar "Date" 5 50
--timebox 时间选择器,返回时间 dialog --timebox "设置时间" 10 30 12 30 0 2> time

日历选择器,返回日期

bash 复制代码
dialog --title "Calendar" --calendar "Date" 5 50

时间选择器,返回时间

bash 复制代码
dialog --timebox "设置时间" 10 30 12 30 0 2> time

特殊组件

组件 中文解释 示例
--prgbox 程序执行框,显示命令输出 dialog --prgbox "执行中..." "ls -l" 20 60
--programbox 程序执行框(自定义命令) dialog --programbox "系统信息" 20 60 < <(uname -a; free -h)
--progressbox 数据流进度框,显示命令执行进度 `tar cf - /home
--rangebox 范围选择器,限制输入在指定范围内 dialog --rangebox "选择端口号" 10 40 1 65535 8080 2> port

程序执行框,显示命令输出

bash 复制代码
dialog --prgbox "执行中..." "ls -l" 20 60

程序执行框(自定义命令)

bash 复制代码
dialog --programbox "系统信息" 20 60 < <(uname -a; free -h)

数据流进度框,显示命令执行进度

bash 复制代码
sudo apt update | dialog --progressbox "正在更新软件包列表..." 15 60

范围选择器,限制输入在指定范围内

bash 复制代码
dialog --rangebox "选择端口号" 10 40 1 65535 8080 2> port

dialog的命令选项

界面布局类选项

选项 中文解释
--ascii-lines 使用 ASCII 字符而非 UTF-8 绘制边框,兼容旧终端
--aspect <ratio> 设置窗口宽高比(如 4:3),保持比例缩放
--backtitle <text> 设置屏幕顶部的背景标题文本
--begin <y> <x> 指定窗口左上角在屏幕中的坐标位置(行,列)
--clear 关闭对话框后清除屏幕内容
--no-collapse 禁止对话框自动缩小以适应内容
--no-lines 不绘制窗口边框线
--no-shadow 不显示窗口阴影效果
--shadow 显示窗口阴影(默认开启,可用 --no-shadow 关闭)
--title <text> 设置对话框标题栏文本

按钮与标签类选项

选项 中文解释
--cancel-label <str> 修改取消按钮的显示文本(默认 "Cancel")
--default-button <str> 指定默认聚焦的按钮(如 "OK" 或 "Cancel")
--exit-label <str> 修改退出按钮的显示文本
--extra-button 添加第三个额外按钮
--extra-label <str> 设置额外按钮的显示文本(需配合 --extra-button 使用)
--help-button 添加帮助按钮
--help-label <str> 设置帮助按钮的显示文本
--no-cancel 移除取消按钮,仅保留确认按钮
--no-ok 移除确认按钮(某些对话框类型适用)
--ok-label <str> 修改确认按钮的显示文本(默认 "OK")
--yes-label <str> 修改 "是" 按钮的显示文本(用于 --yesno 对话框)
--no-label <str> 修改 "否" 按钮的显示文本(用于 --yesno 对话框)

输入输出类选项

选项 中文解释
--input-fd <fd> 指定输入文件描述符(默认从 stdin 读取)
--output-fd <fd> 指定输出文件描述符(默认输出到 stderr)
--stdout 将结果输出到 stdout 而非 stderr
--stderr 将结果输出到 stderr(默认行为)
--output-separator <str> 设置多值输出时的分隔符(如 --checklist
--quoted 将输出结果用双引号包裹,处理包含空格的值
--single-quoted 将输出结果用单引号包裹
--separate-output 每个选择项单独输出一行(用于多选对话框)

行为控制类选项

选项 中文解释
--beep 操作时发出蜂鸣声(如按键、错误)
--beep-after 操作完成后发出蜂鸣声
--colors 启用 ANSI 颜色代码支持(可在文本中使用 $(color) 标记)
--column-separator <str> 设置表格列之间的分隔符(如 --mixedform
--cr-wrap 启用文本自动换行(默认开启)
--no-cr-wrap 禁用文本自动换行
--default-item <str> 指定默认选中的菜单项(标签文本)
--defaultno --yesno 对话框中默认选择 "否"(焦点在否按钮)
--help-status 显示帮助信息时同时显示状态行
--help-tags 在帮助文本中使用标签标记重点内容
--hfile <str> 指定外部帮助文件路径
--hline <str> 设置水平分隔线的显示字符
--ignore 忽略 ESC 键,只能通过按钮关闭对话框
--insecure 禁用密码输入的安全模式(显示输入内容)
--item-help 为菜单项启用帮助文本功能
--keep-tite 保持标题栏不变(某些对话框切换时不更新标题)
--keep-window 关闭对话框后保留窗口框架
--last-key 输出最后按下的按键编码(用于调试)
--max-input <n> 限制输入框的最大字符数
--no-items 不显示菜单项(用于只需要标题和文本的场景)
--no-kill 禁止通过 Ctrl+C 强制终止对话框
--no-mouse 禁用鼠标点击交互
--no-nl-expand 不将换行符扩展为多行(保持原始文本格式)
--no-tags 不显示菜单项前的标签(如 [*]
--nook --no-ok,移除确认按钮
--print-maxsize 打印对话框最大可用尺寸后退出
--print-size 打印对话框实际使用尺寸后退出
--print-text-only 只打印对话框中的文本内容(不显示界面)
--print-text-size 计算并打印显示指定文本所需的最小尺寸
--print-version 输出版本信息后退出
--reorder 允许用户重新排序列表项(如 --orderbox
--scrollbar 为多行内容添加滚动条
--separate-widget <str> 设置多控件间的分隔符(如 --mixedform
--tab-correct 启用 Tab 键自动补全功能
--tab-len <n> 设置 Tab 键的宽度(空格数)
--timeout <secs> 设置超时自动关闭(返回状态码 255)
--trace <file> 将运行轨迹记录到指定文件(用于调试)
--trim 自动修剪输入内容的前后空格
--version 输出版本信息后退出
--visit-items 强制按顺序遍历菜单项(而非自由跳转)
--week-start <str> 设置日历的星期起始日(0= 周日,1= 周一)

dialog的颜色设置

颜色设置方式,使用 dialog 内置的 \Z 转义序列

bash 复制代码
\Z<数字>    # 设置前景色
\Zb         # 加粗文本(Bold)
\Zu         # 下划线(Underline)
\Zr         # 反色显示(Reverse)
\Zn         # 恢复默认样式(Normal)
代码 颜色
\Z0 黑色
\Z1 红色
\Z2 绿色
\Z3 黄色
\Z4 蓝色
\Z5 洋红色
\Z6 青色
\Z7 白色

标题红色加粗,返回上一级****绿色加粗

bash 复制代码
dialog --colors --menu "\Z1\Zb用法" 10 30 8 1 "查询选项用法" 2 "查询具体用法" 3 "\Z2\Zb返回上一级" 2> $temp
相关推荐
咖啡续命又一天几秒前
Linux grep 命令
linux·运维
小高求学之路1 分钟前
Centos 离线部署(MQTT)EMOX脚本并设置开机自启
linux·运维·centos
大数据张老师12 分钟前
服务发现与动态负载均衡的结合
运维·服务发现·负载均衡
码农101号12 分钟前
Linux中ansible模块补充和playbook讲解
linux·运维·ansible
运维技术分享与探索1 小时前
Centos7.6内网离线安装Docker环境和Portainer-博客
linux·运维·docker·容器·portainer
凉、介2 小时前
CPU Cache 的映射与寻址
linux·arm开发·数据库·redis·缓存·嵌入式
家庭云计算专家3 小时前
ONLYOFFICE 协作空间 企业版使用秘籍-5.企业电子文件如何管理?便于查找、访问和协作,轻松提升效率
大数据·运维·人工智能·onlyoffice·协作空间·onlyoffice开发版
2301_793102493 小时前
Linux——linux的基本命令
linux
easyboot3 小时前
openssl创建证书解决不安全问题
运维·服务器·安全
shumeigang4 小时前
LVS+Keepalived+nginx
运维·nginx·lvs