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

这个教程给出几个如何使用类似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 ] || exit 1
  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" 10 40

whiptail消息框截图

创建 Yes/No 对话框


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

whiptail对话框截图

创建有缺省值的输入框


  1. whiptail --inputbox "Enter your number please." 10 30 "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:" 20 50 10 1 "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. 10 30 \
  10. "/home" \
  11. 3>&1 1>&2 2>&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. 10 40
  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. 10 40
  23. else
  24. whiptail --title "Error!!!"
  25. --msgbox "Path you entered is not recognized. Please try again" \
  26. 10 40
  27. fi

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

例2-输入框

输入框

例2-消息框

消息框

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

结论

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

原文发布时间为:2015-06-02

本文来自合作伙伴“Linux中国”

时间: 2024-12-25 00:31:47

如何在Bash Shell脚本中显示对话框的相关文章

详解Linux交互式shell脚本中创建对话框实例教程

当你在终端环境下安装新的软件时,你可以经常看到信息对话框弹出,需要你的输入.对话框的类型有密码箱,检查表,菜单,等等.他们可以引导你以一种直观的方式输入必要的信息,使用这样的用户友好的对话框的好处是显而易见的.如下图所示:     当你写一个交互式shell脚本,你可以使用这样的对话框来接受用户的输入.whiptail可以在shell脚本中创建基于终端的对话框,消息框的过程,类似于Zenity或xdialog GUI脚本代码.预先安装在所有的Linux发布版本中. 下面来看看whiptail的用

如何在shell脚本中使用变量

如何在shell脚本中使用变量 在每种编程语言中,变量都扮演了一个重要的角色.在Linux shell脚本编程中,我们使用两种类型的变量:系统定义的变量和用户定义的变量. shell脚本中的变量是用来调用一个数值或者字符值的手段.与正规的编程语言不同的是,shell脚本不要求你去为变量声明一个类型. 在本文中,我们将讨论shell脚本编程中的变量及其类型,以及如何设置和使用这些变量. 系统定义的变量: 这些变量由操作系统(Linux)自身创建并维护,通常它们以大写字母定义,我们可以通过命令"$

如何在Shell脚本中跟踪调试命令的执行

在 shell 脚本调试系列 中,本文将解释第三种 shell 脚本调试模式,即 shell 跟踪,并查看一些示例来演示它如何工作以及如何使用它. 本系列的前面部分清晰地阐明了另外两种 shell 脚本调试模式:详细模式和语法检查模式,并用易于理解的例子展示了如何在这些模式下启用 shell 脚本调试. 如何在 Linux 中启用 Shell 脚本的调试模式 如何在 Shell 脚本中执行语法检查调试模式 shell 跟踪简单的来说就是跟踪 shell 脚本中的命令的执行.要打开 shell 跟

如何在 Shell 脚本中跟踪调试命令的执行

在 shell 脚本调试系列 中,本文将解释第三种 shell 脚本调试模式,即 shell 跟踪,并查看一些示例来演示它如何工作以及如何使用它. 本系列的前面部分清晰地阐明了另外两种 shell 脚本调试模式:详细模式和语法检查模式,并用易于理解的例子展示了如何在这些模式下启用 shell 脚本调试. 如何在 Linux 中启用 Shell 脚本的调试模式 如何在 Shell 脚本中执行语法检查调试模式 shell 跟踪简单的来说就是跟踪 shell 脚本中的命令的执行.要打开 shell 跟

如何在Shell脚本中执行语法检查调试模式

我们开启了 Shell 脚本调试系列文章,先是解释了不同的调试选项,下面介绍如何启用 Shell 调试模式. 写完脚本后,建议在运行脚本之前先检查脚本中的语法,而不是查看它们的输出以确认它们是否正常工作. 在本系列的这一部分,我们将了解如何使用语法检查调试模式.记住我们之前在本系列的第一部分中解释了不同的调试选项,在这里,我们将使用它们来执行脚本调试. 启用 verbose 调试模式 在进入本指导的重点之前,让我们简要地探索下 verbose 模式.它可以用 -v 调试选项来启用,它会告诉 sh

如何在 Shell 脚本中执行语法检查调试模式

我们开启了 Shell 脚本调试系列文章,先是解释了不同的调试选项,下面介绍如何启用 Shell 调试模式. 写完脚本后,建议在运行脚本之前先检查脚本中的语法,而不是查看它们的输出以确认它们是否正常工作. 在本系列的这一部分,我们将了解如何使用语法检查调试模式.记住我们之前在本系列的第一部分中解释了不同的调试选项,在这里,我们将使用它们来执行脚本调试. 启用 verbose 调试模式 在进入本指导的重点之前,让我们简要地探索下 verbose 模式.它可以用 -v 调试选项来启用,它会告诉 sh

shell脚本中echo显示内容带颜色的实现方法_linux shell

shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e 格式如下: 复制代码 代码如下: echo -e "\033[字背景颜色:文字颜色m字符串\033[0m" 例如: 复制代码 代码如下: echo -e "\033[41;36m something here \033[0m" 其中41的位置代表底色, 36的位置是代表字的颜色 注: 1.字背景颜色和文字颜色之间是英文的"" 2.文字颜色后面有个m 3.字符串前后可

Shell脚本中获取进程ID的方法

 这篇文章主要介绍了Shell脚本中获取进程ID的方法,我想要知道运行中脚本子shell的进程id,我该如何在shell脚本中得到PID,阅读本文即可找到你想要答案,需要的朋友可以参考下     提问: 我想要知道运行中脚本子shell的进程id.我该如何在shell脚本中得到PID. 当我在执行shell脚本时,它会启动一个叫子shell的进程.作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为"批处理进程"). 在某些情况下,你也许想要知道运行中

Shell脚本中获取进程ID的方法_linux shell

提问: 我想要知道运行中脚本子shell的进程id.我该如何在shell脚本中得到PID. 当我在执行shell脚本时,它会启动一个叫子shell的进程.作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为"批处理进程"). 在某些情况下,你也许想要知道运行中的子shell的PID.这个PID信息可以在不同的情况下使用.比如,你可以使用shell脚本的PID在/tmp下创建一个唯一的临时文件.有时侯脚本需要检测所有运行的进程,它可以从进程列表中排除自身