使用dialog撰写文本接口程序

转自:http://book.51cto.com 2010-03-28 15:01 卧龙小

· 摘要:《实战Linux Shell编程与服务器管理》第16章使用Shell Script撰写文字和图形接口程序,本章介绍如何在Bash Shell Script中,利用dialog和xdialog这两个工具,撰写具亲和力的用户接口程序。本节为大家介绍使用dialog撰写文本接口程序。

第16使用Shell Script撰写文字和图形接口程序

dialog是一种在shell script中建立对话框(dialog box)的工具,利用dialog可建立不同的信息和问题窗口,增加script的方便性,提高程序的亲和力。有许多Linux套件的安装程序,就是使用 dialog来编写用户界面的,如B2D Linux、Slackware Linux等。

dialog最初的作者是Savio Lam(lam836@cs.cuhk.hk),后来Pako(demarco_p@abramo.it)接手维护,在0.9a版时改名叫cdialog,1999年12月T.Dickey <dickey@invisible-island.net> 以0.9a为基础推出0.9b的版本,后来就由Dickey持续维护到今天,在http://freshmeat.net/projects/ cdialog/的项目地址上,仍名为cdialog。

dialog建立的是终端模式下的文本接口,另外有一种和dialog语法兼容的工具叫xdialog,xdialog则是拿来建立X window下的图形接口。xdialog使用GTK+图形工具来完成各式各样的对话框,可融入不同的桌面主题(desktop theme)。xdialog的网址为http://xdialog.free.fr/

除了xdialog之外,还有一个功能也十分强大的图形接口工具,叫zenity。zenity是改写自老版本的gdialog,zenity套件 中有一支使用perl写的gdialog程序,可转换兼容于gdialog的语法。zneity也是使用GTK+ 来操作,网址为http://freshmeat.net/projects/zenity

本章介绍如何在Bash Shell Script中,利用dialog和xdialog这两个工具,撰写具亲和力的用户接口程序。

B2D、Debian、Ubuntu的用户,可通过以下指令来安装需要的套件:

1 apt-get update

2 apt-get install dialog xdialog zenity

