Linux 文字和图形接口程序cialog.docx

上传人:b****2 文档编号:23218288 上传时间:2023-05-15 格式:DOCX 页数:35 大小:251.01KB
下载 相关 举报
Linux 文字和图形接口程序cialog.docx_第1页
第1页 / 共35页
Linux 文字和图形接口程序cialog.docx_第2页
第2页 / 共35页
Linux 文字和图形接口程序cialog.docx_第3页
第3页 / 共35页
Linux 文字和图形接口程序cialog.docx_第4页
第4页 / 共35页
Linux 文字和图形接口程序cialog.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

Linux 文字和图形接口程序cialog.docx

《Linux 文字和图形接口程序cialog.docx》由会员分享,可在线阅读,更多相关《Linux 文字和图形接口程序cialog.docx(35页珍藏版)》请在冰豆网上搜索。

Linux 文字和图形接口程序cialog.docx

Linux文字和图形接口程序cialog

第16章使用ShellScript撰写文字和图形接口程序

dialog是一种在shellscript中建立对话框(dialogbox)的工具,利用dialog可建立不同的信息和问题窗口,增加script的方便性,提高程序的亲和力。

有许多Linux套件的安装程序,就是使用dialog来编写用户界面的,如B2DLinux、SlackwareLinux等。

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

dialog建立的是终端模式下的文本接口,另外有一种和dialog语法兼容的工具叫xdialog,xdialog则是拿来建立Xwindow下的图形接口。

xdialog使用GTK+图形工具来完成各式各样的对话框,可融入不同的桌面主题(desktoptheme)。

xdialog的网址为http:

//xdialog.free.fr/。

除了xdialog之外,还有一个功能也十分强大的图形接口工具,叫zenity。

zenity是改写自老版本的gdialog,zenity套件中有一支使用perl写的gdialog程序,可转换兼容于gdialog的语法。

zneity也是使用GTK+来操作,网址为

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

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

1.apt-get update 

2.apt-get install dialog xdialog zenity 

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

(1)

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

1.calendar, checklist, form, fselect, gauge, infobox, 

inputbox, inputmenu, menu, msgbox 

2.(message), password, pause, radiolist, tailbox, 

tailboxbg, textbox, timebox, and yesno 

3.(yes/no). 

这些对话框的语法,至少要有3个参数:

标题或信息内容、窗口的高度、宽度。

除了这3项,不同的对话框可能还需要额外的参数,语法才算完整。

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

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

显示信息(msgbox)

语法:

dialog--msgbox信息内容高度宽度

用途 显示信息。

用例1

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

执行结果:

 

图16-1 msgbox的执行结果

窗口的按钮只有一个,若使用者按下【Enter】键,则窗口随即结束,离去状态为0;若用户按【Esc】键,窗口也会结束,但离去状态为255。

我们可以用$?

这个变量来检查用户对窗口的反应:

范例 16-1-1:

msgbox1.sh

1.01.     #!

 /bin/bash 

2.02. 

3.03.     DIA='/usr/bin/dialog' 

4.04. 

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

6.06.     x=$?

 

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

8.08.        echo '你按了ENTER键' 

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

10.10.        echo '你按了ESC键' 

11.11.     else 

12.12.        echo '未知的错误:

 你可能按了Ctrl-C键' 

13.13.     fi 

说明

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

行5,显示窗口。

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

"的内容。

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

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

--backtitle

出在背景顶部的标题

--title

出现在对话框顶部的标题

--no-shadow

外框不要有阴影的效果

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

(2)

用例2

1.dialog --backtitle "设置阶段" --title "注意" 

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

执行结果:

 

图16-2 --backtitle选项指定的标题,

出现在背后左上角的位置

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

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

如下所示。

用例3

1.dialog --backtitle "设置阶段" --title "注意" 

--no-shadow --msgbox "这是一个测试" 10 40 

执行结果:

 

图16-3 加上--no-shadow的选项,

