JCL语言基础教程

2 篇文章 0 订阅
1 篇文章 0 订阅


作业控制语言JCL(Job Control Language)

必须包含三个JCL基本语句:

(1)作业语句(JOB):标识一个作业的开始,提供必要的运行参数。

(2)执行语句(EXEC):标识一个作业步的开始,定义本作业步所要执行的程序或过程。

(3)数据定义语句(DD):用于描述应用程序所需要的数据文件。

系统规定这三种语句行必须以“//”开头。下面是一个多步作业的例子:


//JOB1    JOB  …

 

//STEP1   EXEC …

//DD1     DD …      作业步1

//STEP2   EXEC …

//INDD1   DD …    作业步2

//INDD2   DD …

//

六种附加语句

1)/* 语句:表示六内数据结束或调用JES控制语句;

2)//*语句:注释语句,由第4到第80列写出注释内容;

3)//语句:空语句,用以标记一个作业的结束;

4)PROC语句:流内过程(IN-STREAM  PROCEDURE)或编目过程(CATALOGED PROCEDURE)的起始标记。

5)PEND语句:标志一个流内过程的结束。

6)Command语句:操作员用这个语句在输入流中写入操作命令。

JCL实例:

//BACKUP JOB   ,’EXAMPLE JOB’

//************************

//*  IT IS A EXAMPLE!   *

//************************

//STEP1    EXEC  PGM=IEBGENER

//STEPLIB  DD    DSN=SYS1.LINKLIB,DISP=SHR

//SYSIN    DD    DUMMY

//SYSPRINT DD    SYSOUT=A

//SYSU1    DD    DSN=PR.MASTER,DISP=OLD

//SYSU2    DD    DSN=PR.MAILY.BACKUP,DISP=(NEW,CATLG),UNIT=TAPE,

//                 DCB=(RECFM=FB,LRECL=200,BLKSIZE=1000)

//

JCL的语法规则:

一、JCL字符集

(1)字母(共26个)

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

(2) 数字(共10个)

0  1  2  3  4  5  6  7  8  9

(3) 特殊字符(共10个)

,  .  /  ‘  (  )  *  &  +  -  =

(4)通配符(共6个)

@  $  #  (也可分别用X’7C’  X’5B’ 和 X’7B’表示)

(5) EBCDIC 可打印字符集

一般语句格式规范 :

分别是标识符区、名字区、操作符区、参数区和说明区.

名字区后必须跟一个或多个空格,可以选择名字表达出这个JCL语句的作用。下面给出几个正确与错误的名字区的例子:

正确的                                 错误的

//Z                                           //9Z

//BACKUP#1                         //TAPEBACKUP

//#99                                       //TEST*9

//$EXAM                               //EXAM(0)

 

操作符区位于名字区之后,规定了语句的类型:JOB、EXEC、DD、PROC、PEND,或操作员命令。

名字区后必须跟一个或多个空格。例如:

//EXAMPLE  JOB

//STEP1  EXEC

//INDD1  DD

 

参数区在操作符区之后,其中包括被逗号分隔的参数,参数由事先规定好的关键字组成,对于这些参数其数值必须是可被代换的变值。参数区没有固定的长度及列的要求。例如:

//EXAMPLE  JOB  2000,CLASS=A

//STEP1  EXEC  PGM=IEYFORT

//PRINT  DD  SYSOUT=A

说明区位于参数区后,用于对相应语句进行注释说明,它可以是任何需要的说明信息,注释区后必须跟一空格。需要注意的是,仅当参数出现时才能书写说明信息,不然容易与参数混淆。

//EXAMPLE  JOB  ,CLASS=A  IT IS A COMMENT

 

JCL只允许在参数区和说明区有续行,当需要续行时,在当前行的第71列前必须将某个参数或某个子参数以及参数后的逗号写完整,且下一行第1、2列为“//”,第3列为空格,续行的内容只能从4~16列开始,如从16列后开始,将被认为是注释语句。

//DATA  DD  DSN=SYS1。FORTLIB,

//  DISP=OLD

 

参数规则

在JCL中,参数区内的参数的类型分为两类:

(1)位置参数(positional):与其他参数保持相对位置的参数;

(2)关键字参数(keyword):由一个关键字和等号后面的可变数据组成。

如果在一个语句内既有位置参数又有关键字参数时,所有的关键字参数必须位于位置参数之后。例:

//EXAMPLE  JOB  2000, CLASS=A

位置参数  关键字参数

JCL语法实例

作业语句   //EXPJOB  JOB  ,’USERNAME’,MSGLEVEL=(1,1),   EXAMPLE

作业语句续行 //  MSGCLASS=Q,CLASS=A

//**********************

注释语句      //*  IT IS A EXAMPLE  *

//**********************

执行语句      //STEP1  EXEC  PGM=IEFBR14

DD语句         //DD1  DD    DSN=MJSN.TEAM01.ONE,DISP=(,CATLG),

DD语句续行 //  SPACE=(TRK,(5,2)), UNIT=SYSDA

DD语句         // DD1  DD    DSN=MJSN.TEAM01.TWO,DISP=(,KEEP),

DD语句续行 //  SPACE=(TRK,(1,1)), UNIT=SYSDA

 

JOB语句

JOB语句标志一个作业的开始、分配作业名并设置相关的位置参数及关键字参数,每个作业的第一个语句必须是JOB语句。

JOB语句的格式如下:

//作业名 JOB  位置参数[,关键字参数][,关键字参数]。。。[注释说明]

JOB语句中的关键字参数有如下几个:

1.ADDRSPC 作业所需之存贮类型

2.  BYTES  打印作业的系统输出数据集的最大千字节数

3. CLASS 参数规定了作业的类别 用字母A~Z及数字0~9表示 4.MSGCLASS  用于为作业日志(job log)设置输出类别。

//EXMP1  JOB  ,GEORGE,MSGCLASS=F

5.MSGLEVEL

用于控制JCL作业输出清单的内容

6.NOTIFY

用于请求系统在后台作业处理完毕时给指定用户发送信息。

7.PRTY

用于为相应的输入队列中的作业分配优先级。

8.REGION

用于指定作业所需的实存或虚存空间的大小,系统将在该作业中的每一作业步使用该值。

9.TIME

用于指定作业占用处理器的最长时间并可通过一些信息得知该作业占用处理器的时间。

10.TYPRUN

用于请求特殊的作业处理。

COND、GROUP、PASSWORD、PERFORM、RD、RESTART、SECLABEL、USER…

EXEC语句

EXEC语句标明作业或过程中的每一作业步的开始,并告知系统如何执行该作业步。

EXEC语句格式如下:

//[作业步名]  EXEC  位置参数[,关键字参数]…[符号参数=值]… [注释]

EXEC语句中的位置参数有两个:PGM和PROC。

每条EXEC语句必须有且仅有一个位置参数或过程名.

格式:

PGM={program-name}

{*.stepname.ddname}

{*.stepname.procstepname.ddname}

//JOBC   JOB  ,JOHN,MSGCLASS=H

//STEP2  EXEC  PGM=UPDT

//DDA   DD  DSNAME=SYS1.LINKLIB(P40),DISP=OLD

//STEP3  EXEC  PGM=*.STEP2.DDA

在上例中,名为STEP3的EXEC语句采用程序间接调用方式,所调用的程序名由作业步STEP2中的名为DDA的DD语句决定,在该DD语句中定义了系统库SYS1.LINKLIB,程序P40是该库的一个成员。“P40”即STEP3中要调用执行的程序名.

PROC 指明作业步所要运行的过程名。

格式:

{PROC=procedure-name}

{procedure-name      }

procedure-name:需要调用的过程名,过程名由1~8个字母或通配符开头的字符数字构成。所调用的过程名可以是:

·编目过程的成员名或别名。

·由PROC语句定义的流内过程的过程名,该流内过程必须在本作业内且本作业步前定义。

在设定该参数时,可直接写出过程名。

例:

//SP  EXEC  PROC=PAYWRKS

//BK EXEC  OPERATE

EXEC语句的关键字参数

关键字参数.过程步名=值

1.ACCT 作业步所需的一个或多个记账信息子参数

ACCT[.过程步名]=(记账信息)

例: //STP3  EXEC  PROC=LOOKUP,ACCT=(‘/83468’)

2.ADDRSPC作业步所需之存贮类型,它有两个子参数:VIRT及REAL

例:

//CAC1  EXEC  PGM=A,ADDRSPC=VIRT

//CAC2  EXEC  PROC=B,ADDRSPC=REAL,REGION=100K

REGION

作业步所需的实存或虚存空间的大小,系统仅在本作业步中使用该值。

REGION[.过程步名]={valueK}

={valueM}

例:

//MKBOYLE  EXEC  PROC=A,REGION=100K,ADDRSPC=REAL

//STEP6   EXEC  PGM=CONT,REGION=250K

TIME

用于指定作业步占用处理器的最长时间,并可通过作业输出清单得知该作业步占用处理器的时间

TIME[.过程步名]={([minutes][,seconds])}

={1440               }

={NOLIMIT     }

={MAXIMUM  }

值得注意的是:在JOB语句中不可设置TIME=0,而在EXEC语句中则可以设置TIME=0,当TIME=0时表示本作业步的执行时间由前面作业步的剩余执行时间决定。

COND

用于对先前作业步执行的返回码(return code)进行测试,以决定是否执行本作业步。

格式:

(1)COND[.过程步名]=(code,operator)

(2)COND[.过程步名]=((code,operator[,作业步名][,过程步名])

[,(code,operator[,作业步名][,过程步名])]…[,EVEN])

[,ONLY]

(3)COND=EVEN

COND=ONLY

//STEP6  EXEC  PGM=DISKUTIL,COND=(4,GT,STEP3)

在本例中如果STEP3的返回码小于4,系统将不执行STEP6。由于没有设置EVEN或ONLY,如果先前的作业步异常终止,系统将不会执行本作业步。

 

//TEST2  EXEC  PGM=DUMPINT,COND=(16,GE),(90,LE,STEP1),ONLY)

由于设置了ONLY子参数,系统只在以下两种情况满足时执行本作业步:

(1)先前作业步异常终止;

(2)返回值的测试条件都不满足。

那么对于本例来说,系统将会在以下三种情况都满足的情况下执行本作业步:

·一个先前作业步异常终止。

·所有先前作业步的返回码大于等于17。

·STEP1的返回码小于等于89。

PARM

用于向本作业步执行的程序传递变量信息。该程序必须有相应的指令接收这些信息,并使用它们。

格式:

PARM[.过程步名]= 子参数

PARM[.过程步名]=( 子参数, 子参数)

PARM[.过程步名]=(‘子参数’, 子参数)

PARM[.过程步名]=’子参数, 子参数’

括所有的逗号、撇号以及括号在内,所有子参数的总长度不得超过100个字符。当某子参数中含有特殊字符或空格时,可以将该子参数用撇号括起来,在其它子参数一起用括号括起来,或将所有在参数用撇号括起来。

子参数:包含传递给程序的变量信息。

例1.

//RUN3  EXEC  PGM=APG22,PARM=’P1,123,P2=5’

在本例中,系统将参数P1、123及P2=5传递给程序APG22。

例2.

// STP6  EXEC  PROC=ASFCLG,PARM.LKED=(MAP,LET)

在本例中系统将MAP、LET传递到过程ASFCLG中名为LKED的过程步。

DD语句

数据定义语句(DD语句)用于定义一个数据集以及该数据集所需的输入输出资源。

格式:

//[dd名        ]   DD  [位置参数][,关键字参数]… [注释]

[过程步名.dd名]

//[dd名        ]   DD

[过程步名.dd名]

DD语句的参数也分为位置参数及关键字参数,这些参数都是可选的。每个DD语句只能有一个位置参数,但根据需要可以有个关键字参数。位置参数有“*”、“DATA”和“DUMMY”。

参数“*”

参数“*”用于开始一个流内数据集。数据记录跟在“DD ”语句之后,其第一、二列不能是“//”或“/*”;该记录可以是任何编码,如EDCBIC。下列符号表明流内数据记录的结束:

·输入流中的“/*”。

·表示另一个JCL语句开始的“//”。

当数据记录中需以“//”开始时,就必须使用DATA参数来代替“*”参数。

DATA

用作一个流内数据集的开始,该流内数据集里含有以“//”开头的语句。数据记录紧跟在“DD DATA”语句之后;该数据记录可以是BCD或EDCBIC编码。数据记录将以“/*”作为结束。

格式:

//dd名  DD  DATA[,参数]… [注释]

DUMMY

DUMMY参数用于标明:

(1)没有设备或外存空间分配给该数据集。

(2) 对该数据集不进行状态处理。

(3) 对BASM或QSAM来说,不对该数据集作输入输出操作。

用户使用DUMMY参数对程序进行测试。当测试完成时,如果用户希望恢复对数据集的输入输出操作时,只需将DD  DUMMY参数替换成完整的数据集定义DD语句。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值