继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

如何在Bash Shell脚本中显示对话框

慕神8447489
关注TA
已关注
手记 1282
粉丝 174
获赞 956

这个教程给出几个如何使用类似zenity和whiptail的工具在Bash Shell 脚本中提供消息/对话框的例子。使用这些工具你的脚本能够告知用户当前程序运行的状态并能与用户进行交互。这两个工具的不同之处在于显示消息框或者对话框的方式。Zenity用GTK工具包创建图形用户界面而whiptail则在终端窗口内创建消息框。


Zenity 工具

在Ubuntu中安装zenity运行:


sudo apt-get install zenity

用zenity创建消息框或者对话框的命令是不言自明的我们会给你提供一些例子来参考。


创建消息框

zenity --info --title "Information Box" --text "This should be information" --width=300 --height=200

æ¶æ¯æ¡æªå¾


消息框截图


创建 Yes/No 询问对话框


zenity --question --text "Do you want this?" --ok-label "Yeah" --cancel-label="Nope"

é®é¢æªå¾


问题截图


创建输入框并将输入值保存到变量中


a=$(zenity --entry --title "Entry box" --text "Please enter the value" --width=300 --height=200)

echo $a

è¾å¥æ¡æªå¾


输入框截图


输入后值会保存在变量 $a 中。


这是一个获取用户姓名并显示的实际事例。


#!/bin/bash

#

# This script will ask for couple of parameters

# and then continue to work depending on entered values

#

# Giving the option to user

zenity --question --text "Do you want to continue?"

# Checking if user wants to proceed

[ $? -eq 0 ] || exit 1

# Letting user input some values

FIRSTNAME=$(zenity --entry --title "Entry box" --text "Please, enter your first name." --width=300 --height=150)

LASTNAME=$(zenity --entry --title "Entry box" --text "Please, enter your last name." --width=300 --height=150)

AGE=$(zenity --entry --title "Entry box" --text "Please, enter your age." --width=300 --height=150)

# Displaying entered values in information box

zenity --info --title "Information" --text "You are ${FIRSTNAME} ${LASTNAME} and you are ${AGE}(s) old." --width=300 --height=100

这些是运行前面脚本的截图。


ä¾1-é®é¢-1


例1-问题-1


框1


ä¾1-è¾å¥æ¡-1


例1-输入框-1


输入框


ä¾1-è¾å¥æ¡-2


例1-输入框-2


输入框


ä¾1-è¾å¥æ¡-3


例1-输入框-3


输入框


ä¾1-ä¿¡æ¯


例1-信息


信息框


别忘了查看也许能帮助到你的有用的zenity 选项。


Whiptail 工具

在Ubuntu上安装whiptail运行


sudo apt-get install whiptail

用whiptail创建消息框或者对话框的命令也是无需解释的我们会给你提供一些基本例子作为参考。


创建消息框

whiptail --msgbox "This is a message" 10 40

whiptailæ¶æ¯æ¡æªå¾


whiptail消息框截图


创建 Yes/No 对话框

whiptail --yes-button "Yeah" --no-button "Nope" --title "Choose the answer" --yesno "Will you choose yes?" 10 30

whiptail对è¯æ¡æªå¾


whiptail对话框截图


创建有缺省值的输入框

whiptail --inputbox "Enter your number please." 10 30 "10"

whiptailè¾å¥æ¡æªå¾


whiptail输入框截图


尝试使用输入值要注意的一点是whiptail用stdout显示对话框用stderr输出值。这样的话如果你用 var=$(...)你就根本不会看到对话框也不能获得输入的值。解决方法是交换stdout和stderr。在whiptail命令后面添加 3>&1 1>&2 2>&3 就可以做到。你想获取输入值的任何whiptail命令也是如此。


创建菜单对话框

whiptail --menu "This is a menu. Choose an option:" 20 50 10 1 "first" 2 "second" 3 "third"

whiptailèåæªå¾


whiptail菜单截图


这是一个请求用户输入一个文件夹的路径并输出它的大小的 shell 脚本。


#!/bin/bash

#

#

# Since whiptail has to use stdout to display dialog, entered value will

# be stored in stderr. To switch them and get the value to stdout you must

# use 3>&1 1>&2 2>&3

FOLDER_PATH=$(whiptail --title "Get the size of folder" \

--inputbox "Enter folder path:" \

10 30 \

"/home" \

3>&1 1>&2 2>&3)

if [ -d $FOLDER_PATH ]

then

size=$(du -hs "$FOLDER_PATH" | awk '{print $1}')

whiptail --title "Information" \

--msgbox "Size of ${FOLDER_PATH} is ${size}" \

10 40

elif [ -f $FOLDER_PATH ]

then

whiptail --title "Warning!!!" \

--msgbox "The path you entered is a path to a file not a folder!" \

10 40

else

whiptail --title "Error!!!"

--msgbox "Path you entered is not recognized. Please try again" \

10 40

fi

这是之前例子的一些截图


ä¾2-è¾å¥æ¡


例2-输入框


输入框


ä¾2-æ¶æ¯æ¡

例2-消息框


消息框


如果你在终端下工作帮助手册总是有用的。


结论

选择合适的工具显示对话框取决于你期望在桌面机器还是服务器上运行你的脚本。桌面机器用户通常使用GUI窗口环境也可能运行脚本并与显示的窗口进行交互。然而如果你期望用户是在服务器上工作的在没有图形界面时你也许希望能确保总能显示那就使用whiptail或者任何其它在纯终端窗口显示对话框的工具。

编译自http://linoxide.com/linux-shell-script/bash-shell-script-show-dialog-box/作者 Ilija Lazarevic
原创LCTT https://linux.cn/article-5558-1.html译者 나원호

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP