前言

liunx 下的dialog 工具是一个可以和shell脚本配合使用的文本界面下的创建对话框的工具。

获取返回结果

dialog程序的对话框默认通过stderr返回,需要使用文件定向符将返回结果重定向到一个临时文件中,我将使用一个输入框演示:

#!/bin/bash
dialog --inputbox \
	"输入文本" 0 0 "value" 2>.dialog_temp
result=`cat .dialog_temp`

此时,$result变量中将会存储输入框输入的值

通用参数

通用参数需要添加在控件参数之前

参数名称

参数用途

参考值

--ascii-lines

通过ascii方式显示线

--aspect

用于设置对话框的宽高比

1.5

--backtitle

设置背景标题

背景标题

--beep

显示对话框时发出蜂鸣声

--beep-after

显示对话框后发出蜂鸣声

--begin

设置对话框的位置(y x)

0 0

--cancel-label

自定义取消按钮的文字,部分对话框可用

取消

--clear

清除dialog产生的对话框

--colors

设置允许彩色文字

--column-separator

设置多列的分隔符

|

--cr-wrap

允许文本自动换行

--date-format

设置日期格式

%Y-%m-%d

--default-button

设置默认选中的按钮

cancel

--default-item

设置列表默认项

<列表项>

--defaultno

默认选中no

--erase-on-exit

关闭对话框时清除对话框背景

--exit-label

自定义退出按钮文本

退出

--extra-button

显示额外的按钮

--extra-label

自定义额外的按钮的文本

更多

--help-button

显示帮助按钮

--help-label

自定义帮助按钮的文本

帮助

--help-status

帮助状态

--help-tags

帮助标签

--hfile

帮助文件

<文件名>

--hline

在底部显示水平线,并添加文字

水平线

--ignore

忽略按键

--input-fd

指定输入的文件描述符

fd

--insecure

对话框安全模式,使输入的密码显示为星号

--item-help

项目帮助信息

--keep-tite

当标题过长时不自动截断

--keep-window

保持对话框大小,不能被用户改变

--last-key

指定最后按下的按键

--max-input

设置输入框最大输入长度

10

--no-cancel

隐藏取消按钮

--no-collapse

禁用对话框自动折叠

--no-hot-list

禁用快捷键

--no-items

禁用列表显示

--no-kill

不终止对话框

--no-label

不显示标签

--no-shadow

不显示阴影

--no-tags

禁用对话框的tags

--ok-label

自定义确定按钮的文本

确定

--output-fd

指定输出文件描述符

fd

--output-separator

输入文本分隔符

|

--print-maxsize

打印最大大小

--print-size

打印大小

--print-text-only

只打印文本

--print-text-size

打印文字大小

--print-version

打印版本

--quoted

引用文本

--recorder

记录器

--scrollbar

显示滚动条

--separate-output

分隔输出

--separate-widget

分隔组件

--single-quoted

单引号

--size-err

大小错误

--sleep

延迟时间

3

--stderr

通过标准错误返回结果

--stdout

通过标准输出返回结果

--tab-correct

启用tab字符更正

--tab-len

设置tab长度

--time-format

设置时间格式

%H:%M:%S

--timeout

设置显示时长

5

--title

标题

标题

--trace

启用对话框跟踪模式,并指定跟踪输出文件

output.txt

--trim

删除文本前后的空格

--version

显示dialog程序的版本号

--visit-items

设置对话框为访问模式,用于依次访问选项

--week-start

星期开始的日

Sunday

--yes-label

自定义是按钮的文本

基本控件

Buildlist 双列列表

通过--buildlist参数创建一个双列列表,命令格式:--buildlist <text> <height> <width> <list-height> <tag1> <item1> <status1>...,其中最后3个参数是一组选项,可以重复添加

参数名

参数用途

参考值

text

对话框标题

双列列表

height

对话框高度

0

width

对话框宽度

0

list-height

列表框高度

0

tag1

列表项值,用于返回结果

value1

item1

列表项名称,用于显示

选项1

status1

列表项状态,用于控制显示在左边或右边

on/off

dialog --buildlist \
	"双列列表" 0 0 0 \
	"value1" "选项1" "on" \
	"value2" "选项2" "off"

双列列表

Calendar日期选择

通过--calendar参数创建一个日期选择框,命令格式:--calendar <text> <height> <width> <day> <month> <year>

参数名

参数用途

参考值

text

对话框标题

日期选择框

height

对话框高度

0

width

对话框宽度

0

day

默认日期

20

month

默认月份

9

year

默认年份

2023

dialog --calendar \
	"日期选择框" 0 0 \
	20 9 2023

日期选择

Checklist复选框列表

