🔥个人主页 🔥
😈所属专栏😈
目录
Dialog
是 Linux Shell 中用于创建图形化界面的工具,它能让脚本实现类似 GUI 的交互效果(如菜单、表单、进度条等),而无需 X Window 支持
dialog在不同系统下的安装
Debian/Ubuntu 及其衍生版
sudo apt update
sudo apt install dialog
Red Hat/CentOS/Fedora
# RHEL/CentOS 7 及以下
sudo yum install dialog
# RHEL/CentOS 8+ 或 Fedora
sudo dnf install dialog
基本语法
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
dialog --buildlist "选择文件" 15 40 5 "file1" "文件一" "on" "file2" "文件二" "off" 2> result
复选列表,可选择多个项
dialog --checklist "选择爱好" 15 40 5 "1" "读书" "on" "2" "音乐" "on" "3" "运动" "off" 2> result
单选列表,只能选择一项
dialog --radiolist "选择颜色" 10 30 3 "1" "红色" "off" "2" "绿色" "on" "3" "蓝色" "off" 2> result
简单菜单,通过标签选择
dialog --menu "主菜单" 15 40 5 "1" "查看日志" "2" "重启服务" "3" "退出" 2> choice
可输入的菜单,用户可修改选项值
dialog --inputmenu "设置参数" 15 40 3 "IP" "192.168.1.1" "Port" "8080" "User" "admin" 2> config
树形结构选择器,支持层级关系
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 & |
目录选择器,返回选中的目录路径
dialog --dselect "/home/user/" 15 50 2> directory
文件选择器,返回选中的文件路径
dialog --fselect "/etc/" 15 50 2> filename
文件编辑器,可直接编辑文本文件
dialog --editbox "/tmp/config.txt" 20 60
文本查看器,显示文件内容(只读)
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 |
行文本输入框
dialog --inputbox "输入用户名" 10 30 "admin" 2> username
密码输入框(隐藏输入内容)
dialog --passwordbox "输入密码" 10 30 2> password
多字段表单,支持不同类型输入
dialog --form "用户信息" 15 40 3 "姓名:" 1 1 "" 1 10 20 0 "年龄:" 2 1 "" 2 10 3 0 2> info
密码表单,部分字段隐藏输入
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 |
进度条,显示百分比进度
echo "50" | dialog --gauge "进度信息" 10 50 50
混合进度条,显示多项进度
dialog --mixedgauge "系统状态" 15 50 60 "CPU" 80 "内存" 40 "磁盘" 60
信息框(自动消失,无需用户交互)
dialog --infobox "正在处理,请稍候..." 8 40; sleep 3
消息框(需用户确认)
dialog --msgbox "操作完成!" 10 30
确认对话框,提供是 / 否选项
dialog --yesno "确定要删除此文件吗?" 10 40 && rm file.txt
暂停提示框,显示倒计时
dialog --pause "系统将在10秒后重启" 10 40 10
时间与日期
组件 | 中文解释 | 示例 |
---|---|---|
--calendar |
日历选择器,返回日期 | dialog --title "Calendar" --calendar "Date" 5 50 |
--timebox |
时间选择器,返回时间 | dialog --timebox "设置时间" 10 30 12 30 0 2> time |
日历选择器,返回日期
dialog --title "Calendar" --calendar "Date" 5 50
时间选择器,返回时间
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 |
程序执行框,显示命令输出
dialog --prgbox "执行中..." "ls -l" 20 60
程序执行框(自定义命令)
dialog --programbox "系统信息" 20 60 < <(uname -a; free -h)
数据流进度框,显示命令执行进度
sudo apt update | dialog --progressbox "正在更新软件包列表..." 15 60
范围选择器,限制输入在指定范围内
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
转义序列
\Z<数字> # 设置前景色
\Zb # 加粗文本(Bold)
\Zu # 下划线(Underline)
\Zr # 反色显示(Reverse)
\Zn # 恢复默认样式(Normal)
代码 | 颜色 |
---|---|
\Z0 |
黑色 |
\Z1 |
红色 |
\Z2 |
绿色 |
\Z3 |
黄色 |
\Z4 |
蓝色 |
\Z5 |
洋红色 |
\Z6 |
青色 |
\Z7 |
白色 |
标题红色加粗,返回上一级绿色加粗
dialog --colors --menu "\Z1\Zb用法" 10 30 8 1 "查询选项用法" 2 "查询具体用法" 3 "\Z2\Zb返回上一级" 2> $temp