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

Unix/Linux
Linux系统如何让双网卡合“一”而用
Linux操作系统静态路由设置技巧介绍
Linux环境下如何去远程登录Windows
实战Linux拨号上网 KPPP常见疑问解答
介绍几个与Linux网络设置有关的文件
Linux下三种网络管理工具功能及使用
Squid实现反向代理并且具备内网代理
传统网络配置命令与IP高级路由命令
审计并跟踪Linux系统的异常活动详解
如何使用Linux系统脚本简化无线网络
linux下adsl拔号与共享上网
Linux代理服务器和防火墙配置详细解析
用VNC客户端图形界面管理远程Linux系统
透视你的网络 利用vnStat监测宽带流量
Linux下使用Iptraf进行网络流量的分析
Linux服务器启动过程详解
基于Linux操作系统实现的传真系统
在Linux下建立VPN服务器来做加密代理
有备无患 Linux服务器备份和恢复技巧
如何测试和调试Apache服务器

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 145 ::
收藏到网摘: 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