第四章作业控制语言内容提要•基本概念•JCL语句•DD语句的关键字参数•特殊的DD语句•过程•实用程序基本概念——作业•作业(JOB)是用户在完成该任务时要求计算机所做工作的集合基本概念——作业与作业流•在大型主机系统中,当用户需要使用计算机完成某项批处理任务时,用户必须准备一个作业流(JobStream)•作业流中包含一个或多个作业(Job)基本概念——作业控制语言JCL•与COBOL等一般的编程语言不同,作业控制语言JCL(JobControlLanguage)是批处理作业的用户与操作系统的接口•作业控制语言便是提供给用户,为实现所需作业控制功能委托系统代为控制的一种语言•用户通过JCL的相应语句来与操作系统通讯,获得作业所需的资源等,按自己的意图来控制作业的执行基本概念——作业步•一个作业中,每一段程序的执行称为一个作业步,一个作业可包含一个或多个作业步。一般的,作业由以下相对独立的三步组成:•编译:把源程序语句(源模块)转换成目标模块•链接编辑:把目标模块同子程序库中的其他程序链接起来得到可执行模块•执行:运行可执行模块得到结果•一个作业中的各个作业步是顺序执行的,因此一个作业步的输出可以作为下一个作业步的输入•用户的作业可以由一个或多个作业步构成基本概念——单步作业与多步作业只有一个作业步的作业叫做单步作业;由多个作业步构成的作业叫做多步作业。不论单步作业还是多步作业都必须包含三个JCL基本语句(JCLStatement):•作业语句(JOB):标识一个作业的开始,提供必要的运行参数•执行语句(EXEC):标识一个作业步的开始,定义本作业步所要执行的程序或过程•数据定义语句(DD):用于描述应用程序所需要的数据文件JCL语句——JCL语句的分类作业控制语言JCL由九种语句组成,除了前面介绍的三种外,其余六种是:1./*语句:表示流内数据结束或调用JES控制语句2.//*语句:注释语句,由第4到第80列写出注释内容3.//语句:空语句,用以标记一个作业的结束4.PROC语句:流内过程(IN-STREAMPROCEDURE)或编目过程(CATALOGEDPROCEDURE)的起始标记5.PEND语句:标志一个流内过程的结束。6.Command语句:操作员用这个语句在输入流中写入操作命令JCL语句——单步作业实例//BACKUPJOB,’EXAMPLEJOB’//************************//*ITISAEXAMPLE!*//************************//STEP1EXECPGM=IEBGENER//STEPLIBDDDSN=SYS1.LINKLIB,DISP=SHR//SYSINDDDUMMY//SYSPRINTDDSYSOUT=A//SYSU1DDDSN=PR.MASTER,DISP=OLD//SYSU2DDDSN=PR.MAILY.BACKUP,DISP=(NEW,CATLG),UNIT=TAPE,//DCB=(RECFM=FB,LRECL=200,BLKSIZE=1000)//JCL的语法规则——JCL字符集•字母(共26个)ABCDEFGHIJKLMNOPQRSTUVWXYZ•数字(共10个)0123456789•特殊字符(共10个),./‘()*&+-=•通配符@$#(也可分别用X’7C’X’5B’和X’7B’表示)•EBCDIC可打印字符集JCL的语法规则—一般语句格式规范在JCL中,除/*语句外的所有语句均以第1、2列的//符号作为开始标志,系统规定这些语句的长度为80列。这80列在逻辑上被划分为五个区域,分别是:•标识符区•名字区•操作符区•参数区•说明区一般语句格式规范——标识符区•一般情况下,标识符区的符号为“//”,该符号表明该条语句为JCL语句•标识符区位于每条语句的第1、2列•在特殊情况下,标识符区的符号将有所变化一般语句格式规范——名字区•名字区指明一个语句,便于系统控制块或其他语句引用它•名字可以由1~8个字母数字或通配符组成,但第一个字符必须是字母或通配符,且必须从第3列开始•名字区后必须跟一个或多个空格,可以选择名字表达出这个JCL语句的作用一般语句格式规范——操作符区•操作符区位于名字区之后,规定了语句的类型:JOB、EXEC、DD、PROC、PEND,或操作员命令•操作符区后必须跟一个或多个空格一般语句格式规范——参数区•参数区在操作符区之后,其中包括被逗号分隔的参数•这些参数决定该JCL语句如何被处理•参数区没有固定的长度及列的要求一般语句格式规范——说明区•说明区位于参数区后,用于对相应语句进行注释说明,它可以是任何所需的说明信息,注释区后必须跟一个空格•需要注意的是,仅当参数出现时才能书写说明信息,不然容易与参数混淆一般语句格式规范——续行•JCL只允许在参数区和说明区有续行,当需要续行时,在当前行的第71列前必须将某个参数或某个子参数以及参数后的逗号写完整,且下一行第1、2列为“//”,第3列为空格,续行的内容只能从4~16列开始,如果从16列后开始,将被认为是注释语句JCL的语法规则——参数规则•在JCL中,参数区内的参数的类型分为两类:位置参数(positional):与其他参数保持相对位置的参数关键字参数(keyword):由一个关键字和等号后面的可变数据组成•如果在一个语句内既有位置参数又有关键字参数时,所有的关键字参数必须位于位置参数之后JCL的语法规则——参数的语法1.位置参数和关键字参数之间必须用逗号分开,不允许有空格2.必须按规定的次序书写参数:所有的关键字参数必须位于位置参数之后,而所有位置参数也必须按规定排列3.当缺省某个位置参数或某个子参数时,应以一个逗号指明所在位置。当缺省最后一个位置参数时,逗号可以省略4.当没有任何位置参数时,则不必书写任何内容表示5.关键字参数之间没有相对位置的规定,可以按任何次序排列6.允许含有特殊字符的参数或子参数,且其中的特殊字符并非起某种特定的语法功能必须用撇号“’”替代括号将这些参数和子参数括起来,而在这些参数与子参数中要用到撇号时,则需两个连续的撇号表示有些语句中的某些参数或子参数含有一些特定的特殊字符时,将不需要用撇号括起来在JCL中用“&”来表识符号参数的开始。当参数中含有“&”且不用来表示符号参数时,则需使用连续的两个“&”来表示“&”。7.JCL的位置参数与关键字参数最多只能由两级子参数。也就是说用于括起子参数列表的括号最多只能有两层JCL的语法规则——JCL语句的位置1.JOB语句2.JOBLIB语句3.JOBCAT及SYSCHK语句4.任何流内过程5.第一个EXEC语句6.任何的STEPCAT、STEPLIB,或一般的属于这一步的DD语句7.任何更多的EXEC语句及与他们相关联的DD语句8.任何空语句JCL的语法规则——JCL语法实例作业语句//EXPJOBJOB,’USERNAME’,MSGLEVEL=(1,1),EXAMPLE作业语句续行//MSGCLASS=Q,CLASS=A//**********************注释语句//*ITISAEXAMPLE*//**********************执行语句//STEP1EXECPGM=IEFBR14语句//DD1DDDSN=MJSN.TEAM01.ONE,DISP=(,CATLG),语句续行//SPACE=(TRK,(5,2)),UNIT=SYSDA语句//DD1DDDSN=MJSN.TEAM01.TWO,DISP=(,KEEP),DD语句续行//SPACE=(TRK,(1,1)),UNIT=SYSDAJCL语句——JOB语句•JOB语句标志一个作业的开始、分配作业名并设置相关的位置参数及关键字参数,每个作业的第一个语句必须是JOB语句JOB语句——语法规则JOB语句的格式如下://作业名JOB位置参数[,关键字参数][,关键字参数]。。。[注释说明]•作业名——作业名是用户给作业指定的名字。为使操作系统识别作业,必须选择确定的作业名字,由于系统不能同时运行具有相同名字得到作业,因此只能给作业一个唯一确定的名字•位置参数•记账信息(accountinginformation)•程序员名(programmer’sname):程序员名用于标识作业的所有者(owner)信息,包括特殊字符在内,其长度不得超过20个字符•关键字参数•ADDRSPCBYTESCLASSMSGCLASSMSGLEVELPRTYREGIONTIMETYPRUN……JOB语句——作业名•作业名必须遵守前面所提到的JCL语法规则•除此之外,建议用户采用“用户标识USERID+数字或字符”的作业名,例如用户标识为JACK,则作业名可用JACKA。JOB语句的位置参数——记账信息位•记账信息位于操作符“JOB”后,它用于提供用户使用系统的合法性、机时及纸张的收费管理等•如果省略记帐信息参数不写,则需要在“程序员名”前用一个逗号来表示;但如果两个位置参数全部忽略不写,则无需任何标示JOB语句的位置参数——程序员名•程序员名用于标识作业的所有者(owner)信息,包括特殊字符在内,其长度不得超过20个字符JOB语句关键字参数——ADDRSPC•指明作业所需之存储类型,它有两个子参数:•VIRT:表示作业请求虚拟页式存贮•REAL:表示作业请求实存存储空间•缺省值为VIRT•其格式为:ADDRSPC={VIRT}{REAL}•例://PEHJOB,BAKER,ADDRSPC=VIRT//DEBJOB,ERIC,ADDRSPC=REAL,REGION=100KJOB语句关键字参数——CLASS•CLASS参数规定了作业的类别,JCL中可选用的作业类别有36个,用字母A~Z及数字0~9表示•相同类别的作业处于同一输入队列等待执行并具有相同的处理属性。•作业类别的属性定义在JES中。当CLASS参数缺省时,JES将会根据安装时的缺省值赋予该作业一个缺省的CLASS值JOB语句关键字参数——SGLEVEL•用于控制JCL作业输出清单的内容•格式:MSGLEVEL=([statements][,messages])MSGLEVEL——statement参数指明在JCL作业输出清单中应打印出的作业控制语句的类型,取值范围为:0—2。•取值0:仅打印出作业的JOB语句;•取值1:打印出作业中包括过程语句在内的所有JCL语句;•取值2:输入流中的所有控制语句。MSGLEVEL——message参数指明在JCL作业输出清单中应打印出信息的类型,取值范围为:0~1。•取值0:只有在作业异常终止时,打印出有关JCL、JES、操作员及SMS处理信息;•取值1:无论作业是否异常终止,都打印出有关JCL、JES、操作员及的处理信息MSGLEVEL——实例JOB语句关键字参数—MSGCLASS•用于为作业日志(joblog)设置输出类别。作业日志是为程序员提供的与作业相关信息的记录。当该参数省略时,系统将会采用默认值。•格式:MSGCLASS=class•class:定义作业日志的类别•与输入队列相似,class是一个A~Z的字母或一个0~9的数字。MESSAGECLASS和MESSAGELEVEL的缺省值JOB语句关键字参数——NOTIFY•用于请求系统在后台作业处理完毕时给指定用户发送信息。如果作业完成时,该用户未在系统登录,则系统所发送的信息将会保留到此用户下次登录•格式:NOTIFY={userid}•userid:必须以字母或通配符开头的1~7个字母、数字或通配符组成,其值必须是一个存在的TSO用户标识。•例://SIGNJOB,TLOMP,NOTIFY=TSOUSERJOB语句关键字参数——PRTY•用于为相应的输入队列中的作业分配优先级。系统根据作业优先级的高低来选择来选择作业执行,对于同一级的作业的选择将采取“先进先出”的原则•格式:PRTY=priority•priority:用数字量来表示优先级,数字越大表示优先级越高。根据作业进入子