dialog --menu TestDialog 0 0 5 1 Menuitem1 2 Menuitem2
可以产生如下对话框:
图1
通过这些简单基于文本对话框我们获得了和基本交互能力当图形界面被引入的后我们有了各种更好选择比如Xdialog, gdialog和Kdialog分别是基于X.org, Gtk+和KDE图形对话框使用思路方法也和dialog命令大同小异比如以下Kdialog例子:
kdialog --title "ACAP entry" --password "Please enter the server access code:"
会产生个询问密码对话框:
图2
这里要为大家介绍是Zenity是基于Gtk个对话框工具可以很方便应用于shell脚本的中并提供更方便交互方式比如你希望在脚本中输入个日期作为参数可以你有很多脚本这次应该用什么格式输入呢?MMDDYY?还是dd-mm-yyyy?而使用Zenity可以让你更轻松选择:
图3
#zenity –calendar –date-format=%d-%m-%Y
选中日期将以“%d-%m-%Y”格式返回和date命令对日期格式定义是样:“04-08-2008”
下面我们用个举例脚本来演示下zenity使用方法:
#!/bin/bash
FINDLOG="Find MyApp log files"
ADDUSER="Add a user"
CONHOST="Connect to a remote host"
function findlog
{
DATESEL=`zenity --calendar --title="Select a day" --text="To view the log files of 'My App'
updated in a single day, please select a date" --date
-format=%m-%d-%Y`
zenity --text-info --title="myapp-$DATESEL.log" --filename="myapp-$DATESEL.log"
}
function adduser1
{
USERNAME=`zenity --entry --text="Please input user name:" --title "Input User Name"`
PASSWORD1=`zenity --entry --text="Please input passoword:" --title "Input Password" --
hide-text`
PASSWORD2=`zenity --entry --text="Please input passoword again:" --title "Input
Password" --hide-text`
while [ "$PASSWORD1" != "$PASSWORD2" ]
do
zenity --error --text="Passwords do not match"
PASSWORD1=`zenity --entry --text="Please input passoword:" --title "Input
Password" --hide-text`
PASSWORD2=`zenity --entry --text="Please input passoword again:" --title "Input
Password" --hide-text`
Done
ENCRYPTEDPASSWORD=`echo $PASSWORD | makepasswd –clear-form=- --crypt | awk
‘{pr $2}’`
useradd $USERNAME –p $ENCRYPTEDPASSWORD
}
function conhost
{
HOSTSEL=`zenity --list --editable --separator="@" --pr-column=ALL --title "Host
Selection" --column Host --column User Toast root`
ssh ${HOSTSEL#*@}@${HOSTSEL%@*}
}
############################
#
# 主
#
###########################
# zenity --info --title="Zenity Demo" --text="Press Enter to start the demo program of Zenity"
export SELECTION=`zenity --list --radiolist --title="Command Center" --text="Select the
operation you want to perform" --column "" --column "Command" Tru
e "$FINDLOG" False "$ADDUSER" False "$CONHOST"`
[ -z "$SELECTION" ]
then
exit 0
fi
[ "$SELECTION" = "$FINDLOG" ]
then
findlog
el [ "$SELECTION" = "$ADDUSER" ]
then
adduser1
el [ "$SELECTION" = "$CONHOST" ]
then
conhost
fi
这段代码做了几件简单事情首先主部分(见注释)是个由zenity生成列表用来让用户选择最常用几个功能:
图4
这个是个用到了Zenity提供List功能注意缺省情况下这个对话框返回值是被选中行第列值但是第列被设置成了Radiobox所以返回是第 2列值如果希望多选话可以使用—check-list选项
选择了希望执行操作的后就会转到对应shell这个脚本提供了 3个功能搜索某个应用在某天日志文件添加个新用户和用SSH连接到另个主机我们先来看下第个功能这个功能需要输入是个日期然后查找名字为“MyApp-日期.log”日志文件
图5
需要只是选择个日期
第 2个功能是添加个用户需要输入需要添加系统用户名字:
图6
输入用户名的后需要输入两次用户密码使用了—hide-text选项用户输入都被显示成“*”
图7
如果两次输入不致会被要求重新输入
图8
如果输入正确那么个系统用户将被成功添加
第 3个功能是连接个远端主机这次仍然是使用List但是没有使用Radio List所以可以通过点击行任何个位置来选择:
图9
这两个参数:--separator="@" --pr-column=ALL 作用是返回Toast@root这样格式串这个显然不符合SSH要求所以用bash串替换功能来处理下再作为SSH参数:ssh ${HOSTSEL#*@}@${HOSTSEL%@*}
上面就是对这个脚本简单解释只是个举例在实际工作中zenity还可以提供更多能力来帮助大家写出更易用和强大脚本来
最新评论