Archive:Development/Tutorials/Shell Scripting with KDE Dialogs (zh CN)
介绍和程度要求
有一些关于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