Shell 中dialog的使用
文章结构:
1. Dialog简介
1.1. 作用简介
1.2 安装包
2. Dialog的基本使用
2.1 使用格式
2.2 通用选项
2.3 控件选项
2.4 个别参数说明
3. Dialog的应用举例
Dialog的简介:
1. 作用
liunx下的dialog工具是一个可以和shell脚本配合使用的文本届面下的创建对话框的工具。
这个对话框使用命令行参数,以确定产生哪些类型的窗口部件。
一个部件是对话框包的窗口元素类型的术语。
每个对话框部件提供的输出有两种形式
一种:使用STDERR
另一种:使用退出状态码,“OK”为0,”Cancle”和“NO”为1.
2.安装包
默认情况下在linux中是没有dialog这个程序的,所以一般得要手动安装:
在安装盘上的Server下面用ls |grep ‘dialog’
dialog-1.0.20051107-1.2.2.i386.rpm
然后rpm -ivh dialog-1.0.20051107-1.2.2.i386.rpm安装下就可以了,当然你也可以到网上下载,可以到上找到。
下面测试一下:
基本使用:
1. 使用格式:
dialog --clear
dialog --create-rc file
dialog支援动态规划,这个功能会产生一个样本,我对这个的理解就是当前dialog的默认使用的环境。
dialog --print-maxsize
这个参数可以查看--boxtype中的选项的参数使用
dialog --common-options --boxtype “text” Height Width
说明:这里的--common-options可以有多个,但--boxtype 只能有一个。
第一个--common-options主要是设置dialog的标题,位置,背景和颜色等,具体的参数说明请参考下面的内容。
第二个 ---boxtype 这个是主要的参数,这个就是我们想要的东西了,指定我们想要的box,box里面的内容,以及怎么显示和让用户选择这些内容。
2. 通用参数
这里列举点常用的,具体的还很多可以用man dialog查看
Man dialog |col -b >file
sed -n '/Common/,/Box/p' file|sed -n '/^ *\-\-\w*/p'|wc -l
这样可以看到有51个common-options
- -backtitle backtitle 指定backtitle字符串显示在背景下,在屏幕的顶部。
- -begin y x 指定的位置在屏幕上的上一个对话框的左上角
- -colors 解读嵌入式“\ Z”的对话框中的文本序列由下面的字符 0-7, b B, u, U, ect,恢复正常的设置使用“\Zn”
- -defaultno 使的是默认值 yes/no,使用no
- -default-item string设置在一份清单,表格或菜单中的默认项目。通常在框中的第一项是默认
- -insecure 输入部件的密码时,明文显示不安全,使用星号来代表每个字符,这样安全点
- -nocancel 设置在输入框,菜单,和复选框中,禁止选“cancel”
- -nook 设置在输入框,菜单,和复选框中,禁止选“ok”
- -no-shadow 禁止阴影出现在每个对话框的底部
- -ok-label string 覆盖使用“OK”按钮的标签
- -timeout secs 超时(返回的错误代码),如果用户在指定的时间内没有给出相应
- -title title 指定将在对话框的上方显示的标题字符串
--clear 用来完成清屏操作
3. 控件选项(boxtype)
这个选项也有很多:
sed -n '/Box Options/,/Obsolete Options/p' file|sed -n '/^ *\-\-\w*/p'|wc -l
可以看到有18个。
类型 用于创建类型的选项 含 义
--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 --print-max-size
Dialog的实际举例:
说明:前面在简介中也介绍了dialog提供的输出有两种形式:
一种:使用STDERR,这个在赋值的时候常用。
另一种:使用退出状态码,“OK”为0,”Cancle”和“NO”为1.
可以用name=$(dialog ~~~~~)将dialog中输入的赋值给name变量。
下面举例说明:
--yesno
Dialog --title ‘this is test ’--yesno
这时候选yes的话echo $? 就为0,选no的话就为1
Dialog --defaultno --yesno ‘test’ 3 20
dialog - -backtitle “The first dialog box ” - -title “hello” - -yesno “Is this your first dialog box?” 7 25
Inputbox:
Tao=(dialog --title 'test' --inputbox 'input you name:' 10 20)
这个是一个错的,这时候回车会说什么都不显示,因为其将显示的东西都赋给tao这个变量了;必须将标准错误和标准输出都重定向到显示器上:
tao=$(dialog --title 'test' --inputbox 'input you name:' 10 20 2>&1>/dev/tty)
也可这样:
dialog --title 'test' --inputbox 'input you name:' 10 20 2>tao
直接将输入的字符存在文件里tao里,不过这个还得对文件进行一次操作。
这时候echo $tao
--menu
这个比较复杂,这里再看下其参数:
--menu
#dialog --title "two girls" --menu 'who is your wife' 10 30 5 1 "the little girl" 2 "the lady" 3 "neither"
tao=$(dialog --title "two girls" --menu 'who is your wife' 20 30 5 1 "the little girl" 2 "the lady" 3 "neither" 2>&1>/dev/tty)
高级:
#tao=(1 “the girl” 2 “the lady” 3 “neigther”)
# dialog --menu "choose!" 20 30 6 "${tao[@]"
--gauge
dialog --title 'test --guage' --guage "copy file。。。" 6 20 5
--form
--form
#dialog --title "ip addr" --form "Please input:" 12 40 4 \
"ip:" 1 1 "" 1 15 15 0 \
"mask:" 2 1 "" 2 15 15 0 \
"gratway:" 3 1 "" 3 15 15 0
#tao=$(dialog --title "ip addr" --form "Please input:" 12 40 4 "ip:" 1 1 "" 1 15 15 0 "mask:" 2 1 "" 2 15 15 0 "greyway:" 3 1 "" 3 15 15 0 2>&1>/dev/tty)
这个也是对tao变量进行赋值:
#Echo $tao
122222 22222 3333333
--radiolist
dialog --title "RadioList Example" --radiolist "Radio List" 20 60 4 tag1 "item1" on tag2 "item2" off tag3 "item3" on tag4 "item4" off
#tao=$(dialog --title "RadioList Example" --radiolist "Radio List" 10 60 4 tag1 "item1" on tag2 "item2" off tag3 "item3" on tag4 "item4" off 2>&1>/dev/tty)
#Echo $tao
其他的参数我感觉也不怎么用,关键是我目前也就学这么多,估计也够用了;等以后用到更实用的再慢慢添加吧!!
-------2010/11/19
做的图片显示不出来~~~郁闷~~哪位大神路过帮忙说下图片如何加载上~~~我是从word上cp上来的~~