跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

Rexx 与 AIX

易用而强大的跨平台脚本

Cameron Laird (claird@phaseit.net), 副总裁, Phaseit Inc.
Cameron Laird 是 developerWorks 长期投稿者和前专栏作家。他经常编写关于促进其公司应用程序开发的开源项目的文章,主要关注可靠性和安全性。

简介: REstructured eXtended eXecutor (Rexx) 语言已有将近 30 年的发展历程,但其潜力却经久不衰。Rexx 是第一批被广泛使用的“脚本”语言之一,其功能和平台范围不断得到扩展,特别适合与 AIX® 搭配使用。

发布日期: 2007 年 5 月 14 日
级别: 中级
访问情况 : 2372 次浏览
评论: 


REstructured eXtended eXecutor (Rexx) 语言可为担任 AIX® 开发人员或管理员的您做什么呢?它的功能非常强大,甚至超乎您的想象,特别是在 2006 年末由官方首次发布的 AIX 变种——Open Object Rexx (ooRexx) 更是如此。

您需要对此脚本语言有更多的了解,清单 1 显示了其中的一个方面:


清单 1. 使用 Rexx 进行字数统计
                    
      parse arg filein
      count. = 0
      do while lines(filein) > 0
          input = linein(filein)
          do n = 1 to words(input) 
              w = word(input, n)
              count.w = count.w + 1
              if count.w = 1 then word_list = word_list w
          end
      end
      
      do i = 1 to words(word_list)
          w = word(word_list, i)
          say w count.w
      end
    

这是一个取消注释的 Rexx 程序。您能猜到它将执行什么操作吗?我相信您可以,即使您从未学习此语言也能看出来。此程序将执行下列操作:

  • 打开其名称显示在命令行上的文件
  • 读取该文件中的每行内容
  • 将每行内容分成单个的字
  • 累计字数
  • 报告出现的总字数

在安装了 Rexx 的 UNIX® 计算机上,如果将此程序作为 Rexx word_count.Rexx draft.xml 运行,则输出将类似于清单 2


清单 2. 字数统计程序的典型输出
                    
	  .
	  .
	  .
      included 3
      in 55
      file 3
	  .
	  .
	  .
    

如果您的桌面上 安装 Rexx,请不用担心,我稍后还将谈到这些可用性问题。

可读的 Rexx

清单 1 为我们上了第一课,我们从中可以看出 Rexx 程序易于理解:它们与您已编写过的 Shell 程序非常相似,只不过它们的算法更为高级,关联数组也十分有效。关联数组(又称为哈希字典stem 变量 等)是一种建立了索引的数据类型,其索引可以是“任意”字符串,而不仅局限于 C 数组所使用的整数。在 count 示例程序中,它使用一个 stem 变量将单个字映射到该字的出现次数。

要让自己有效地使用 Rexx,您需要学习此语言并访问它的各种参考资料。这也十分容易:现在有大量的 Rexx 资源,包括在线版本和打印版本,您可以免费获取它们。下面的参考资料部分提供了多篇 developerWorks 文章,其中包含的参考资料十分丰富,足以让您使用这一出现将近 30 年的语言踏上 Rexx 编程之路。

不过,如果您在大多数桌面的命令行中键入上面的 Rexx word_count.Rexx draft.xml,您会很快发现这些桌面上并未安装 Rexx。如果现代计算机很少在缺省安装中提供 Rexx,还有学习它的必要吗?让我们看一下 Rexx“文化角色”的其他重要方面,以便您可以自行决断。

Rexx 对 Amiga 和 OS/2® 桌面至关重要,并且它仍然是 System z™、CICS® 等 IBM 大型主机的标准脚本语言。在 AIX 操作系统的生存期内,IBM 曾使用几个不同的名称将 Rexx 作为 AIX 的一个产品提供。无论您运行的是哪个特定版本,都至少可在您的主机上下载两个主要的实现(多数情况下是 Regina 和 ooRexx)。这是关于此语言的另一个重要事实:您可以为计算机下载 Rexx,只有少数例外情况。而且,除 Rexx 的“本机”实现外,每个支持 Java™ 虚拟机 (JVM) 的系统都可以运行 Rexx,因为 NetRexx 变种可直接编译为 Java 字节码。

这种可移植性意义重大,其中一个方面是如果您在某个计算机或网络上使用 Rexx 工作,则无论您到其他任何位置,也都可以应用这些知识。对于既负责大型机、又负责小型系统的人而言,由于这两种系统在编程或维护模型方面缺乏共同点,因此这种可移植性就显得格外重要。

与操作系统集成

让我们看看清单 1 还给我们提供了什么内容。假设您要对报告排序;Rexx 如何实现此目的呢?