16.1 使用dialog撰写文本接口程序(1

dialog目前支持的对话框功能有:

3 calendar, checklist, form, fselect, gauge, infobox,
inputbox, inputmenu, menu, msgbox

4 (message), password, pause, radiolist, tailbox,
tailboxbg, textbox, timebox, and yesno

5 (yes/no).

这些对话框的语法,至少要有3个参数:标题或信息内容、窗口的高度、宽度。除了这3项,不同的对话框可能还需要额外的参数,语法才算完整。

使用者操作对话框之后,如果有输出,通常会转向到标准错误;若有选择,则可以由执行对话框命令结束后的离开状态来判断。

以下介绍常用的对话框的用法。

显示信息(msgbox)

语法:dialog --msgbox信息内容 高度 宽度

用途 显示信息。

用例1

6 dialog --msgbox "这是一个测试" 10 40

执行结果:

clip_image001

图16-1 msgbox的执行结果

窗口的按钮只有一个,若使用者按下【Enter】键,则窗口随即结束,离去状态为0;若用户按【Esc】键,窗口也会结束,但离去状态为255。我们可以用$?这个变量来检查用户对窗口的反应:

范例 16-1-1:msgbox1.sh

7 01. #! /bin/bash

8 02.

9 03. DIA='/usr/bin/dialog'

10 04.

11 05. $DIA --msgbox "这是一个测试" 10 40

12 06. x=$?

13 07. if [ "$x" -eq 0 ]; then

14 08. echo '你按了ENTER键'

15 09. elif [ "$x" -eq 255 ]; then

16 10. echo '你按了ESC键'

17 11. else

18 12. echo '未知的错误: 你可能按了Ctrl-C键'

19 13. fi

说明

行3,定义变量DIA为dialog的程序路径和文件名,这样,将来修改script的自由度较高。

行5,显示窗口。

行6,使用变量x接收行5执行后"离去状态变量$?"的内容。

行7~13,依离去状态值,显示用户按了哪一个键。

以上是对话框的基本用法,在实际应用时,还有3个选项可控制对话框的外观:

16.1 使用dialog撰写文本接口程序(2

用例2

1 dialog --backtitle "设置阶段" --title "注意"
--msgbox "这是一个测试" 10 40

执行结果:

clip_image002

图16-2 --backtitle选项指定的标题,
出现在背后左上角的位置

可以发现--backtitle选项指定的标题,出现在背后左上角的位置;--title选项指定的标题,出现在对话框顶部。

如果范例2再加上--no-shadow的选项,对话框的外框就不会有阴影的效果。如下所示。

用例3

2 dialog --backtitle "设置阶段" --title "注意"
--no-shadow --msgbox "这是一个测试" 10 40

执行结果:

clip_image003

图16-3 加上 --no-shadow的选项,
对话框的外框就不会有阴影的效果

以上这些范例算是对话框的基本型,其他对话框,可视为窗口的变化。用这种观点,对dialog的各种用法,很快地就可以上手。

是或否对话框(yesno)

语法:dialog --yesno信息内容 高度 宽度

用途 显示信息,并询问确定与否。

用例

3 dialog --yesno "要继续吗?" 10 40

执行结果:

clip_image004

图16-4 是或否对话框(yesno)

依据$?的值,可判断使用者选择了"是"或"否":

若$?的值为0,表示使用者选"是"。

若$?的值为1,表示选"否"。

若$?的值为255,表示使用者按了【Esc】键,放弃回答。

范例 16-1-2:yesnobox1.sh

4 01. #! /bin/bash

5 02.

6 03. DIA='/usr/bin/dialog'

7 04.

8 05. CHOICE=''

9 06.

10 07. dialog --yesno "要继续吗?" 10 40

11 08. x=$?

12 09. if [ "$x" -ne 0 ]; then

13 10. CHOICE='NO'

14 11. fi

15 12.

16 13. if [ -n "$CHOICE" ]; then

17 14. echo '你选择不继续...'

18 15. else

19 16. echo '你选择继续...'

20 17. fi

说明

行9,若$?不等于0,表示使用者没有选择"是",那么,便设定CHOICE的变量值为NO。

行13,若CHOICE的值不空,表示使用者选"否"。

请注意,信息内容的字符串长度,如果超过对话框设定的宽度,显示时会自动换行。你也可以在信息字符串中,使用/n来指定要换行的位置。

16.1 使用dialog撰写文本接口程序(3

多选一对话框(radiolist

语法:dialog --radiolist信息内容 高 宽 选项数目 选项列表

选项的格式是:"选项名称 选项说明 默认是否启用",其中on代表启用,off代表不启用。选项列表则是由各选项所组成的字符串。

用途 多选一。

用例

范例 16-1-3:radiolist1.sh

1 01. #! /bin/bash

2 02.

3 03. DIA='/usr/bin/dialog'

4 04.

5 05. TMP="/tmp/radiolist.$$"

6 06. M1="请选择您偏爱的文件系统"

7 07. NUMFS=3

8 08. FSLIST="ext2第2版的扩展文件系统off
ext3第3版的扩展文件系统on ext4

9 第4版的扩展文件系统off"

10 09.

11 10. $DIA --radiolist "$M1" 10 40 $NUMFS $FSLIST 2> $TMP

12 11.

13 12. FSTYPE=$(cat $TMP)

14 13. [ -z "$FSTYPE" ] && FSTYPE="ext3"

15 14.

16 15. rm -f "$TMP"

17 16.

18 17. echo "您选择的是: $FSTYPE"

行5,建立一临时文件TMP。

行6,设定M1为欲显示的信息内容。

行7,设定NUMFS为选项数目,这里设为3,表示共有3个选项。

行8,FSLIST是radiolist的选项列表,其格式是:"选项名称 选项说明 默认是否启用",这3项彼此之间用空格符隔开,最后一项若是on,则代表默认启用,若是off,则代表不启用。由于选项数目为3,因此,FSLIST中共 有9项,1~3项是ext2的选项设定,off代表ext2默认不启用;4~6项为ext3的选项设定,on代表ext3默认启用;7~9项是ext4的 选项设定,off代表ext4默认不启用。用户可按上下方向键来移动光标位置,按空格键可做选择,按【Tab】键可在"选项"、"确定"、"取消"3个按 钮之间移动切换。

行10,使用者的选择,可能是ext2、ext3、ext4这3个"选项名称"之一,默认会由标准错误输出,因此,使用2>把标准错误的输出结果转向存入TMP临时文件中,利用这个方法,我们便可取得用户选择的项目。

行12,取出临时文件TMP的内容,放入变量FSTYPE中。

行13,如果FSTYPE变量内容是空的,为保险起见,给FSTYPE设一个默认值ext3。

行15,删除临时文件。

行17,显示用户所做的选择。

执行结果:

clip_image005

图16-5 多选一对话框

选单对话框(menu)

语法:dialog --menu信息内容 高 宽 选单高度 选项列表

选项的格式是:"选项名称 选项说明"。选项列表则是由一个或一个以上的选项所组成的字符串。

用途 建立一选单供使用者选择。

--menu和--radiolist的用法差不多,差别在于--menu不指定哪一个选项默认是否启用,且多了一个选项高度。操作选单对话框,可 使用上下箭头键移动光标,各选项的第一个字为热键,可单按选项的第一字符来做选择,或按下1~9的数字键来选择对应的选项。用户做了选择后,该选项的"选 项名称"就是答案,默认会由标准错误输出。若是加上--help-button选项,则会多出一个求助的按钮,script设计者可借此安排一个说明画 面。

若选项的数目超过选单的高度,则会出现滚动条,供用户上下移动选项。

用例

范例 16-1-4:menu1.sh

19 01. #! /bin/bash

20 02.

21 03. DIA='/usr/bin/dialog'

22 04.

23 05. TMP="/tmp/menu.$$"

24 06. M1="请选择您偏好的文件系统"

25 07. FSLIST="1.ext2第2版的扩展文件系统2.ext3
第3版的扩展文件系统3.ext4

26 第4版的扩展文件系统"

27 08.

28 09. $DIA --menu "$M1" 10 40 4 $FSLIST 2> $TMP

29 10.

30 11. FSTYPE=$(cat $TMP)

31 12. [ -z "$FSTYPE" ] && FSTYPE="ext3"

32 13.

33 14. rm -f "$TMP"

34 15.

35 16. echo "您选择的是: $FSTYPE"

行9,对话框的高宽分别是10行和40个字符宽,选单高度是4行,选项列表的内容在FSLIST中。使用2>把使用者的选择由标准错误转向存入TMP临时文件中。

执行结果:

clip_image006

图16-6 除了用箭头键做选择外,
也可以直接按数字键来做选择

这里,除了上下箭头键之外,也可以单按1、2、3等数字键来做选择,然后按【Enter】键做确定。

16.1 使用dialog撰写文本接口程序(4

单行输入对话框(inputbox)

语法:dialog --inputbox信息内容 高 宽 初始值

初始值可以省略。若有设定初始值,则输入栏中会出现该初始值。

用途 要求用户输入一列字符串。使用者可在输入栏中,进行输入或各种编辑的动作。

用例

范例 16-1-5:inputbox1.sh

1 01. #! /bin/bash

2 02.

3 03. DIA='/usr/bin/dialog'

4 04.

5 05. TMP="/tmp/inputbox.$$"

6 06.

7 07. DEFHNAME="sample.edu.tw"

8 08. M1="请设置主机名:"

9 09.

10 10. $DIA --inputbox "$M1" 10 40 $DEFHNAME 2> $TMP

11 11.

12 12. HNAME=$(cat $TMP)

13 13. [ -z "$HNAME" ] && HNAME=$DEFHNAME

14 14.

15 15. rm -f "$TMP"

16 16.

17 17. echo "你设定的主机名是: $HNAME"

说明

行7,使用者若没有输入就直接按【Enter】键确定,则默认的主机名就是DEFHNAME的值。

行10,把用户输入的字符串转向存入TMP临时文件中。

行12,取出交换空间的内容,放入变量HNAME中。

行13,若HNAME为空,则把默认的主机名设给HNAME。

行17,显示用户输入的结果。

执行结果:

clip_image007

图16-7 执行结果

输入密码对话框(passwordbox)

语法:dialog --passwordbox信息内容 高 宽 初始值

初始值可以省略。若有设定初始值,则输入栏中会出现该初始值。

用途 要求用户输入密码。

当用户输入时,默认不会显示出来。但若有提供初始值,则一开始会出现该初始值。若在执行dialog时加上--insecure的选项,那么,当用户键入密码时,会以*替代用户输入的字符,出现在输入栏中。

用例1

范例 16-1-6:passwordbox1.sh

18 01. #! /bin/bash

19 02.

20 03. DIA='/usr/bin/dialog'

21 04.

22 05. TMP="/tmp/passwordbox.$$"

23 06.

24 07. DEFPWD='b2d is best'

25 08. M1="请设置一组密码:"

26 09.

27 10. $DIA --passwordbox "$M1" 10 40 2> $TMP

28 11.

29 12. PWD=$(cat $TMP)

30 13. [ -z "$PWD" ] && PWD=$DEFPWD

31 14.

32 15. rm -f "$TMP"

33 16.

34 17. echo "你设定的密码是: $PWD"

列7,设定默认的密码变量DEFPWD。列10,执行passwordbox,将设定密码的结果存入TMP临时文件中。

列12,取出临时盘的内容,放入变量PWD中。

列13,若PWD为空,则指定默认的密码给PWD。

列17,显示设置的密码。

执行结果:

clip_image008

图16-8 passwordbox1.sh的执行结果

16.1 使用dialog撰写文本接口程序(5

用例2

以下是加上--insecure选项的范例。

范例 16-1-7:passwordbox2.sh

1 01. #! /bin/bash

2 02.

3 03. DIA='/usr/bin/dialog'

4 04.

5 05. TMP="/tmp/passwordbox.$$"

6 06.

7 07. DEFPWD='b2d is best'

8 08. M1="请设置一组密码:"

9 09.

10 10. $DIA --insecure --passwordbox "$M1" 10 40 2> $TMP

11 11.

12 12. PWD=$(cat $TMP)

13 13. [ -z "$PWD" ] && PWD=$DEFPWD

14 14.

15 15. rm -f "$TMP"

16 16.

17 17. echo "你设置的密码是: $PWD"

执行结果:

clip_image009

图16-9 passwordbox2.sh的执行结果

显示进度对话框(gauge)

语法:dialog --gauge信息内容 高 宽 初始进度百分比值

初始进度值可以省略,此时其百分比为0。

用途 显示进度百分比的直方图。

--gauge默认会由标准输入读取进度百分比的值,并在对话框中显示对应的进度直方图,当不再读取到任何输入值时(即读到EOF),随即离开此对话框。

用例1

18 dialog --gauge "安装进度..." 10 40 80

这里,设定执行进度百分比为80%。

执行结果:

clip_image010

图16-10 显示进度对话框

不过,上述范例是静态的,作用不大,应改成动态的,较能呈现目前处理的现况。

用例2

范例 16-1-8:progress1.sh

19 01. #! /bin/bash

20 02.

21 03. {

22 04. for ((i=1;i<=10;i++))

23 05. do

24 06. let I=10*i

25 07. echo $I

26 08. sleep 1

27 09. done

28 10.

29 | dialog --guage "安装进度" 5 60 0

行4,使用for循环,i从1到10结束。

行6,把i放大10倍,指定给I。

列7,把进度百分比I显示到标准输出。

行8,为了让进度条有动态的感觉,在这里停顿1秒钟。

行3~10,把for循环的输出,经由管线喂给dailog。

行10,dialog由百分比0开始显示,然后百分之10、20、30…,一直到百分之百,才结束此对话框。

执行结果:

clip_image011

图16-11 progress1.sh的执行结果

【责任编辑:云霞 TEL:(010)68476606】

16.1 使用dialog撰写文本接口程序(6

进度条除了往右增长之外,运用循环的技巧,也可以使进度条往左方倒退显示进度。以下范例,会由0%显示到100%,然后再递减到0%。

用例3

范例 16-1-9:progress2.sh

1 01. #! /bin/bash

2 02.

3 03. {

4 04. for ((i=1;i<=10;i++))

5 05. do

6 06. let I=10*i

7 07. echo $I

8 08. sleep 1

9 09. done

10 10.

11 11. echo

12 12.

13 13. for ((i=9;i>=0;i--))

14 14. do

15 15. let I=10*i

16 16. echo $I

17 17. sleep 1

18 18. done

19 19.

20 dialog --guage "安装进度" 5 60 0

核查列表对话框(checklist)

语法:dialog --checklist信息内容 高 宽 核查列表高度 核查项目列表

核查项目的格式是:"选项名称 选项说明 启用状态"。on代表启用,off代表不启用。核查项目列表则是由一个或一个以上的核查项目所组成的字符串。

用途 建立一选单供使用者做多重选择。

--checklist和--menu的用法差不多,差别在于--checklist须指定核查项目默认是否启用,且可多选。操作核查列表对话框, 可使用上下箭头键移动光标,按空格键可进行核查,另外,各选项的的第一个字为热键,可单按选项的第一字符来做选择,或按下1~9的数字键来选择对应的选 项。用户做了选择后,该选项的"选项名称"就是多重选择的答案之一,默认会由标准错误输出,输出时,各选项默认会用双引号含括。

若选项的数目超过列表的高度,则会出现滚动条,供用户上下移动选项。

用例

范例 16-1-10:checklist1.sh

21 01. #! /bin/bash

22 02.

23 03. DIA='/usr/bin/dialog'

24 04.

25 05. TMP="/tmp/checklist.$$"

26 06. M1="请选择您偏好的文件系统"

27 07. FSLIST="1.ext2第2版的扩展文件系统on 2.ext3
第3版的扩展文件系统on 3.ext4

28 第4版的扩展文件系统off"

29 08.

30 09. $DIA --checklist "$M1" 10 40 4 $FSLIST 2> $TMP

31 10.

32 11. FSTYPE=$(cat $TMP)

33 12. [ -z "$FSTYPE" ] && FSTYPE="ext3"

34 13.

35 14. rm -f "$TMP"

36 15.

37 16. echo "您选择的是: $FSTYPE"

说明

行7,核查项目列表中共有3个核查项目,前两个的默认状态是启用(on)。

行9,对话框的高宽分别是10行和40个字符宽,核查列表的高度是4行,选项列表的内容在FSLIST中。使用2> 把使用者的选择由标准错误转向存入TMP临时文件中。

执行结果:

clip_image012

图16-12 checklist1.sh的执行结果

如果加上选项--separate-output,那么,用户多重选择的答案会分别输出,不会用双引号含括,其语法如下:

38 $DIA --separate-output --checklist "$M1" 10 40 4 $FSLIST

如果加上选项--single-quoted,则输出多重选择的答案时,则视需要加上单引号或不加任何引号,其语法如下:

39 $DIA --single-quoted --checklist "$M1" 10 40 4 $FSLIST

【责任编辑:云霞 TEL:(010)68476606】

16.1 使用dialog撰写文本接口程序(7

文件对话框(textbox

语法:dialog --textbox文本区 高 宽

用途 显示文本区内容。

可使用箭头键、PgUP、PgDn或使用vi的h、j、k、l按键法,来滚动显示对话框中的内容。

1 dialog --textbox b2d.txt 10 40

信息对话框(infobox

语法:dialog --infobox信息内容 高 宽

用途 显示信息后,马上结束对话框。

用例

2 dialog --infobox"尚未完成准备工作喔" 10 40

调整时间对话框(timebox)

语法:dialog --timebox信息内容 高 宽 时 分 秒

"时 分 秒"可以省略。若不指定"时 分 秒",则显示现在的时间。

用途 显示时间,供用户以箭头键和【Tab】键做调整。

用例

3 dialog --timebox "调整时间" 4 30
 

倒数计时对话框(pause

语法:dialog --pause信息内容 高 宽 秒数

用途 显示多少秒之后,结束对话框。

用例

4 dialog --pause "倒数计时" 10 40 10

这里设定倒数计时10秒后,结束对话框。

选择文本区对话框(fselect)

语法:dialog --fselect路径文件名 高 宽

用途 显示某一路径下的文本区。

用例

5 dialog --fselect /var/www/index.php 10 40

按【Tab】键可在目录和文件之间切换,按空格键可选择文本区。

其他dialog的对话框,请参考man dialog的说明。

16.2 使用xdialog撰写图形接口程序(1

xdialog可向下和大部分的dialog语法兼容,因此,前一节中各种dialog的语法,在xdialog中仍可适用,只要把前一节各范例中的dialog文件名换成Xdialog即可。

以下仅举msgbox、radiolist和inputbox为例,其他对话框,则请比照dialog的用法模仿制,在此就不再重复赘述了。

xdialog除了支持大部分dialog的对话框之外,还支持许多比dialog功能更多样化的对话框。在说明msgbox、radiolist和inputbox之后,再介绍这些图形接口对话框。

显示信息(msgbox

语法:Xdialog --msgbox信息内容 高度 宽度

用途 显示信息

用例1

1 Xdialog --msgbox "这是一个测试" 10 40

执行结果:

clip_image013

图16-13 显示信息

用例2

2 Xdialog --backtitle "设置阶段" --title "注意"
--msgbox "这是一个测试" 10 40

执行结果:

clip_image014

图16-14 加上设定标题的显示信息

多选一对话框(radiolist

语法:Xdialog --radiolist信息内容 高 宽 选项数目 选项列表

选项的格式是:"选项名称 选项说明 默认是否启用",其中on代表启用,off代表不启用。选项列表则是由各选项所组成的字符串。

用途 多选一。

用例

范例 16-2-1:radiolist2.sh

3 01. #! /bin/bash

4 02.

5 03. DIA='/usr/bin/Xdialog'

6 04.

7 05. TMP="/tmp/radiolist.$$"

8 06. M1="请选择您偏好的文件系统"

9 07. NUMFS=3

10 08. FSLIST="ext2第2版的扩展文件系统off ext3
第3版的扩展文件系统on ext4

11 第4版的扩展文件系统off"

12 09.

13 10. $DIA --radiolist "$M1" 12 40 $NUMFS $FSLIST 2> $TMP

14 11.

15 12. FSTYPE=$(cat $TMP)

16 13. [ -z "$FSTYPE" ] && FSTYPE="ext3"

17 14.

18 15. rm -f "$TMP"

19 16.

20 17. echo "您选择的是: $FSTYPE"

执行结果:

clip_image015

图16-15 radiolist2.sh的执行结果

单行输入对话框(inputbox

语法:dialog --inputbox信息内容 高 宽 初始值

初始值可以省略。若有设定初始值,则输入栏中会出现该初始值。

用途 要求用户输入一列字符串。使用者可在输入栏中,进行输入或各种编辑的动作。

用例

范例 16-2-2:inputbox2.sh

21 01. #! /bin/bash

22 02.

23 03. DIA='/usr/bin/Xdialog'

24 04.

25 05. TMP="/tmp/inputbox.$$"

26 06.

27 07. DEFHNAME="sample.edu.tw"

28 08. M1="请设置主机名:"

29 09.

30 10. $DIA --inputbox "$M1" 10 40 $DEFHNAME 2> $TMP

31 11.

32 12. HNAME=$(cat $TMP)

33 13. [ -z "$HNAME" ] && HNAME=$DEFHNAME

34 14.

35 15. rm -f "$TMP"

36 16.

37 17. echo "您设置的主机名是: $HNAME"

16.2 使用xdialog撰写图形接口程序(2

执行结果:

clip_image016

图16-16 inputbox2.sh的执行结果

Xdialog的inputbox,可再加上选项--password,此时,输入栏中会以*代替键入的字符,且有个核查按钮可切换要不要显示键入的字符。

范例 16-2-3:inputbox3.sh

1 01. #! /bin/bash

2 02.

3 03. DIA='/usr/bin/Xdialog'

4 04.

5 05. TMP="/tmp/inputbox.$$"

6 06.

7 07. DEFPWD="password999"

8 08. M1="请设置密码:"

9 09.

10 10. $DIA --password --inputbox "$M1" 10 40 $DEFPWD 2> $TMP

11 11.

12 12. PWD=$(cat $TMP)

13 13. [ -z "$PWD" ] && PWD=$DEFPWD

14 14.

15 15. rm -f "$TMP"

16 16.

17 17. echo "您设置的密码是: $PWD"

说明

行7,设定默认密码变量DEFPWD。行10,加上--password选项,使输入的字符改以*显示。

执行结果:

clip_image017

图16-17 勾选"Hide typing",可
切换输入栏中的字符是否要显示出来

双行输入对话框(2inputsbox)

语法:Xdialog--2inputsbox信息内容 高 宽 字段1的名称 字段1初始值 字段2的名称 字段2初始值

用途 显示两个输入字段,取得两种用户输入的数据。

用例

范例 16-2-4:inputbox4.sh

18 01. #! /bin/bash

19 02.

20 03. DIA='/usr/bin/Xdialog'

21 04.

22 05. TMP="/tmp/inputbox.$$"

23 06.

24 07. DEFACT="root"

25 08. DEFPWD="password999"

26 09. M1="请设定账号密码:"

27 10.

28 11. $DIA --password --2inputsbox "$M1" 16
40 "账号" $DEFACT "密码" $DEFPWD 2>

29 $TMP

30 12.

31 13. R=( $(cat $TMP | awk -F/ '{print $1,$2

32 ') )

33 14.

34 15. [ -z "${R[0]

35 " ] && R[0]=$DEFACT

36 16. [ -z "${R[1]

37 " ] && R[1]=$DEFPWD

38 17.

39 18. rm -f "$TMP"

40 19.

41 20. echo "你设定的账号是: ${R[0]"

42 21. echo "你设定的密码是: ${R[1]"

说明

行7,设定默认账号变量DEFACT。

行8,设定默认密码变量DEFPWD。

行11,使用双列输入对话框,并使用--password选项,让第二个字段改以*显示输入字符。两个字段的输入值,转向存入临时文件TMP中,格式是:账号/密码。

行13,建立数组R。数组的组成方式是:R=(账号 密码),其中"账号 密码" 这个格式由$(cat $TMP | awk -F/ '{print $1,$2')产生,该式把$TMP的内容通过管线传给awk,awk以/为分隔字符,印出两个字段,其结果就是"账号 密码",接着,在最外围放上一对(),便形成一个数组,第一个数组元素是账号,第二个数组元素是密码。

行15,若第一个数组元素为空,则令其值为默认的账号。

行16,若第二个数组元素为空,则令其值为默认的密码。

行20~21,分别显示用户输入的账号和密码。

执行结果:

clip_image018

图16-18 双列输入对话框

【责任编辑:云霞 TEL:(010)68476606】

16.2 使用xdialog撰写图形接口程序(3

三行输入对话框(3inputsbox

语法:Xdialog --3inputsbox信息内容 高 宽 字段1的名称 字段1初始值 字段2的名称 字段2初始值 字段3的名称 字段3初始值

若不想各字段出现初始值,只要在上述语法中,在字段初始值的位置放置空字符串 '' 即可,例如:

Xdialog --3inputsbox信息内容 高 宽 字段1的名称 '' 字段2的名称 '' 字段3的名称 ''

用途 显示3个输入字段,取得3种用户输入的数据。

用途

1 Xdialog --3inputsbox "请输入三个数字" 16 40
"数字1" 10 "数字2" 20 "数字3" 30

执行结果:

clip_image019

图16-19 三列输入对话框

3个输入值的输出格式范例:10/20/30。

下拉列表对话框(combobox)

语法:Xdialog --combobox信息内容 高 宽 选项1选项2 ...

用途 建立下拉列表,供使用者选择。

用例

2 Xdialog --combobox "请选择出发的站台" 10 40
'北京' '上海' '广州' '成都' '西安'

执行结果:

clip_image020

图16-20 下拉列表对话框

用户选择的结果,即这5个选项之一,可运用前面几个范例中使用转向存入临时盘的方法来取得。

若加上选项--editable,则用户还可以自行编辑下拉列表中各个选项的内容,范例如下:

3 Xdialog --editable --combobox "请选择出发的站台
" 10 40 '北京' '上海' '广州' '成都' '西安'

重设大小范围的对话框(rangebox

语法:Xdialog --rangebox信息内容 高 宽 最小值 最大值 默认值

用途 建立一个可供重设大小范围的对话框。

用例

4 Xdialog --rangebox "请选择音量大小" 10 40 0 10 5

执行结果:

clip_image021

图16-21 重设大小范围的对话框

另外,Xdialog还支持2个和3个重设大小范围滚动条的对话框。

【责任编辑:云霞 TEL:(010)68476606】

16.2 使用xdialog撰写图形接口程序(4

两个滚动条的对话框

语法:Xdialog --2rangesbox信息内容 高 宽 名称1最小值 最大值 默认值1名称2最小值 最大值 默认值2

用例

1 Xdialog --2rangesbox "请调整长宽" 16 40 '长' 10 20 15 '宽' 4 12 8

执行结果:

clip_image022

图16-22 两个滚动条的对话框

这里调整其长为13、宽为9,其输出格式是:13/9。

3个滚动条的对话框

语法:Xdialog --3rangesbox信息内容 高 宽 名称1最小值 最大值 默认值1名称2最小值 最大值 默认值2名称3最小值 最大值 默认值3

用例

2 Xdialog --3rangesbox "请调整长宽高" 20 40 '长'
10 20 15 '宽' 4 12 8 '高' 2 10 6

其输出格式是:15/8/6。

spinbox对话框

除了rangebox,Xdialog还支持一种叫spinbox的对话框,一样也可对某些指定量重设大小范围。

语法:

Xdialog --spinbox信息内容 高 宽 最小值 最大值 默认值 名称

Xdialog --2spinsbox信息内容 高 宽 最小值 最大值 默认值1名称1最小值 最大值 默认值2名称2

Xdialog --3spinsbox信息内容 高 宽 最小值 最大值 默认值1名称1最小值 最大值 默认值2名称2最小值 最大值 默认值3名称3

这里仅举一例,其他用法请自行类推:

3 Xdialog --spinbox "请调整高度" 10 40 10 50 20 '厘米'

执行结果:

clip_image023

图16-23 spinbox对话框

编辑对话框(editbox)

语法:Xdialog --editbox文本区 高 宽

用途 建立一个可编辑文本区内容的对话框。

用例

4 Xdialog --editbox '/etc/hosts' 18 55

执行结果:

clip_image024

图16-24 编辑对话框(editbox)

一样可利用前面提到的几个范例中的技巧,来取得编辑后的输出内容。

Xdialog还支持几个对话框,如tailbox、menubox、logbox、buildlist、treeview、dselect、 colorsel、fontsel、calendar等,限于篇幅的关系,就请读者自行参考Xdialog的联机帮助文件啰!网址如下:

5 http://xdialog.free.fr/doc/box.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值