資源描述:
《人人可用的 rexx》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、人人可用的Rexx 關(guān)于Rexx Rexx編程語(yǔ)言最初創(chuàng)建于1979年,是一個(gè)層次非常高的腳本語(yǔ)言,有特別強(qiáng)大的用于文本處理任務(wù)的工具。從Rexx誕生起,IBM就將各種版本的Rexx加入到它的操作系統(tǒng)中從主機(jī)到中型機(jī)再到終端用戶操作系統(tǒng),比如OS/2和PC-DOS。其他OS制造商,比如Amiga,也將Rexx作為永遠(yuǎn)可用的系統(tǒng)腳本語(yǔ)言集成進(jìn)來(lái)。此外,許多獨(dú)立軟件開(kāi)發(fā)商為很多平臺(tái)創(chuàng)建了Rexx環(huán)境。再晚些時(shí)候,ANSI于1996年正式為Rexx采納了一個(gè)標(biāo)準(zhǔn)。 當(dāng)前(尤其是在Linux或者起源于BSD的OS上),
2、Rexx的那些大部分早期實(shí)現(xiàn),主要作為歷史足跡為人們所關(guān)心。不過(guò),兩個(gè)當(dāng)前保持的Rexx實(shí)現(xiàn)可以用于包括Linux、MacOSX和中運(yùn)行作為結(jié)果生成的.class文件。 NetRexx是一個(gè)IBM項(xiàng)目,用于為Java虛擬機(jī)編譯類似于Rexx的代碼。在實(shí)際能力和編程級(jí)別上,Rexx最接近于bash加上GNU文件工具(外加grep和sed);或者可能相當(dāng)于adash;或者更應(yīng)該說(shuō)是,簡(jiǎn)潔類似于Perl、Python、Ruby或者TCL。并且,Rexx當(dāng)然是完全Turing的,支持模塊和結(jié)構(gòu)化編程,有面向?qū)iT(mén)任務(wù)的庫(kù),例
3、如GUI接口、網(wǎng)絡(luò)編程和數(shù)據(jù)庫(kù)訪問(wèn)。但是它最自然的目標(biāo)在于系統(tǒng)腳本的自動(dòng)化和本文處理任務(wù)。與shell腳本一起,Rexx使得應(yīng)用程序的控制非常自然且顯而易見(jiàn);但相對(duì)于bash(或者tcsh、ksh等等),Rexx中包含了更豐富的內(nèi)置控制結(jié)構(gòu)和(文本處理)函數(shù)?! ≡谖捏w上,Rexx的IBM/mainframe根源體現(xiàn)在它對(duì)命令的大小寫(xiě)敏感;在某種次要程度上也體現(xiàn)在它使用標(biāo)點(diǎn)符號(hào)相對(duì)較少(更多用關(guān)鍵字而不是符號(hào))。我傾向于認(rèn)為這些特性的目的是提高可讀性;但這在很大程度上取決于個(gè)人的愛(ài)好?! 牧骱蜅i_(kāi)始 作為一個(gè)簡(jiǎn)單
4、的小例子,讓我來(lái)介紹一個(gè)特別簡(jiǎn)單的工具的多個(gè)版本,它可以列出文件并對(duì)其進(jìn)行編號(hào)。Rexx和shell腳本的一個(gè)共同點(diǎn)是,它用于和底層操作系統(tǒng)打交道的函數(shù)相對(duì)很少幾乎僅限于可以打開(kāi)、讀和修改文件。對(duì)大部分其他事情,您需要依賴于外部實(shí)用程序來(lái)完成手頭上的工作。實(shí)用程序numbered-1.rexx只是處理STDIN: 清單1.numbered-1.rexx#!/usr/bin/rexxDOi=1UNTILlines()==0 PARSELINEINline IFline=THEN SAYi
5、
6、)
7、
8、lineEND
9、無(wú)處不在的指令PARSE可以從各種不同的源讀入。在這里,它將STDIN的下一行賦給變量line。我們也會(huì)檢查某一行是否為空,如果是空的話,則不進(jìn)行顯示和編號(hào)。例如,與ls組合使用我們可以得到: 清單2.將命令通過(guò)管道傳輸?shù)絥umbered-1$ls
10、./numbered-1.rexx1)ls-1.rexx2)ls-2.rexx3)ls-3.rexx4)ls-4.rexx5)ls-5.rexx6)ls-6.rexx7)numbered-1.rexx8)numbered-2.rexx 同樣您可以方便地將任何其他命令通
11、過(guò)管道傳輸進(jìn)來(lái)?! exx的核心概念之一是巧妙地處理多個(gè)?;蛄?。類似bash的風(fēng)格,在Rexx中任何沒(méi)有被識(shí)別為內(nèi)部指令或函數(shù)的內(nèi)容,都被假定為一個(gè)外部實(shí)用程序。沒(méi)有特定的函數(shù)或語(yǔ)法用于調(diào)用外部命令。Regina的實(shí)用程序rxqueue可以將輸出壓入Rexx棧,利用它我們可以寫(xiě)一個(gè)這樣的有編號(hào)的ls實(shí)用程序: 清單3.ls-1.rexx#!/usr/bin/rexxls
12、rxqueueDOi=1lsALDOi=1WHILEqueued()=0 PARSEPULLline;SAYi
13、
14、)
15、
16、line;END 可能
17、看起來(lái)ADDRESS命令只是獲得ls實(shí)用程序的輸出;但實(shí)際上它改變了后面外部調(diào)用的整體執(zhí)行環(huán)境。這些例子運(yùn)行于固定大小寫(xiě)/區(qū)分大小寫(xiě)的文件系統(tǒng)上;在很多系統(tǒng)下,您將不得不保持ls的大小寫(xiě)去引用它。這個(gè)執(zhí)行相同: 清單5123下一頁(yè)——感謝閱讀這篇文章,..,.ls-5.rexx#!/usr/bin/rexxADDRESSSYSTEMALlsDOi=1環(huán)境下運(yùn)行,將把它們的輸入定向到默認(rèn)的FIFO(先入先出,first-in-first-out)。您也可以改為輸出到LIFO(或者是命名的,或者是默認(rèn)的)不同之處是,F(xiàn)
18、IFO向棧的底部添加,而LIFO向頂部添加。指令PUSH和QUEUE對(duì)應(yīng)的是對(duì)棧的LIFO和FIFO操作。指令PULL或者PARSEPULL從棧頂取得一個(gè)字符串?! ×硪粋€(gè)值得說(shuō)明的有用棧是Rexx腳本的命令行參數(shù)。例如,我們可能希望在我們的編號(hào)實(shí)用程序中執(zhí)行任意的命令,而不是只執(zhí)行l(wèi)s: 清單6.numbered-1.rexx#!/usr/