Archive:Development/Tutorials/Shell Scripting with KDE Dialogs (zh CN)

From KDE TechBase
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

介绍和程度要求

有一些关于KDE的误解,认为其只是一个图形环境。KDE不仅确实是一个杰出的桌面环境,它同样也对继承自Unix的命令行和脚本编程有良好支持。尤其是,KDE应用程序能够通过命令行加以控制,shell脚本也能够使用一些KDE部件。

要使用这个指导,你将需要对命令行的基础有个基本的熟悉,并且至少有shell脚本编程方面的知识。就像其他任何的编程环境,有效的shell脚本编程需要对该环境扎实的知识。即便如此,你对接下来的这些例子的理解只能是停留在一个很基本的程度。但不利的是,如果你对shell脚本编程十分熟悉,接下来的一些解释将会变得像是有点多余。

这个指导假定你在使用GNU bash shell,或其他直接兼容的产品。其他shell(特别是csh和其他的shell)的用户可能需要对这些例子做相应的修改。

shell脚本编程的技术和用途非常的多。有时一个脚本只对系统有运行的意义(如:corn),而其他时候脚本又是作为用来给用户使用的真正的应用程序。KDE包含一些特性允许你在shell脚本中使用KDE的一些功能,包括保存工作,以及能让你的脚本以为它是一个良好集成的程序集的一部分。

作为一个例子,考虑一个像这样的密码对话框。如果你需要一个用户输入一个密码,你能很容易地通过脚本生成一个看起来像这样的对话框:

kdialog的用法

例1:密码对话框

在设立了脚本中使用KDE对话框的关键字是一个叫做kdialog的应用程序的名字。要想生成一个如上所示的密码对话框,你能使用以下的命令行。

kdialog --password "Please enter the server access code:"

让我们多留意以下这段代码。kdialog的变量被用于控制对话框的类型,该对话框使用变量后的参数来创建具体的对话框。在这个密码对话框的案例中,你使用 --password 来特定该对话框类型,然后跟随着有关参数,其将作为显示在对话框内的文字。

例2:shell脚本的返回值

每次你运行kdialog(或其他任何应用程序),总会有一个返回值表针该应用程序是否按照预期地运行,或是由于某些原因而出错。你可以通过使用$?来读取这个返回值,就如下面的例子。

[watson@bakerst]$ kdialog --password "Some Text"
hello
[watson@bakerst]$ echo $?
0
  • 注意 - $?变量在每个前台进程推出时都会更新。如果你需要在这之后使用该值,你需要另外地存储它。

在这个例子中,返回值为零。如果被选中的是Cancel键而不是OK键,该值将会等于一。

  • 注意 - 这和基本部件的使用习惯有些不同。如果你对基本的Qt部件比较熟悉,这可能会有点混乱。即便如此,这对遵守接近shell脚本编程的标准来说很重要。

例3:shell脚本返回的错误值

习惯上总是使用负数来表针错误,但是shell通常将该负数与256相加。这意味著如果你在列举一个所需的变量时出错,系统将返回-2,而$?返回的是254。

[watson@bakerst]$ kdialog --password
kdialog: '<text>' missing.
kdialog: Use --help to get a list of available command line options.
[watson@bakerst]$ echo $?
254

例4:使用返回值检查的密码对话框

在一个shell脚本中,你可能想要在运行后针对所选项检查返回值。

    kdialog --password "Please enter the server access code:"
    if [ $? = 0 ]; then
            echo " you selected: OK"
    else
            echo " you selected: Cancel"
    fi

除了返回值以外,你同样也可以获得密码本身(假定你选的是OK)。毕竟,对于密码对话框来说,除了能使用结果,还有什么更重要的用处吗?

例5:在密码对话框中使用重定向

对于密码对话框,和其他提供输入能力的kdialog对话框来说,输出是被送到标准输出的。这允许你将输入重定向到一个文件,或通过管道送进另一个程序。在密码对话框的这个例子中,被输入的文本将像例2中那样被显示,除非你将其重定向

[watson@bakerst]$ kdialog --password "Enter the password" > password.file
[watson@bakerst]$ cat password.file
Secrter