手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

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

[日期:2015-06-03] 来源:Linux中国  作者:Linux [字体: ]

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

 

Zenity 工具

Ubuntu中安装zenity,运行:

  1. sudo apt-get install zenity

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

 

创建消息框

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

消息框截图

创建 Yes/No 询问对话框

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

问题截图

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

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

输入框截图

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

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

  1. #!/bin/bash
  2. #
  3. # This script will ask for couple of parameters
  4. # and then continue to work depending on entered values
  5. #
  6. # Giving the option to user
  7. zenity --question --text "Do you want to continue?"
  8. # Checking if user wants to proceed
  9. [ $?-eq 0]||exit1
  10. # Letting user input some values
  11. FIRSTNAME=$(zenity --entry --title "Entry box"--text "Please, enter your first name."--width=300--height=150)
  12. LASTNAME=$(zenity --entry --title "Entry box"--text "Please, enter your last name."--width=300--height=150)
  13. AGE=$(zenity --entry --title "Entry box"--text "Please, enter your age."--width=300--height=150)
  14. # Displaying entered values in information box
  15. 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-输入框-2

输入框

例1-输入框-3

输入框

例1-信息

信息框

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

 

Whiptail 工具

在Ubuntu上安装whiptail,运行

  1. sudo apt-get install whiptail

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

 

创建消息框

  1. whiptail --msgbox "This is a message"1040

whiptail消息框截图

 

创建 Yes/No 对话框

  1. whiptail --yes-button "Yeah"--no-button "Nope"--title "Choose the answer"--yesno "Will you choose yes?"1030

whiptail对话框截图

 

创建有缺省值的输入框

  1. whiptail --inputbox "Enter your number please."1030"10"

whiptail输入框截图

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

 

创建菜单对话框

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

whiptail菜单截图

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

  1. #!/bin/bash
  2. #
  3. #
  4. # Since whiptail has to use stdout to display dialog, entered value will
  5. # be stored in stderr. To switch them and get the value to stdout you must
  6. # use 3>&1 1>&2 2>&3
  7. FOLDER_PATH=$(whiptail --title "Get the size of folder" \
  8. --inputbox "Enter folder path:" \
  9. 1030 \
  10. "/home" \
  11. 3>&11>&22>&3)
  12. if[-d $FOLDER_PATH ]
  13. then
  14. size=$(du -hs "$FOLDER_PATH"| awk '{print $1}')
  15. whiptail --title "Information" \
  16. --msgbox "Size of ${FOLDER_PATH} is ${size}" \
  17. 1040
  18. elif[-f $FOLDER_PATH ]
  19. then
  20. whiptail --title "Warning!!!" \
  21. --msgbox "The path you entered is a path to a file not a folder!" \
  22. 1040
  23. else
  24. whiptail --title "Error!!!"
  25. --msgbox "Path you entered is not recognized. Please try again" \
  26. 1040
  27. fi

这是之前例子的一些截图:

例2-输入框

输入框

例2-消息框

消息框

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

 

结论

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


via: http://linoxide.com/linux-shell-script/bash-shell-script-show-dialog-box/

作者:Ilija Lazarevic 译者:ictlyh 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

本文永久更新链接地址http://www.linuxidc.com/Linux/2015-06/118301.htm

linux
相关资讯       Bash Shell  Bash Shell脚本 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款