您好,欢迎访问三七文档
大连理工大学UNIQUE团队®2020年7月21日大型主机系统管理REXX语言概览2020年7月21日5时24分内容概览REXX简介REXX语法函数和子例程REXX数据处理REXX与子系统的交互大连理工大学UNIQUE团队2020年7月21日5时24分主机脚本语言概述什么是脚本语言?脚本语言(ScriptProgrammingLanguage)是为了缩短传统的编写—编译—链接—运行(Edit-Compile-Link-Run)过程而设计的计算机编程语言。脚本语言和一般程序设计语言的一个重要不同在于脚本语言通常是被解释执行,而系统程序语言通常是被编译执行。z/OS中所提及的系统脚本语言主要有哪些?主要包括:①CLIST语言(表示“命令(Command)的序列(List)”)②REXX语言③USS(UNIXSystemService)的Shell大连理工大学UNIQUE团队2020年7月21日5时24分REXX简介REXX:REstructuredeXtendedeXecutor1979-1982IBMMikeCowlishaw为简化编程而设计REXX主要用于IBM的主机系统REXX几乎可以在世界上任何操作系统上运行,例如:Windows、Linux、UNIX、BSD、MacOS、DOS等REXX语言的主要应用执行日常例行任务,例如输入TSO/E命令调用其他REXX程序编写ISPF应用对问题的一次性快速解决系统编程大连理工大学UNIQUE团队2020年7月21日5时24分REXX特性1、用途多样2、可读易用3、书写自由4、单一的数据类型5、强大的内置函数6、跟踪调试方便7、编译解释型语言大连理工大学UNIQUE团队2020年7月21日5时24分REXX的组成REXX主要包含以下几部分。(1)指令:REXX中包含5种类型的指令,分别是关键字、赋值、标签、空子句和命令调用(2)内置函数:此类函数由编译器直接支持,因而能够提供方便的处理功能(3)TSO/E外部函数:此类函数由TSO/E环境支持,当REXX进行某些特定操作时,TSO/E外部函数会与系统进行交互(4)数据栈函数(datastack):数据栈提供数据的临时存储功能,以辅助I/O操作及其他类型的操作大连理工大学UNIQUE团队2020年7月21日5时24分第一个REXX程序eg:/*REXX*//*标识出该脚本文件为REXX脚本*/SAY“WHAT‘SYOURNAME?”/*输出一句提示语句*/PULLNAME/*将用户输入存入变量NAME*/SAY‘HELLOWORLD!THISIS’NAME/*输出结果*/大连理工大学UNIQUE团队2020年7月21日5时24分REXX执行1.2.3.如果REXX程序已放在系统库中,则可以直接在命令栏里指定执行,无需给出其所在的数据集名4.批处理方式,使用JCL提交作业执行PGM=IKJEFT01大连理工大学UNIQUE团队2020年7月21日5时24分REXX调试1、TRACE指令调试TRACEC:所有之后的命令调用都将被追踪报告TRACEE:只追踪产生非零返回码的命令2、REXX特殊变量RC和SIGLRC:返回码无错时为0,有错误时置为该错误的返回码SIGL:控制流发生转变时的代码行号,SIGNALONERROR定位错误发生位置3、交互式调试机制通过TRACE的“?”选项或者TSO/E下的EXECUTILTS命令选项启动大连理工大学UNIQUE团队2020年7月21日5时24分REXX语法指令概览指令的语法规则:指令可为大写字母、小写字母或者两者的混合,但是,在编译执行过程中,指令会被自动转化成大写,用引号引用的部分除外。关于引号的使用,可以使用单引号或者双引号,只要相同的引号成对即可指令的格式:REXX语言指令格式十分自由,一条指令可以从任意列写起,系统自动忽略多余的空格和空行,若一条指令在一行之内不能全部容纳,可以续行,此时在上一行的结尾加上逗号,表示续行,这种续行方式会在两部分间加上一个空格,如果不想加入空格,可以用(||)来续行,例如:SAY'THISISANEXTENDED',‘INSTRUCTION.’/*输出“THISISANEXTENDEDINSTRUCTION.”*/SAY'THISISASTRINGCONT'||,‘ENT.’/*输出”THISISANSTRINGCONTENT.”*/大连理工大学UNIQUE团队2020年7月21日5时24分•一条指令结束用分号表示,也可用分号分隔一行中的几条不同的指令。若一行只有一条指令,也可以不标记结尾,因为默认情况下一行的结束标志着一条指令的结束,例如:SAY'hello';SAYhello;SAYGOON“指令的输出为:helloHELLOGOON大连理工大学UNIQUE团队2020年7月21日5时24分指令类型在REXX中,有5种类型的指令:关键字、赋值、标签、空子句和命令调用*关键字:SAY,IF,THEN,ELSE,EXIT,END,DO*赋值:Variable=9;Variable=Variable+3*标签:后面紧跟冒号的名称符,出现在指令开始处*空子句:注释或者空行,作用是增加可读性*命令调用:包括TSO/EREXX命令以及宿主命令大连理工大学UNIQUE团队2020年7月21日5时24分变量和表达式变量命名:大小写字母以及@、#、$、?、.、!、_等特殊符号双字符X‘41’(若要使用,需在程序中指定ETMODE)eg:OPTIONS‘ETMODE’/*通过设置ETMODE引入双字符变量*/.S.Y.M.D=10/*双字符变量要用括起来*/变量名称的约束:第一个字符不能是数字,也不能是点(.),长度不超过250字节,不能取保留字大连理工大学UNIQUE团队2020年7月21日5时24分变量的取值:变量的值可以是数值常量,如整型,浮点型,带符号数等,也可以是字符串,其他变量值或表达式如果变量没有初始化,那么它的值默认为变量名的大写字母变量赋值可通过PARSE指令、VALUE内置函数、赋值表达式及其他编程语言变量类型三种类型:简单变量(SimpleVariable)、复合变量(CompoundVariable)和复合词干(CompoundStem)大连理工大学UNIQUE团队2020年7月21日5时24分简单变量:不带句点(.)变量,没有对其赋值,默认值为对应的大写表示。REXX对变量本身的大小写是不敏感的复合变量:带一个或多个句点(.)的变量,由词干和词尾组成,遵循简单变量命名规则,变量总长度不超过255个字符,对应其他语言中的数组或者链表,但下标不一定为数字eg:TIME=3REXX.TIME值为REXX.3复合词干:复合变量的第一个词干和第一个句点(.)组成,用于将复合变量所表示的整个变量集赋初值eg:room.=emptyroom.mine=fullSAYroom.1room.yoursroom.mine/*输出“emptyemptyfull”*/大连理工大学UNIQUE团队2020年7月21日5时24分需要注意的是,复合变量的首段变量名通常表示符号名称本身,而剩余部分的变量接受前面所赋予的值EG:大连理工大学UNIQUE团队2020年7月21日5时24分表达式的使用常量表达式:数字常量,字符串常量(通常写在引号中,避免混淆)算数表达式:+-*/%(取商)//(取余)**(乘方)+/-(正负)运算符优先级(从高到低):大连理工大学UNIQUE团队运算符符号运算符符号前缀操作符\、-、+串联操作空格、||、直接相邻乘方**比较操作==、=、等乘除*、/、%、//逻辑与&加减+、-或、异或|、&&2020年7月21日5时24分比较表达式比较表达式通过比较运算返回真或假,用1和0表示。通常和IF-THEN-ELSE配合使用,用于判断程序执行的路径。比较的对象可以是数值和字符串。比较运算符大连理工大学UNIQUE团队运算符逻辑判断运算符逻辑判断=等于=、﹁、\大于等于;不小于﹁=、\=、、不等于=、﹁、\小于等于;不大于大于==严格等于小于﹁==、\==严格不等2020年7月21日5时24分关于等于(=)和严格等于(==)大连理工大学UNIQUE团队2020年7月21日5时24分逻辑表达式:&(与)|(或)\(非)&&(异或)连接表达式(1)空格:连接两项,并在中间加入空格,默认设置为加入一个空格SAYXYZ/*XYZ*/(2)“||”直接连接两端,中间不加空格8||(3*3)/*89*/(3)直接相邻eg:percent=60percent‘%’/*60%*/大连理工大学UNIQUE团队2020年7月21日5时24分关键字指令SAY向终端输出字符(PARSE)PULL从键盘读取PULL:相当于PARSEUPPERPULL命令的缩略形式(PARSE)ARG读取用户提供的参数ARG:相当于PARSEUPPERARG命令的缩略形式ARGstring,num/*string=‘hello’,num=2*/(提供的参数为‘hello’,2)ARGstr1,str2/*str1=hello,str2=world*/(提供的参数为“helloworld”)大连理工大学UNIQUE团队2020年7月21日5时24分NOP空子句,表示不执行操作。SELECTWHENA=CTHENNOPWHENACTEHNSAY‘AC’OTHERWISESAY‘AC’END/*若不使用NOP,则将把第二个WHEN子句当做第一种情况的处理结果*/UPPER将变量值转化成大写eg:A=‘hello’,b=‘world’UPPERABSAYAB/*输出“HELLOWORLD”*/大连理工大学UNIQUE团队2020年7月21日5时24分PROCEDURE使用在子例程中,隔离子例程和主程序中变量的使用Eg:/*K和M的值不会返回到主程序中*/大连理工大学UNIQUE团队2020年7月21日5时24分如果想和主程序共享一些变量,可以使用EXPOSE选项,例如:大连理工大学UNIQUE团队2020年7月21日5时24分CALL用于调用函数和跟踪特定的事件1、特定情况的跟踪。通过CALLON和CALLOFF可以捕捉到特定事件或状态的发生,并改变程序的执行顺序。2、调用函数或子例程。CALLfunction_name,通过指定例程的名字来调用,可以是内部例程、内置函数或外部函数其他关键字指令:ADDRESS,DROP,NUMERIC,OPTIONS,SIGNAL……(如需了解更多关键字的使用方法,请查阅IBM白皮书TSO/EREXXReference)大连理工大学UNIQUE团队2020年7月21日5时24分常用的REXX命令数据栈相关命令1)NEWSTACK和DELSTACKNEWSTACK命令用于创建一个数据栈,并且后续的操作都将针对这个新建的数据栈而原来的数据栈会被隐藏或隔离出来。一次可以创建多个数据栈,但是只有最新创建的可以被使用。DELSTACK命令用来删除最新创建的数据栈和里面的全部元素,用QUEUED函数可以得到当前使用的数据栈中元素的数量。“NEWSTACK”/*创建新数据栈*/PUSHelem1;PUSHelem2NUM=QUEUED()SAYNUM/*输出“2”*/“DELSTACK”/*删除之前创建的数据栈*/大连理工大学UNIQUE团队2020年7月21日5时24分2)MAKEBUF在数据栈上创建一个新的缓冲区,并返回编号,保存在RC中DROPBUF删除最新创建的缓冲区并清空数据3)QSTACK用于返回程序中存在的数据栈数量。如果没使用NEWSTACK命令,RC的值为1。4)QBUF就算新创建的数据栈上建立的缓冲区数量,为使用过MAKEBUF命令,QBUF命令返回05)QELEM计算新创建的数据栈缓冲区中的元素数量,未使用过MAKEB
本文标题:rexx编程语言
链接地址:https://www.777doc.com/doc-6639753 .html