Liunx下的dialog工具是一个可以和shell脚本配合使用的文本界面下的创建对话框的工具,每个对话框提供的输出有两种形式:
- 将所有输出到
stderr输出,不显示到屏幕。 - 使用退出状态码,
OK为0,NO为1,ESC为255。
通用选项如下(这些选项来设置dialog box的背景、颜色和标题等):
--title <title>:指定将在对话框的上方显示的标题字符串。--no-shadow:禁止阴影出现在每个对话框的底部。--shadow:应该是出现阴影效果。--insecure:输入部件的密码时,明文显示不安全,使用星号来代表每个字符。--no-cancel:设置在输入框、菜单和复选框中,不显示cancel项。--clear:完成清屏操作。在框体显示结束后,清除框体。这个参数只能单独使用,不能和别的参数联合使用。--ok-label <str>:覆盖使用OK按钮的标签,换做其他字符。--cancel-label <str>:功能同上。--backtitle <backtitle>:指定的backtitle字符串显示在背景顶端。--begin <y> <x>:指定对话框左上角在屏幕的上的做坐标。--timeout <secs>:超时(返回的错误代码),如果用户在指定的时间内没有给出相应动作,就按超时处理。--stderr:以标准错误方式输出。--stdout:以标准方式输出。--default-item <str>:设置在一份清单,表格或菜单中的默认项目。通常在框中的第一项是默认。
常见的对话框控件选项有:
--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 [<percent>]
示例为:
# 固定进度显示
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
这篇博客介绍了Linux中的dialog工具,这是一个用于创建文本界面对话框的工具,可与shell脚本配合使用。dialog提供了多种选项,如设置标题、阴影、输入输出方式等,以及各种对话框控件,如消息框、输入框、菜单、日历等。用户可以通过这些控件进行交互,例如选择日期、输入文本、选择文件等。通过检查退出状态码或重定向标准错误流,可以获取用户输入的信息。示例代码展示了如何使用dialog创建不同类型的对话框。
1152

被折叠的 条评论
为什么被折叠?



