Liunx下的dialog工具是一个可以和shell脚本配合使用的文本界面下的创建对话框的工具,每个对话框提供的输出有两种形式:
将所有输出到stderr输出,不显示到屏幕。使用退出状态码,OK为0,NO为1,ESC为255。
通用选项如下(这些选项来设置dialog box的背景、颜色和标题等):
--title
常见的对话框控件选项有:
--calendar:提供了一个日历,让你可以选择日期。--checklist:允许你显示一个选项列表,每个选项都可以被单独的选择(复选框)。--from:允许您建立一个带标签的文本字段,并要求填写。--fselect:提供一个路径,让你选择浏览的文件。--gauge:显示一个表,呈现出完成的百分比,就是显示出进度。--infobox:显示消息后,(没有等待响应)对话框立刻返回,但不清除屏幕(信息框)。--inputbox:让用户输入文本(输入框)。--inputmenu:提供一个可供用户编辑的菜单(可编辑的菜单框)。--menu:显示一个列表供用户选择(菜单框)。--msgbox:显示一条消息,并要求用户选择一个确定按钮(消息框)。--pause:显示一个表格用来显示一个指定的暂停期的状态。--passwordbox:显示一个输入框,它隐藏文本。--passwordfrom:显示一个来源于标签并且隐藏的文本字段。--radiolist:提供一个菜单项目组,只有一个项目,可以选择(单选框)。--tailbox:在一个滚动窗口文件中使用tail命令来显示文本。--tailboxbg:跟tailbox类似,但是在background模式下操作。--textbox:在带有滚动条的文本框中显示文件的内容(文本框)。--timebox:提供一个窗口,选择小时、分钟和秒。--yesno:提供一个带有yes和no按钮的简单信息框(是/否框)。
消息框格式如下:
dialog --msgbox text height width
示例为:
dialog --title TESTING --msgbox "this is a test" 10 20
yesno框格式如下:
dialog --yesno text height width
示例为:
dialog --title "yes/no" --no-shadow --yesno "Delete the file /tmp/chensiyao.txt?" 10 30
输入框格式如下:
dialog --inputbox text height width
示例为:
# 这里的“2>”是将错误信息输出重定向到了“/tmp/name.txt”文件中
dialog --title "Input your name" --inputbox "Please input your name:" 10 30 2> /tmp/name.txt
密码框格式如下:
dialog --passwordbox text height width
示例为:
dialog --title "Password" --passwordbox "Please give a password for the new user:" 10 35
这样密码就暴露出来了,通常会加上一个安全选项--insecure,将每个字符用*来显示出来:
dialog --title "Password" --insecure --passwordbox "Please give a password for the new user:" 10 30
文本框格式如下:
dialog --textbox file height width
示例为:
dialog --title "The fstab" --textbox /etc/fstab 17 40
菜单框格式如下:
dialog --menu text height width menu-height tag1 item1 tag2 item2 ...
示例为:
dialog --title "Pick a choice" --menu "Choose one" 12 35 5 1 "say hello to everyone" 2 "thanks for your support" 3 "exit"
Fselect框(文件选框)格式如下:
dialog --fselect filepath height width
示例为:
dialog --title "Pick one file" --fselect /root/ 7 40
复选框格式如下:
dialog --checklist "Test" height width menu-height tag1 item1 tag2 item2 ...
示例为:
dialog --backtitle "Checklist" --checklist "Test" 20 50 10 Memory Memory_Size 1 Dsik Disk_Size 2
显示日历格式如下:
dialog --calendar "Date" height width day month year
示例为:
# 显示当前日期
dialog --title "Calendar" --calendar "Date" 5 50
# 显示指定日期
dialog --title "Calendar" --calendar "Date" 5 50 1 2 2013
进度框架格式:
dialog --gauge text height width [
示例为:
# 固定进度显示
dialog --title "installation pro" --gauge "installation" 10 30 10
# 实时动度进度
for i in {1..100} ;do echo $i;done | dialog --title "installation pro" --gauge "installation" 10 30
form框架(表单)格式如下:
dialog --form text height width formheight [ label y x item y x flen ilen ] ...
其中flen表示field length,定义了选定字段中显示的长度;ilen表示input-length,定义了在外地输入的数据允许的长度。使用up/down(或Ctrl-N、Ctrl-P)在使用领域之间移动。使用tab键在窗口之间切换。示例为:
dialog --title "Add a user" --form "Please input the infomation of new user:" 12 40 4 \
"Username:" 1 1 "" 1 15 15 0 \
"Full name:" 2 1 "" 2 15 15 0 \
"Home Dir:" 3 1 "" 3 15 15 0 \
"Shell:" 4 1 "" 4 15 15 0
为了能够访问用户输入的结果,对于文本输入,你只需要重定向标准错误流或检查环境变量$?的内容,$?的值实际上就是前一个命令的退出状态:
#!/bin/sh
dialog --title "Questionnaire" --msgbox "Welcome to my simple survey" 9 18
dialog --title "Confirm" --yesno "Are you willing to take part?" 9 18
if [ $? !=0 ]; then # yes的返回码为0,“$?”为上一个命令的退出状态。
dialog --infobox "Thank you anyway!" 5 20
sleep 2
dialog --clear # “-clear”作用为清屏。
exit 0
fi
# 重定向标准错误输出流(2)到“_1.txt”。
dialog --title "Questionnaire" --inputbox "Please enter your name" 9 30 2>_1.txt
Q_NAME=$(cat _1.txt)
dialog --menu "$Q_NAME,what music do you like best?" 15 30 4 1 "Classical" 2 "Jazz" 3 "Country" 4 "Other" 2>_1.txt
Q_MUSIC=$(cat _1.txt)
if [ "$Q_MUSIC" == "1" ]; then
dialog --infobox "Good choice!" 5 20
else
dialog --infobox "Thank you anyway" 5 20
fi
sleep 5
dialog --clear
exit 0