ANSI Standard Rexx 不包括任何排序例程、函数或关键字。这可能会使您感到惊讶,因为多数甚至最简单的应用程序也需要提供排序功能。然而,Rexx 的策划师并未忽略这一现实。实际上,Rexx 的部分要旨就是要与其主机操作系统的命令行环境紧密集成。Rexx 会将每个无法解析为分配或指令的语句视为“本机”命令。要调整清单 1 以产生排序结果,只需编写以下内容:


清单 3. 用 Rexx 对字数统计排序
                    
    
    parse arg filein
    count. = 0
    do while lines(filein) > 0
        input = linein(filein)
        do n = 1 to words(input) 
            w = word(input, n)
            count.w = count.w + 1
            if count.w = 1 then word_list = word_list w
        end
    end

    
    tmpfile = "/tmp/mytempfile"
    stream(tmpfile, 'c', "open write replace")
    do i = 1 to words(word_list)
        w = word(word_list, i)
        oneline = w count.w 
        call lineout tmpfile, oneline
    end
    
    command = "sort" tmpfile
    address system command 
    do i = 1 while queued() \= 0
        parse pull line
        say line
    end
    

此示例先写出 tmpfile 外部文件的字数统计表,然后依赖 sort 外部系统命令对所得到的报告排序。AIX 和其他风格的 UNIX 都内置于 sort 命令行实用工具。


清单 4. 清单 3 的示例排序报告
                
	   ...
	along 1
	alongside 1
	already 3
	also 7
	   ...
     

现在,大多数 Rexx 安装都内置了自己的排序扩展,因此可以方便地为缺少快速排序或冒泡排序的安装定义实现这些排序方法的子例程。清单 3 很有启发意义,因为 Rexx 主要用于对来自其他工具的结果进行解析、管理和重新排列。在处理大型数据集的环境中,最好为 Rexx 团队提供专门的外部 sort 命令。因此,下一个有关 Rexx 的事实是 Rexx 希望与系统命令“合作”

这是否说明 Rexx 难以使用?因为使用程序 Shell 产生的排序字数统计列表将非常简单,如下所示:


清单 5. 用 Shell 对字数统计排序
                    
      FILE=$1
      TMPFILE=/tmp/$$

      for word in `cat $FILE`
      do
	  echo $word >> $TMPFILE
      done

      sort $TMPFILE | uniq -c
    

解决方案不是更好吗?

在目前这个问题上,我们承认,Shell 的表现更为出色;它很好地利用了内置的 uniq -c 命令。即使在对报告重新格式化或进行简单的筛选时,也可能只需要向 sh 源代码添加另一行代码即可。

但是,在需要执行算术运算或管理比空格分隔的记录更为复杂的数据结构时,Shell 将开始变得难堪重负。Rexx 适用于比 sh 要求更高的项目。ooRexx 更是如此,它内置了一个基本类集,其中包括:

  • QUEUE
  • TABLE
  • ALARM
  • SET
  • MESSAGE
  • 以及另外六个类

ooRexx 完全支持多态性、继承性和重要的库(例如 TCP/IP 和算法)等面向对象的方面,从而使 Rexx 程序可以满足较为复杂的要求。使用 Rexx/Tk、Rexx/DW 或其他 GUI 库之一,还可以进行图形用户界面编程。

现在,您已了解了有关 Rexx 的基本事实。如果您已熟悉多种动态语言和现代 Shell,则 Rexx 可能不会为您提供太多便利。但另一方面,如果您的日常工作属于其他领域,而并不要求考虑元编程或连续性,特别是当您跨多种 IBM 系统工作时,您将希望阅读参考资料部分,以便了解有关 Rexx 的更多信息。

结束语

请记住:

  • Rexx 程序易于理解。
  • 您可以找到大量可用的 Rexx 资源。
  • 现代计算机很少在缺省安装中提供 Rexx。
  • 您可以为计算机下载 Rexx。
  • Rexx 希望与系统命令“合作”。
  • Rexx 适用于比 sh 要求更高的项目。

祝您的 Rexx 编程之路一帆风顺。


参考资料

学习

获得产品和技术

  • IBM 试用软件:从 developerWorks 可直接下载这些试用软件,您可以利用它们开发您的下一个项目。

讨论

关于作者

Cameron Laird 是 developerWorks 长期投稿者和前专栏作家。他经常编写关于促进其公司应用程序开发的开源项目的文章,主要关注可靠性和安全性。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 使用条款

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

(长度在 3 至 31 个字符之间)


单击提交则表示您同意developerWorks 的条款和条件。 使用条款.

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=219921
ArticleTitle=Rexx 与 AIX
publish-date=05142007
author1-email=claird@phaseit.net
author1-email-cc=

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。