通过--checklist参数创建一个复选框列表框,命令格式: --checklist <text> <height> <width> <list height> <tag1> <item1> <status1>...,其中最后3个参数是一组选项,可以重复添加

参数名

参数用途

参考值

text

对话框标题

复选框列表

height

对话框高度

0

width

对话框宽度

0

list height

列表高度

0

tag1

列表项值,用于返回

value1

item1

列表项名称,用于显示

列表项1

status1

列表项状态,是否选中

on/off

dialog --checklist \
	"复选框列表" 0 0 0 \
	"value1" "列表项1" "on" \
	"value2" "列表项2" "off"

复选框列表

Dselect目录选择

通过--dselect参数创建一个目录选择框,命令格式:--dselect <directory> <height> <width>

参数名

参数用途

参考值

directory

选择框默认文件夹

~

height

对话框高度

0

width

对话框宽度

0

dialog --dselect \
	~ 0 0

目录选择框

Editbox文件编辑

通过--editbox参数创建一个文件编辑框,命令格式:--editbox <file> <height> <width>

参数名

参数用途

参考值

file

编辑的文件

/etc/issue

height

对话框高度

0

width

对话框宽度

0

dialog --editbox \
	/etc/issue 0 0

文件编辑框

Form表单

通过--form参数创建一个表单对话框,命令格式:--form <text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1>...,其中从label1开始到ilen1共8个参数为一组,可以重复添加

参数名

参数用途

参考值

text

对话框标题

表单对话框

height

对话框高度

0

width

对话框宽度

0

form height

表单高度

0

label1

字段标签

字段1

l_y1

字段标签y坐标

1

l_x1

字段标签x坐标

1

item1

字段默认值

value1

i_y1

字段输入框y坐标

1

i_x1

字段输入框x坐标

10

flen1

字段输入框宽度

30

ilen1

字段输入框高度

0

dialog --form \
	"表单对话框" 0 0 0 \
	"字段1" 1 1 "value1" 1 10 30 0 \
	"字段2" 2 1 "value2" 2 10 30 0

表单对话框

Fselect文件选择

通过--fselect参数创建一个文件选择框,命令格式:--fselect <filepath> <height> <width>

参数名

参数用途

参考值

filepath

默认文件路径

/etc/issue

height

对话框高度

0

width

对话框宽度

0

dialog --fselect \
	/etc/issue 0 0

文件选择

Gauge进度条

通过--gauge参数创建一个进度条对话框,命令格式:--gauge <text> <height> <width> [<percent>]

参数名

参数用途

参考值

text

对话框名称

进度条

height

对话框高度

10

width

对话框宽度

30

percent

进度条百分比

0

dialog --gauge \
	"进度条" 10 30 0

如果要动态改变进度条的进度,可以通过管道符向这个命令输入值

{
	for((i = 0; i <= 100; i++)); do
		sleep 0.1
		echo "$i"
		echo "XXXX"
		echo "当前进度:$i%"
	done
} | dialog --gauge "进度条" 10 30 0

进度条

Infobox信息框

通过--infobox参数创建信息框,命令格式: --infobox <text> <height> <width>

参数名

参数用途

参考值

text

消息文本

消息框

height

对话框高度

10

width

对话框宽度

20

dialog --infobox \
	"消息框" 10 20

消息框

但是我们发现,这样创建的对话框会自动关闭,那么需要让其能持续显示,需要在指令的后方增加延迟命令

dialog --infobox \
	"消息框" 10 20 \
&& sleep 3

这样就可以让对话框持续显示3秒

Inputbox文本输入

通过--inputbox参数创建一个文本输入对话框,命令格式:--inputbox <text> <height> <width> [<init>]

参数名

参数用途

参考值

text

对话框标题

输入文本

height

对话框高度

0

width

对话框宽度

0

init

输入框默认值

value

dialog --inputbox \
	"输入文本" 0 0 "value"

文本输入

Inputmenu输入菜单

通过--inputmenu参数创建一个输入菜单,命令格式:--inputmenu <text> <height> <width> <menu height> <tag1> <item1>...,其中最后2个参数为一组,可以重复添加

参数名

参数用途

参考值

text

对话框标题

输入菜单

height

对话框高度

15

width

对话框宽度

0

menu height

目录高度

0

tag1

选项名称

选项1

item1

选项内容

value1

dialog --inputmenu \
	"输入菜单" 15 0 0 \
	"选项1" "value1" \
	"选项2" "value2"

输入菜单

Menu菜单

通过--menu参数创建一个输入菜单,命令格式:--menu <text> <height> <width> <menu height> <tag1> <item1>...,其中最后2个参数为一组,可以重复添加

参数名

参数用途

