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与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来收集一些用户输入并通过在脚本中运行单个程序来显示一些结果。