前言
liunx 下的dialog
工具是一个可以和shell脚本配合使用的文本界面下的创建对话框的工具。
获取返回结果
dialog程序的对话框默认通过stderr
返回,需要使用文件定向符将返回结果重定向到一个临时文件中,我将使用一个输入框演示:
dialog --inputbox \
"输入文本" 0 0 "value" 2>.dialog_temp
result=`cat .dialog_temp`
此时,$result
变量中将会存储输入框输入的值
通用参数
通用参数需要添加在控件参数之前
基本控件
Buildlist 双列列表
通过--buildlist
参数创建一个双列列表,命令格式:--buildlist <text> <height> <width> <list- height> <tag1> <item1> <status1>...
,其中最后3个参数是一组选项,可以重复添加
dialog --buildlist \
"双列列表" 0 0 0 \
"value1" "选项1" "on" \
"value2" "选项2" "off"
Calendar日期选择
通过--calendar
参数创建一个日期选择框,命令格式:--calendar <text> <height> <width> <day> <month> <year>
dialog --calendar \
"日期选择框" 0 0 \
20 9 2023
Checklist复选框列表
通过--checklist
参数创建一个复选框列表框,命令格式:--checklist <text> <height> <width> <list height> <tag1> <item1> <status1>...
,其中最后3个参数是一组选项,可以重复添加
dialog --checklist \
"复选框列表" 0 0 0 \
"value1" "列表项1" "on" \
"value2" "列表项2" "off"
Dselect目录选择
通过--dselect
参数创建一个目录选择框,命令格式:--dselect <directory> <height> <width>
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个参数为一组,可以重复添加
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>
dialog --fselect \
/etc/issue 0 0
Gauge进度条
通过--gauge
参数创建一个进度条对话框,命令格式:--gauge <text> <height> <width> [<percent>]
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>
dialog --infobox \
"消息框" 10 20
但是我们发现,这样创建的对话框会自动关闭,那么需要让其能持续显示,需要在指令的后方增加延迟命令
dialog --infobox \
"消息框" 10 20 \
&& sleep 3
这样就可以让对话框持续显示3秒
Inputbox文本输入
通过--inputbox
参数创建一个文本输入对话框,命令格式:--inputbox <text> <height> <width> [<init>]
dialog --inputbox \
"输入文本" 0 0 "value"
Inputmenu输入菜单
通过--inputmenu
参数创建一个输入菜单,命令格式:--inputmenu <text> <height> <width> <menu height> <tag1> <item1>...
,其中最后2个参数为一组,可以重复添加
dialog --inputmenu \
"输入菜单" 15 0 0 \
"选项1" "value1" \
"选项2" "value2"
Menu菜单
通过--menu
参数创建一个输入菜单,命令格式:--menu <text> <height> <width> <menu height> <tag1> <item1>...
,其中最后2个参数为一组,可以重复添加
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>...
,其中从label1
到itype
共9个参数为一组,可以重复添加
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>
dialog --msgbox \
"消息框" 0 0
Passwordbox密码输入框
通过--passwordbox
参数创建一个密码输入框,密码将隐藏,命令格式:--passwordbox <text> <height> <width> [<init>]
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>...
,其中label1
到ilen1
共8个参数为一组,可以重复添加
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>
dialog --pause \
"等待对话框" 10 0 3
Prgbox命令执行对话框
通过--prgbox
参数创建一个命令执行对话框,对话框中显示命令的执行结果,命令格式:--prgbox <text> <command> <height> <width>
dialog --prgbox \
"命令执行对话框" "cat /etc/issue" 10 25
Programbox程序对话框
通过--programbox
参数创建一个程序对话框,用于显示程序执行结果,这个参数和grpbox的不同在于这个参数使用stdin传入执行结果,命令格式:--programbox <text> <height> <width>
cat /etc/issue | \
dialog --programbox \
"程序对话框" 10 25
Progressbox进程框
通过--progressbox
参数创建一个进程框,用于执行进程并将结果显示在对话框中,命令格式:--progressbox <text> <height> <width>
{
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个参数为一组,可以重复添加
dialog --radiolist \
"单选框" 0 0 0 \
"option1" "选项1" "on" \
"option2" "选项2" "off"
Rangebox范围选择
通过--rangebox
参数创建一个范围选择框,命令格式:--rangebox <text> <height> <width> <min-value> <max-value> <default-value>
dialog --rangebox \
"范围选择" 0 0 0 100 50
Tailbox文件查看框
通过--tailbox
参数创建一个文件查看框,用于显示文件内容,命令格式:--tailbox <file> <height> <width>
dialog --tailbox \
/etc/issue 10 25
Textbox文件查看框
通过--textbox
参数创建一个文件查看框,用于显示文件内容,命令格式:--textbox <file> <height> <width>
dialog --textbox \
/etc/issue 10 25
Timebox时间选择框
通过--timebox
参数创建一个时间选择框,命令格式:--timebox <text> <height> <width> <hour> <minute> <second>
dialog --timebox \
"时间选择框" 0 0 12 0 0
Treeview树状选择框
通过--treeview
参数创建一个树状选择框,命令格式:--treeview <text> <height> <width> <list- height> <tag1> <item1> <status1> <depth1>...
,其中tag1
到depth1
共4个参数为一组,可以重复添加
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>
dialog --yesno \
"确认对话框" 0 0
结尾
这篇文章到这里就结束了,感谢耐心阅读,如果遇到问题可以在下方评论区中讨论。
评论区