参考值

text

对话框标题

菜单

height

对话框高度

15

width

对话框宽度

0

menu height

目录高度

0

tag1

选项名称

选项1

item1

选项内容

value1

dialog --menu \
	"菜单" 15 0 0 \
	"选项1" "value1" \
	"选项2" "value2"

菜单

Mixedform多类型表单

通过--mixedform参数创建一个多类型表单,这个表单支持对每个字段的类型进行设置,命令格式:--mixedform <text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1> <itype>...,其中从label1itype共9个参数为一组,可以重复添加

参数名

参数用途

参考值

text

对话框标题

多类型表单

height

对话框高度

0

width

对话框宽度

0

form height

表单高度

0

label1

字段标签

字段1

l_y1

字段标签y坐标

1

l_x1

字段标签x坐标

1

item1

字段默认值

value1

i_y1

字段输入框y坐标

1

i_x1

字段输入框x坐标

10

flen1

字段输入框宽度

30

ilen1

字段输入框高度

0

itype

字段输入框类型:

  • 1:密码类型,输入隐藏

  • 2:只读类型,无法修改

  • 3:只读密码类型,隐藏且无法修改

  • 4:普通文本类型:可以正常修改

4

dialog --mixedform \
	"多类型表单" 0 0 0 \
	"字段1" 1 1 "value1" 1 10 30 0 1 \
	"字段2" 2 1 "value1" 2 10 30 0 2 \
	"字段3" 3 1 "value1" 3 10 30 0 3 \
	"字段4" 4 1 "value1" 4 10 30 0 4

多类型表单

Mixedgauge多字段进度条

通过--mixedgauge参数创建一个多字段进度条,在进度条上方显示多个字段,命令格式:--mixedgauge <text> <height> <width> <percent> <tag1> <item1>...,其中最后2个参数为一组,可以重复添加

参数名

参数用途

参考值

text

对话框标题

多字段进度条

height

对话框高度

0

width

对话框宽度

0

percent

进度条百分比

0

tag1

字段标签

字段1

item1

字段值

value1

dialog --mixedgauge \
	"多字段进度条" 0 0 0 \
	"字段1" "value1" \
	"字段2" "value2"

多字段进度条

我们发现,这个进度条会显示完后自动结束,所以需要通过一个循环让其持续显示

for ((i = 0; i <= 100; i++)); do
	sleep 0.1
   	dialog --mixedgauge \
		"多字段进度条" 0 0 $i \
		"字段1" "value1" \
		"字段2" "value2"
done

多字段进度条动态

Msgbox消息框

通过--msgbox参数创建一个消息框,并带一个按钮,命令格式:--msgbox <text> <height> <width>

参数名

参数用途

参考值

text

消息内容

消息框

height

对话框高度

0

width

对话框宽度

0

dialog --msgbox \
	"消息框" 0 0

消息框

Passwordbox密码输入框

通过--passwordbox参数创建一个密码输入框,密码将隐藏,命令格式:--passwordbox <text> <height> <width> [<init>]

参数名

参数用途

参考值

text

对话框标题

密码输入框

height

对话框高度

0

width

对话框宽度

0

init

默认值

value

dialog --passwordbox \
	"密码输入框" 0 0 "value"

密码输入框

Passwordform密码表单

通过--passwordform参数创建一个密码表单,可以包含多个密码输入框,命令格式:--passwordform <text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1>...,其中label1ilen1共8个参数为一组,可以重复添加

参数名

参数用途

参考值

text

对话框标题

密码表单

height

对话框高度

0

width

对话框宽度

0

form height

表单高度

0

label1

字段标签

字段1

l_y1

字段标签y坐标

1

l_x1

字段标签x坐标

1

item1

字段默认值

value1

i_y1

字段输入框y坐标

1

i_y2

字段输入框x坐标

10

flen1

字段输入框宽度

30

ilen1

字段输入框高度

0

dialog --passwordform \
	"密码表单" 0 0 0 \
	"字段1" 1 1 "value1" 1 10 30 0 \
	"字段2" 2 1 "value2" 2 10 30 0

密码表单

Pause等待对话框

通过--pause参数创建一个等待对话框,显示一个倒计时,命令格式:--pause <text> <height> <width> <seconds>

参数名

参数用途

参考值

text

对话框标题

等待对话框

height

对话框高度

10

width

对话框宽度

0

seconds

等待时间(秒)

3

dialog --pause \
	"等待对话框" 10 0 3

等待对话框

Prgbox命令执行对话框

通过--prgbox参数创建一个命令执行对话框,对话框中显示命令的执行结果,命令格式:--prgbox <text> <command> <height> <width>

参数名

参数用途

参考值

