随着新工具的出现,在shell中也能够进行图形化的编程了,不过这些比起用java或者其他的高级语言实现的图形界面是非常简陋的。
我们先来显示一个普通的文本框,来看看。在命令行下输入如下的命令:
dialog –msgbox “this is content” 10 20
产生如下的界面
如果提示没有安装dialog,请安装dialog。下面的指令是在Ubuntu下安装dialog
sudo apt-get install dialog
注意:dialog会将内容输出到错误输出流中,因此可以通过错误输出流来获得内容,点击ok按钮返回0,点击cancel返回1.可以通过$?来判断点击的是哪一个按钮
对上面的指令进行详细说明,dialog的使用格式如下:
dialog 通用选项 box选项
通用选项:对所有的指令都适用。
box选项:专门构建各种box的选项。
常见的通用选项如下,这里并没有列出完整的通用选项,可以通过man dialog进行查看(外加一个英语词典):
–colors:调整字体颜色.man dialog查看该选项,原文如下:
Interpret embedded “\Z” sequences in the dialog text by the following character, which tells dialog to set colors or video attributes: 0 through 7 are the ANSI used in curses: black, red, green, yellow, blue, magenta, cyan and white respectively. Bold is set by ‘b’, reset by ‘B’. Reverse is set by ‘r’, reset by ‘R’. Underline is set by ‘u’, reset by ‘U’. The settings are cumulative, e.g., “\Zb\Z1” makes the following text bold (perhaps bright) red. Restore normal settings with “\Zn”.
大致翻译如下:通过写在文本里面的反斜杠字符’\Z’,来告诉dialog应该显示怎样的颜色属性:这里有0-7个数字,分别表示,黑色,红色,绿色,黄色,蓝色,品红色,青色和白色。粗体使用字符b,取消粗体使用B。反白使用r(类似于字体被选中的情况),取消反白使用R。下划线使用u,取消下划线使用U。举例如下:
键入如下的命令:
dialog –colors –msgbox “wanbiao\Z1wanbiao\Zbwanbiao\ZB\Zuwanbiao” 20 50
解释如下:\Z1后面的字体使用红色,因此后面三个wanbiao使用红色字体。\Zb后面使用粗体,因此倒数第二个wanbiao使用粗体,加红色,\ZB取消粗体,\Zu使用下划线,因此最后一个wanbiao使用了红色,非粗体,加下划线。
–ok-label string:使用指定的字符串,替换原生的ok。如下:
dialog –ok-label confirm –msgbox wanbiao 25 50
–cancel-label string:用指定的字符串,替换原生的cancel,类似于上面的选项。
–no-shadow :取消掉阴影,这在某些远程终端上比较常用,远程终端有时是使用字符来替代阴影,因此显得比较混乱,可以使用此选项关闭阴影。
–shadow:同上,显示阴影。
–clear:清除操作。
–timeout seconds:再给定秒的时间内,没有操作,将会产生超时,设置0秒的话,将会直接忽略。超时之后,返回一个255的错误码
还有一些通用选项,没有列出,可以通过man进行查看。
msgbox:显示一个信息框,用法如下:
dialog –msgbox text height width
上面所有的列子都是以—msgbox来举例的,这里不再举例。
–checklist:显示一个选项列表,用法如下:
dialog –checklist text height width list-height [ tag item status ] …
dialog –checklist name 25 50 45 0 zhangsan off 1 lisi on 2 wangmazi off
–form:表单,使用样式如下:
dialog –form text height width formheight [ label y x item y x flen ilen ]
label y x 表示在y行x列显示label
item y x 表示在y行x列显示item
flen 表示filed length,字段长度
ilen 表示input length,输入的字符长度。
示例如下:
dialog –form “input your name” 12 40 4 username: 1 1 “wanbiao” 1 10 0
–fselect :文件选择器。
dialog –fselect filepath height width
dialog –fselect ./out 20 50
效果如下:
–gauge:进度条
dialog text height width [percent]
dialog –gauge progress 20 50 30
效果如下:
下面写一个动态的进度条,使用for循环传递数值给dialog如下:
for I in {1..100}; do echo $i;done | dialog –gauge “progress” 20 30
图片不能显示动态的效果,因此,可以自己手动试一下。
–infobox text height width:跟—msgbox类似,这里不再举例,不过他是一个消息框,弹出之后,马上就返回了。
–inputbox text height width [init]:输入框,如下示例:
dialog –input name 20 50 wanbiao
效果如下:
剩下的box选项还包括:
–inputmenu
–menu
–pause
–passwordbox
–passwordform
–radiolist
–timebox
–calendar
等等一系列的box选项,这些选项,可以通过man手册,获取。此处不再赘述。
这里显示一个例子,类似于用户登录,
1.首先输入用户名和密码,点击确定按钮后
2.验证是否正确,正确密码为123456
代码如下:
#定义一个中间文件,用来存储产生的中间数据
tmpfile=/tmp/.logintmp
#名字输入框
dialog --inputbox name 10 20 2> $tmpfile
if [ $? -eq 0 ];then
name=$(cat $tmpfile)
#名字不能为空,否则,一直显示名字输入框
while [ "$name" == "" ];
do
dialog --inputbox "name can't empty" 10 20 2> $tmpfile
name=$(cat $tmpfile)
done
#密码输入框
dialog --inputbox password 10 20 2> $tmpfile
password=$(cat $tmpfile)
#密码验证
if [ "$password" == "123456" ];then
#成功之后的提示框
dialog --infobox "login Success" 10 20
else
#失败之后的提示框
dialog --infobox "login fail" 10 20
fi
else
echo "user cancel"
fi
注意,密码框应该是用真正的—passwordbox。