shell script 撰写文字和图形接口程序

 

 

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

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

apt-get update

apt-get install dialog xdialog zenity

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

calendar,checklist,form,fselect,gauge,infobox,inputbox,inputmenu,menu,msgbox(message),password,pause,radiolist,tailbox,tailboxbg,textbox,timebox,and yesno(yes/no).

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

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

常用的对话框有:

1. 显示信息(msgbox)

语法:diabox –msgbox 信息内容 高度 宽度

用途:显示信息


例如:dialog –msgbox ‘This is a test !’ 10 40

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

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

--backtitle

出在背景顶部的标题

--title

出现在对话框顶部的标题

--no-shadow

外框不要有阴影的效果

例如:dialog --backtitle “设置标题” --title “注意” --no-shadow --msgbox “这是一个测试” 10 40

2. 是否对话框(yesno)

语法:diabox –yesno 信息内容 高度 宽度

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

用例:diabox –yesno “要继续吗?” 10 40


执行结果:

依据$?的值,可判断使用者选择了“是”或“否”;

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

若$?的值为1,表示使用者选“否”。

若$?的值为255,表示使用者选择“Esc”,放弃了回答。

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

3. 多选一对话框(radiolist)

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

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

用途:多选一。

#! /bin/bash

DIA="/usr/bin/dialog"

TMP="/tmp/radiologlist.$$"

M1="请选择你偏爱的文件系统!"

NUM=3

FSLIST="ext2 第2代linux文件系统 off ext3 第3代linux文件系统 on ext4 第4代linux操作系统 off"

$DIA --radiolist "$M1" 40 40 $NUM $FSLIST 2> $TMP

FSTYPE=$(cat $TMP)

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

rm -rf $TMP

echo "您选择的是:$FSTYPE"

注意:在选择的时候,需要安装上下键来选择,空格键确认选择。TAB键来选择“选项”“确定”“返回”。

4. 选单对话框

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

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

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

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

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

#! /bin/bash

DIA="/usr/bin/dialog"

TMP="/tmp/radiologlist.$$"

M1="请选择你偏爱的文件系统!"

FSLIST="1.ext2 第2代linux文件系统 2.ext3 第3代linux文件系统 3.ext4 第4代linux操作系统 "

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

FSTYPE=$(cat $TMP)

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

rm -rf $TMP

echo "您选择的是:$FSTYPE"

5. 但行输入对话框

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

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

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

#!/bin/bash

DIA='/usr/bin/dialog'

TMP='/tmp/$0.$$'

DEFNAME="www.test.com"

M1="请输入主机名:"

$DIA --inputbox "$M1" 10 40 $DEFNAME 2> $TMP

HNAME=$(cat $TMP)

[ -z "$HNAME" ] && HNAME=$DEFNAME

rm -rf "$TMP"

echo "您主机名是:$HNAME"

6. 输入密码对话框(passwordbox)

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

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

用途:要求用户输入密码。

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

#!/bin/bash

DIA='/usr/bin/dialog'

TMP="/tmp/$0.$$"

DEFPWD='b2b is best'

M1="请设置一组密码:"

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

PWD=$(cat $TMP)

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

rm -rf "$TMP"

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

7. 显示进度对话框(gauge)

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

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

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

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

#!/bin/bash

{

for ((i=1;i<=10;i++))

do

let I=10*i

echo $I

sleep 1

done

} | dialog --gauge "安装进度" 5 60 0

8. 核查列表对话框(checklist)

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

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

用途:建立一个选单使用者做多重选择

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

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

#!/bin/bash

DIA='/usr/bin/dialog'

TMP="/tmp/$0.??"

M1="你偏好的linux文件系统:"

CHKLIST="1.ext2 第二代linux文件系统 off 2.ext3 第三代linux文件系统 on 3.ext4 第四代linux文件系统 off"

$DIA --separate-output --checklist "$M1" 10 40 5 $CHKLIST 2> $TMP

FSTYPE=$(cat $TMP)

[ -z "FSTYPE" ] && FSTYPE="ext3"

rm -rf $TMP

echo "你选择的文件系统是:$FSTYPE"

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

$DIA --separate-output --checklist "$M1" 10 40 5 $CHKLIST 2> $TMP

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

$DIA --single-output –chekclist “$M1 10 40 5 $CHECKLIST 2>$TMP

9. 文本对话框(textbox)

语法:dialog –textbox 文本区 高 宽

用途:显示文本区内容。

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

用例:dialog –textbox b2d.txt 10 40

10. 信息对话框(infobox)

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

用途:显示信息内容,马上结束对话框。

用例:dialog –infobox “双未完成准备工作” 10 40

11. 调整时间对话框(timebox)

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

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

用途:显示时间,供用户以箭头键和[Tab]键做调整。

用例:dialog –timebox “调整时间”

12. 倒数计时对话框(pause)

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

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

用例:diglog –pause “倒数计时” 10 44 10

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

13. 选择文本区对话框(fselect)

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

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

用例:dialog --fselect /var/www/index.php 10 40

按[Tab]键可在目录和文件之间切换,按空格键可能在选择路径文本区。

 

 

你可能感兴趣的:(shell,dialog,shell图形接口)