使用kdialog将简单的GUI添加到Linux shell脚本

Shell脚本是非常有用的东西。 它们允许您做一些基本操作,创建一个简单的命令来替换更困难的命令,带有很多标志,以批处理许多复杂的命令以从cron作业运行。 它们非常棒,因为您可以在最喜爱的终端中快速启动它们,但在某些情况下,它们需要您记住标志或选项的特定组合。 如果您发现自己处于这种情况,您可以添加一些简单的GUI对话框,以帮助您快速完成手头的任务。

为了使用本教程,您需要以下内容:

  • 访问一个类Unix的shell(这是用bash写的)。

  • macOS和* nix操作系统(如Linux)应该与这个或一个喜欢它。

  • 在Windows上,您可以安装CygWin环境,或者在最新版本的Windows 10上使用“Windows Subsystem for Linux”

  • 用于KDE桌面环境的基础库。 你不需要整个事情,特别是如果你已经安装了另一个DE。

如果您启动了除KDE之外的桌面环境,并且您的机器上没有其他KDE应用程序,则只需安装kdialog。 它是Ubuntu上的kde-baseapps-bin软件包的一部分,这意味着它默认安装在Kubuntu上。 在其他衍生产品上,您可以在终端上使用以下命令安装它:

从终端安装kdialog。

sudo apt-get install kde-baseapps-bin

这可能会导致相当大的安装,因为其他KDE库和软件包将一起安装。 但嘿,硬盘空间便宜,对吧?

由于脚本(一般)应该自动执行,所以我们只需要在以下情况下显示此对话框:

  • 如果我们需要从用户那里捕获某种输入,或者;

  • 如果我们想以一种显着的方式向用户展示某种反馈(即不仅仅是一些文本在命令行中吐出来)。

让我们举个例子来使用命令[使用drush备份你的Drupal站点]。 当然,既然你是一个崭新的互联网企业家,那么你不只是一个Drupal的网站? 你有三个 当您想要备份所有的网站时,您不需要运行单独的命令,但同时如果您想要仅拍摄一张快照,则不想记住一个漫长的路径。 我们可以用几个对话来帮助自己:

  • 向用户提供我们可以备份的网站列表,以及作为选择的网站;

  • 向用户显示确认结果的消息,无论是成功还是失败。

kDialog通过在命令行中调用它,以及对话框类型 ,类型可能需要的任何参数以及任何其他选项(如对话标题)来进行工作。

根据您的需要,可以选择各种各样的对话类型,具体如下:

kDialog类型
对话框类型 样品图像 描述

信息信息框

显示一个带有“确定”按钮的框以关闭,提供短信和“非关键”信息,警告或错误图标。

被动弹出

这将显示一条消息,它将在几秒钟内消失,即不需要用户关闭或关闭它。

是/否消息框

像“信息信息框”一样,它显示一个信息/警告/错误图标的对话框,该图标还将提供用户选择“是”或“否”。

输入对话框

这提供了一个单个框,用户可以在其中键入一些文本。

文件显示框

这将在对话框中显示(纯文本)文件的内容。

菜单和选择对话框

这提供了一个包含项目列表的对话框,允许用户进行一个或多个选择:

  • 菜单和Radiolist对话框允许选择一个选项。

  • “清单”对话框允许选择一个,多个或所有选项。

  • 组合框对话框允许使用下拉菜单选择一个选项。

文件选择对话框

用户可以选择文件系统的一部分,包括:

  • 选择现有文件,具有按名称或文件类型进行过滤的能力

  • 输入要保存/更新的新文件

  • 目录

进度对话框

用户可以将kDialog与dcop命令进行组合,创建一个对话框,该对话框可以更新用户的操作进度。

看看上面的选项,其中两个跳出来有潜力:

  • “清单对话框”将允许我们选择一个或全部我们的站点进行备份。

  • “信息信息框”可用于显示它们中的每一个是成功还是失败。

给出这些选项,我们可以想象我们的脚本看起来像这样:

SITE1 is located HERE (make these full paths, not relative paths)
SITE2 is located THERE
SITE3 is located IN ANOTHER PLACE

display a kDialog with SITE1, SITE2, and SITE3 as options
    and tell me which one(s) the user picks

for each one the user picked:
    run +drush ard+ on that site, and
    record whether it was successful or not.

display another +kDialog+ with each of those results.

考虑到这一点,让我们来吧。

我们应该做的第一件事是选择我们要应用于每个站点的drush命令。 假设所有站点都位于不同目录中的同一个Web主机上,但是我们希望将备份存储在通用的“备份”目录中。 我们可以使用以下内容:

cd SITE
drush ard --destination=/home/user/backup/SITENAME.tar.gz

所以使用你设置变量循环的知识 ,我们可以使这个脚本如下:

#! /bin/bash

// Note: create variables to hold paths to all the sites
PERSONALSITE='/home/www/mypersonalsite/'
BUSINESSSITE='/home/www/mybusinesssite/'
HOBBYSITE='/home/www/myhobbysite/'

// Note: create variable to hold path to the destination
DESTINATION='/home/user/backup'

// Note: display a dialog asking the user to select which sites to back-up
CHOICES=$(kdialog --checklist "Select sites to back-up:" 1 "Personal site" off 2 "Business Site" off 3 "Hobby site" off)

// Note: log a success/failure message for each of the choices returned from dialog
for each in $CHOICES
do
    case {
        1)
            cd $PERSONALSITE
            drush ard --destination=$DESTINATION/mypersonalsite.tar.gz
            if [$?=="0"]
            then
                RESULTS += "Personal site backup: Succeeded\n"
            else
                RESULTS += "Personal site backup: Failed\n"
            fi
        2)
            cd $BUSINESSSITE
            drush ard --destination=$DESTINATION/mybusinesssite.tar.gz
            if [$?=="0"]
            then
                RESULTS += "Business site backup: Succeeded\n"
            else
                RESULTS += "Business site backup: Failed\n"
            fi
        3)
            cd $HOBBYSITE
            drush ard --destination=$DESTINATION/myhobbysite.tar.gz
            if [$?=="0"]
            then
                RESULTS += "Hobby site backup: Succeeded\n"
            else
                RESULTS += "Hobby site backup: Failed\n"
            fi
    esac

// NOTE: display a dialog with the results of all the backup operations.
kdialog --msgbox $RESULTS

如果我们保存这个,并且我们可以按照Bash系列的第一篇文章所述运行它,我们可以运行一个命令,获得一个易于使用的对话框来选择我们的网站,然后看到一个很好的窗口报告回来一切如何。

虽然这个脚本当然可以通过几种方式进行优化,但它演示了如何使用kdialog来收集一些用户输入并通过在脚本中运行单个程序来显示一些结果。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