对话框的外框就不会有阴影的效果

以上这些范例算是对话框的基本型,其他对话框,可视为窗口的变化。

用这种观点,对dialog的各种用法,很快地就可以上手。

是或否对话框(yesno)

语法:

dialog--yesno信息内容高度宽度

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

用例

1.dialog --yesno "要继续吗?

" 10 40 

执行结果:

 

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

依据$?

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

若$?

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

若$?

的值为1,表示选"否"。

若$?

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

范例 16-1-2:

yesnobox1.sh

1.01.     #!

 /bin/bash 

2.02. 

3.03.     DIA='/usr/bin/dialog' 

4.04. 

5.05.     CHOICE='' 

6.06. 

7.07.     dialog --yesno "要继续吗?

" 10 40 

8.08.     x=$?

 

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

10.10.        CHOICE='NO' 

11.11.     fi 

12.12. 

13.13.     if [ -n "$CHOICE" ]; then 

14.14.        echo '你选择不继续...' 

15.15.     else 

16.16.        echo '你选择继续...' 

17.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,显示用户所做的选择。

执行结果:

 

图16-5 多选一对话框

选单对话框(menu)

语法:

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

选项的格式是:

"选项名称选项说明"。

选项列表则是由一个或一个以上的选项所组成的字符串。

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

--menu和--radiolist的用法差不多,差别在于--menu不指定哪一个选项默认是否启用,且多了一个选项高度。

操作选单对话框,可使用上下箭头键移动光标,各选项的第一个字为热键,可单按选项的第一字符来做选择,或按下1~9的数字键来选择对应的选项。

用户做了选择后,该选项的"选项名称"就是答案,默认会由标准错误输出。

若是加上--help-button选项,则会多出一个求助的按钮,script设计者可借此安排一个说明画面。

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

用例

范例 16-1-4:

menu1.sh

1.01.     #!

 /bin/bash 

2.02. 

3.03.     DIA='/usr/bin/dialog' 

4.04. 

5.05.     TMP="/tmp/menu.$$" 

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

7.07.     FSLIST="1.ext2第2版的扩展文件系统2.ext3

第3版的扩展文件系统3.ext4 

8.        第4版的扩展文件系统" 

9.08. 

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

11.10. 

12.11.     FSTYPE=$(cat $TMP) 

13.12.     [ -z "$FSTYPE" ] && FSTYPE="ext3" 

14.13. 

15.14.     rm -f "$TMP" 

16.15. 

17.16.     echo "您选择的是:

 $FSTYPE" 

行9,对话框的高宽分别是10行和40个字符宽,选单高度是4行,选项列表的内容在FSLIST中。

使用2>把使用者的选择由标准错误转向存入TMP临时文件中。

执行结果:

 

图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,显示用户输入的结果。

执行结果:

 

图16-7 执行结果

输入密码对话框(passwordbox)

语法:

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

初始值可以省略。

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

用途要求用户输入密码。

当用户输入时,默认不会显示出来。

但若有提供初始值,则一开始会出现该初始值。

若在执行dialog时加上--insecure的选项,那么,当用户键入密码时,会以*替代用户输入的字符,出现在输入栏中。

用例1

范例 16-1-6:

passwordbox1.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 --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" 

列7,设定默认的密码变量DEFPWD。

列10,执行passwordbox,将设定密码的结果存入TMP临时文件中。

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

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

列17,显示设置的密码。

执行结果:

 

图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" 

执行结果:

 

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

显示进度对话框(gauge)

语法:

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

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

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

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

用例1

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

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

执行结果:

 

图16-10 显示进度对话框

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

用例2

范例 16-1-8:

progress1.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.| 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…,一直到百分之百,才结束此对话框。

执行结果:

 

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

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

1.01.     #!

 /bin/bash 

2.02. 

3.03.     DIA='/usr/bin/dialog' 

4.04. 

5.05.     TMP="/tmp/checklist.$$" 

6.06.     M1="请选

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1