当前位置: 首页 > 图文教程 > 操作系统 > Unix/Linux > 使用自由软件Rexx 的实现来编写脚本

Unix/Linux
组网不求人!搭建简易Linux局网服务器
漂亮的国产Linux操作系统Open Desktop赏析
Linux操作系统中安装和试用IE、Office等软件
Linux中巧妙安装红旗紫光输入法
在linux7.1上安装jdk+tomcat+oracle9i笔记
稳定安全高效的新一代Linux服务器产品问世
SWsoft公司推出Windows版Linux服务器软件
方便快捷—活用Linux操作系统的后台任务
Linux用户要注意修复漏洞
Linux中防御垃圾邮件的方法
解除使用Linux分区工具时给大家带来的困扰
Linux指令篇日期时间排程--date
在Fedora_Core_3上安装zhcon0.2.3
Linux指令篇档案目录管理--cat
备份mbrzt
SLES FAQ 系列 -- 配置网卡绑定
编译内核2.4.20-8custom
Linux指令篇档案目录管理--cut
Vmware gsx 2.5+linux+oracle817ops 双机安装手册
XteamLinux安装小技巧

Unix/Linux 中的 使用自由软件Rexx 的实现来编写脚本


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 165 ::
收藏到网摘: n/a

    很容易在“小语言”的世界中迷失方向 —— 它们中相当多是出于一个公司、个人或者一个项目的特殊需要而编写出来的。Rexx 就是这些语言中的一个,已经在 IBM 的操作系统上使用很长时间了,而且令人满意的最新实现可以用于 Linux 和其他免费软件操作系统。在相对粗糙的 shell 脚本和笨重的拘泥形式的完全系统语言的夹缝之中,Rexx 有其用武之地。Rexx 值得很多 Linux 程序员和系统管理员将其添加到收集的关键工具中。

关于 Rexx

    Rexx 编程语言最初创建于 1979 年,是一个层次非常高的脚本语言,有特别强大的用于文本处理任务的工具。从 Rexx 诞生起,IBM 就将各种版本的 Rexx 加入到它的操作系统中 —— 从主机到中型机再到终端用户操作系统,比如 OS/2 和 PC-DOS。其他 OS 制造商,比如 Amiga,也将 Rexx 作为永远可用的系统脚本语言集成进来。此外,许多独立软件开发商为很多平台创建了 Rexx 环境。再晚些时候,ANSI 于 1996 年正式为 Rexx 采纳了一个标准。

    当前(尤其是在 Linux 或者起源于 BSD 的 OS 上),Rexx 的那些大部分早期实现,主要作为历史足迹为人们所关心。不过,两个当前保持的 Rexx 实现可以用于包括 Linux、MacOSX 和 Windows 在内的许多平台:Regina 和NetRexx。Regina 是本地执行文件,以免费软件源代码方式,或者为诸多平台预编译好的方式获得 —— 您可以像安装任何其他语言解释器一样安装它。NetRexx 是一个有趣的“混合物”。此语言派生自普通的 Rexx。更类似于 Jython 或者 Jacl,NetRexx 将类似于 Rexx 源代码编译为 Java 字节代码,并(可选)在 JVM 中运行作为结果生成的 .class 文件。

    NetRexx 是一个 IBM 项目,用于为 Java 虚拟机编译类似于 Rexx 的代码。在实际能力和编程级别上,Rexx 最接近于 bash 加上 GNU 文件工具(外加 grepsed );或者可能相当于 awk 或 Perl。当然,相对于 Python、Ruby 或者 Java 来说,Rexx 让人感觉更为快而粗糙。Rexx 的冗长 —— 或者更应该说是,简洁 —— 类似于 Perl、Python、Ruby 或者 TCL。并且,Rexx 当然是完全 Turing 的,支持模块和结构化编程,有面向专门任务的库,例如 GUI 接口、网络编程和数据库访问。但是它最自然的目标在于系统脚本的自动化和本文处理任务。与 shell 脚本一起,Rexx 使得应用程序的控制非常自然且显而易见;但相对于 bash (或者 tcshksh 等等),Rexx 中包含了更丰富的内置控制结构和(文本处理)函数。

    在文体上,Rexx 的 IBM/mainframe 根源体现在它对命令的大小写敏感;在某种次要程度上也体现在它使用标点符号相对较少 (更多用关键字而不是符号)。我倾向于认为这些特性的目的是提高可读性;但这在很大程度上取决于个人的爱好。

从流和栈开始

    作为一个简单的小例子,让我来介绍一个特别简单的工具的多个版本,它可以列出文件并对其进行编号。Rexx 和 shell 脚本的一个共同点是,它用于和底层操作系统打交道的函数相对很少 —— 几乎仅限于可以打开、读和修改文件。对大部分其他事情,您需要依赖于外部实用程序来完成手头上的工作。实用程序 numbered-1.rexx 只是处理 STDIN:


清单 1. numbered-1.rexx

#!/usr/bin/rexxDO i=1 UNTIL lines()==0 PARSE LINEIN line IF line\="" THEN SAY i || ") " || lineEND

    无处不在的指令 PARSE 可以从各种不同的源读入。在这里,它将 STDIN 的下一行赋给变量 line 。我们也会检查某一行是否为空,如果是空的话,则不进行显示和编号。例如,与 ls 组合使用我们可以得到:


清单 2. 将命令通过管道传输到 numbered-1