• dialog软件包是一个制作窗口的极好工具,利用ANSI转义控制码在文本环境中重新创建了标准Windows对话框。可以很方便地将这些对话框合并到shell脚本中来与脚本用户进行交互。
  • dialog命令使用命令行参数确定生成的Windows小部件的类型。dialog软件包目前支持的小部件类型如下:
小部件描述
calendar提供一个可以在其中选择日期的日历
checklist显示多个项目,这些项目均可以被打开或关闭
form允许建立一个可以填写标签和文本字段的表单
fselect提供一个文件选择窗口以浏览文件
gauge显示一个说明完成百分比的仪表
infobox显示信息而不等待响应
inputbox显示单一的文本窗体框以输入文本
inputmenu提供一个可变及的菜单
menu显示一系列可供选择的选项
msgbox显示消息并要求用户选择OK按钮
pause显示一个说明指定暂停阶段状态的仪表
passwordbox显示一个可以隐藏输入文本的单一文本框
passwordform显示一个带标签和隐藏文本字段的表单
radialist提供一组菜单项,但是值可选择一个项目
tailbox利用tail命令在滚动的窗口中显示文件中的文本
tailboxbg与tailbox相同,但是需在背景模式下操作
texbox在滚动窗口中显示文件的内容
timebox提供一个用来选择时、分、秒的窗口
yesno提供一个含有Yes/No按钮的简单消息
  • 要在命令行上具体指定一个特定的小部件,需要使用双破折号格式:dialog --widget parameters #parameters定义该小部件窗口的大小以及它所需的任何文本

  • 每个对话框小部件均以两种形式提供输出:

    1. 使用STDERR:dialog --inputbox "Enter your age :" 10 20 2>age.txt
    2. 使用退出代码状态
  • dialog常用部件

  • msgbox小部件:dialog --msgbox text height width。dialog命令将使用heigth和width参数自动调整文本以适应所创建的窗口大小。放置标题,使用--title参数以及标题文本。必须放在–msgbox参数之前。

  • yesno小部件:e.g:dialog --title "test" --yesno "我是白痴吗?" 10 20

  • 输入框小部件(inputbox):dialog命令将文本字符串的值发送到STDERR。必须重定向此值来获取答案:e.g:dialog --inputbox "Enter your age:" 10 20 2>age.txt

  • 文本框小部件(textbox):e.g:dialog --textbox /etc/passwd 50 150窗口包含参数指定的文件的文本。

  • 菜单小部件(menu):dialog --menu "Sys Admin Menu"20 30 10 1 "Display disk space" 2 "Display users" 3 "Display memory usage 4 "Exit " 2>test.txt 第一个参数定义菜单的标题。后两个参数定义菜单窗口的高度和宽度,而第三个参数定义同时出现在窗口中的菜单项数。这些参数之后,必须添加菜单项目对。

  • fselect小部件:浏览文件从而选择文件:e.g:dialog --title "Select a file" --fselect $HOME/ 10 50 2>test.txtfselect后的第一个参数是窗口所使用的起始位置。

  • dialog命令选项

选项描述
- -add-widget除非按Esc或Cancel键,否则继续进入下一个对话框
- -aspect ratio指定窗口宽度/高度的纵横比
- -backtitle title指定在屏幕顶部、背景上显示的标题
- -bedin x y指定窗口左上角的起始位置
- -cancel-label lable为Cancel按钮指定一个可供选择的标签
- -clear使用对话框默认背景色清除显示
- -colors允许在对话框文本中嵌入ANSI颜色代码
- -cr-wrap允许在对话框文本中加入换行符,强制换行。
- -create-rc file转储样本配置文件至指定文件
- -defaultno将yes/no对话框的默认值上设置为NO
- -default-item string设置检查列表、表单或菜单对话框的默认项目
- -exit-label label为Exit按钮指定可供选择的标签
- -extra-button在OK和Cancel按钮之间,显示一个其他按钮
- -extra-label label为Extra按钮指定可供选择的标签
- -help显示dialog命令帮助信息
  • 在脚本中使用dialog命令:在脚本中使用dialog命令是一件非常容易的事,只需记住两点: 1. 如果Cancel或No按钮可用,请检查dialog命令的退出状态。 2. 重定向STDERR以获取输出值。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 #!/bin/bash
#using gdialog to create a menu
temp=`mktemp -t test.XXXXXX`
temp2=`mktemp -t test2.XXXXXX`
disk() {
	df -k >  $temp
	gdialog --textbox $temp 20 60
}
users() {
	who >  $temp
	gdialog --textbox $temp 20 60
}
memusage() {
	cat /proc/meminfo >  $temp
	gdialog --textbox $temp 20 60
}
while [ 1 ]
do
	gdialog --menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display users" 3 "Display memory usage" 0 "Exit" 2> $temp2
if [ $? -eq 1 ]
then
	break
fi
selection=`cat $temp2`
case $selection in
1)
	disk;;
2)
	users;;
3)
	memusage;;
0)
	break;;
*)
	gdialog --msgbox "Sorry,invalid selection" 10 30
esac
done
rm -f $temp 2> /dev/null
rm -f $temp2 2> /dev/null
  • KDE和GNOME桌面环境都扩充了dialog命令:KDE环境下默认包括kdialog软件包,GNOME环境下默认包括gdialog和zenity软件包。