text

对话框标题

命令执行对话框

command

需要执行的命令

cat /etc/issue

height

对话框高度

10

width

对话框宽度

25

dialog --prgbox \
	"命令执行对话框" "cat /etc/issue" 10 25

命令执行对话框

Programbox程序对话框

通过--programbox参数创建一个程序对话框,用于显示程序执行结果,这个参数和grpbox的不同在于这个参数使用stdin传入执行结果,命令格式:--programbox <text> <height> <width>

参数名

参数用途

参考值

text

对话框标题

程序对话框

height

对话框高度

10

width

对话框宽度

25

cat /etc/issue | \
	dialog --programbox \
		"程序对话框" 10 25

程序对话框

Progressbox进程框

通过--progressbox参数创建一个进程框,用于执行进程并将结果显示在对话框中,命令格式:--progressbox <text> <height> <width>

参数名

参数用途

参考值

text

对话框标题

进程框

height

对话框高度

10

width

对话框宽度

50

{
	for ((i=0;i<=100;i+=10)); do
		echo "进程执行中:$i%"
		sleep 0.5
	done
} | dialog --progressbox \
	"进程框" 10 50

进程框

Radiolist单选框

通过--raduilist参数创建一个单选框,命令格式:--radiolist <text> <height> <width> <list height> <tag1> <item1> <status1>...,其中最后3个参数为一组,可以重复添加

参数名

参数用途

参考值

text

对话框标题

单选框

height

对话框高度

0

width

对话框宽度

0

list height

列表高度

0

tag1

选项值,用于输出

option1

item1

选项名称,用于显示

选项1

status1

选项状态,是否选中,若多个选项都设为on,只有第一个on生效

on/off

dialog --radiolist \
	"单选框" 0 0 0 \
	"option1" "选项1" "on" \
	"option2" "选项2" "off"

单选框

Rangebox范围选择

通过--rangebox参数创建一个范围选择框,命令格式:--rangebox <text> <height> <width> <min-value> <max-value> <default-value>

参数名

参数用途

参考值

text

对话框标题

范围选择

height

对话框高度

0

width

对话框宽度

0

min-value

最小值

0

max-value

最大最

100

default-value

默认值

50

dialog --rangebox \
	"范围选择" 0 0 0 100 50

范围选择

Tailbox文件查看框

通过--tailbox参数创建一个文件查看框,用于显示文件内容,命令格式:--tailbox <file> <height> <width>

参数名

参数用途

参考值

file

文件名

/etc/issue

height

对话框高度

10

width

对话框宽度

25

dialog --tailbox \
	/etc/issue 10 25

文件查看框

Textbox文件查看框

通过--textbox参数创建一个文件查看框,用于显示文件内容,命令格式:--textbox <file> <height> <width>

参数名

参数用途

参考值

file

文件名

/etc/issue

height

对话框高度

10

width

对话框宽度

25

dialog --textbox \
	/etc/issue 10 25

文件查看框

Timebox时间选择框

通过--timebox参数创建一个时间选择框,命令格式: --timebox <text> <height> <width> <hour> <minute> <second>

参数名

参数用途

参考值

text

对话框标题

时间选择框

height

对话框高度

0

width

对话框宽度

0

hour

默认小时数

12

minute

默认分钟数

0

second

默认秒数

0

dialog --timebox \
	"时间选择框" 0 0 12 0 0

时间选择框

Treeview树状选择框

通过--treeview参数创建一个树状选择框,命令格式:--treeview <text> <height> <width> <list-height> <tag1> <item1> <status1> <depth1>...,其中tag1depth1共4个参数为一组,可以重复添加

参数名

参数用途

参考值

text

对话框标题

树状选择框

height

对话框高度

0

width

对话框宽度

0

list-height

列表高度

0

tag1

选项值,用于输出

option1

item1

选项名称,用于显示

选项1

status1

选项状态,是否选中

on/off

depth1

选项级别,设定选项处于第几层

0

dialog --treeview \
	"树状选择框" 0 0 0 \
	"option1" "选项1" "on" 0 \
	"option11" "选项11" "off" 1 \
	"option111" "选项111" "off" 2 \
	"option12" "选项12" "off" 1 \
	"option2" "选项2" "off" 0

树状选择框

Yesno确认对话框

通过--yesno参数创建一个确认对话框,命令格式:--yesno <text> <height> <width>

参数名

参数用途

参考值

text

对话框标题

确认对话框

height

对话框高度

0

width

对话框宽度

0

dialog --yesno \
	"确认对话框" 0 0

确认对话框

结尾

这篇文章到这里就结束了,感谢耐心阅读,如果遇到问题可以在下方评论区中讨论。