以下は、JCLもQiitaも初心者が記載する自分のメモ
はじめに
 【JCL(Job Control Language) = ジョブ制御言語】とは
    メインフレームという大型の汎用機にて使用される
   OSにCOBOL(コボル)  やPL/I(ピーエルワン)などの
   プログラムの実行、そのプログラムが必要とする
   入出力の設定等指示する言語です。
このメモは、JCLの基本的な記載方法のまとめです。
①基本的な文法
サンプルJCL(基本的な文法)
  1・・・ //TESTJOB  JOB MSGCLASS=H
  2・・・ //STEP01   EXEC PGM=TESTPGM
  3・・・ //INPUT    DD DSN=TESTDATA,DISP=SHR
  4・・・ //SYSOUT   DD SYSOUT=*
(1) IDフィールド(1桁目~2桁目に記載)
基本的にはIDフィールドは「//」。
(2) 名前フィールド(3桁目~11桁目に記載)
 以下で紹介するJCLのステートメントの名前等を記載する。
 サンプルでいうと
  1・・・「TESTJOB(ジョブの名前)」と
  2・・・「STEP01(ステップ名)」の部分
(3) 命令フィールド(名前フィールドの後に記載)
 ステートメントを記載する。
 サンプルでいうと
  1・・・「JOB」と
  2・・・「EXEC」の部分
(4) パラメータフィールド(命令フィールドの後に記載)
 ステートメントのパラメータを記載する。
 サンプルでいうと
  1・・・「MSGCLASS=H」と
  2・・・「PGM=TESTPGM」の部分
②ジョブの定義(JOBステートメント)
 JOBステートメントは、ジョブの定義を行う。
 ジョブの名前や以下の、アカウント情報・CLASS・MSGCLASS・MSGLEVEL・LINES・TYPRUN・NOTIFY などを指定。
サンプルJCL(ジョブ名)
  //TESTJOB  JOB,MSGCLASS=H
・__TESTJOB__はジョブの名前
   1.  1~8文字の英数字または各国用文字 (#@¥)など
サンプルJCL(アカウント情報)
  //TESTJOB1 JOB(ACCTINFO,SUBAINFO),PROGRAMMER,MSGCLASS=H
・アカウント情報
   1.  (ACCTINFO,SUBAINFO)  省略可能な業務識別情報(所属など)
  2.  PROGRAMMER  省略可能なプログラマ名(作成者など)
サンプルJCL(CLASS)
  //TESTJOB2 JOB CLASS=A,MSGCLASS=H
・CLASS=class
   1.  ジョブに実行ジョブクラスを割り当てる指定できます。
   2.  A~Z,0~9の一桁の文字で指定(Z/OS V2R1以降の場合 2~8文字のクラス、ジョブ、グループ名で指定が可能)
※ジョブクラスは、ジョブの用途などで決められている。
サンプルJCL(MSGCLASS)
  //TESTJOB3 JOB CLASS=A,MSGCLASS=H
・MSGCLASS=class
   1.  ジョブログの出力クラスを指定できます。
  2.  A~Z,0~9の一桁の文字で指定
  ※ジョブログ(JCLステートメント、割り振りメッセージ、終了メッセージ)
  ※終了メッセージ ジョブの終了時に行われるデータセットの後始末処理について知らせるために出力
  例「
   IEF237IALLOC.FOR JCL001 ASM STEP01
     ・
     ・
   IEF237I JCL001 ASM STEP01 -STEP WAS EXECTED - COND CODE 0000
   」
  ※割り振りメッセージ OSがジョブの制御のために確保したデータセット資源をユーザに知らせるために出力
  例「
   IEF237I SYS1.MACLIB				KEEP
   IEF237I VOL SER = MVSRES
     ・
     ・
   IEF285I JES2.JOB00721.S00102			SYSOUT
   」
サンプルJCL(MSGLEVEL)
  //TESTJOB4 JOB CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1)
・MSGLEVEL=(0~2,0~1)
   1.  ジョブログに出力される内容を指定する。
   2.  一つ目は0~2の一桁の文字で、入力JCLの印刷範囲を指定
         0:JCL中のJOBステートメントのみ出力
         1:すべてのJOBステートメントを出力
         2:入力JCL中に記述されたステートメントのみ出力
   3.  二つ目は0~1の一桁の文字で、割り振り状況の出力有無
         0:異常終了時のみメッセージを出力
         1:正常終了時もメッセージを出力
サンプルJCL(LINES)
  //TESTJOB5 JOB CLASS=A,MSGCLASS=H,LINES=(10,CANCEL)
・LINES=(nnnnnn,CANCEL)
   1.    SYSOUTデータセットの最大値を、千行単位で指定します。
   2.    CANCELオプションを指定すると、ジョブの実行を打ち切る。
   3.    上記の場合は、一万行を超えると、ジョブは異常終了する
サンプルJCL(TYPRUN)
  //TESTJOB6 JOB CLASS=A,MSGCLASS=H,TYPRUN=HOLD
・TYPRUN=HOLD or SCAN or COPY or JCLHOLD
ジョブの特殊処理を指定する。
   1.  HOLD(保留) オペレータがジョブを解放するまで、そのジョブは実行されないで待ち行列に保留されるように指示。
   2.  SCAN 構文の誤りを見つけるためにJCLステートメントを操作するだけで実行はしないことを指示。
   3.  COPY(JES2のみ) 入力ジョブストリームを SYSOUT データセットにコピーする。
   4.  JCLHOLD(JES2のみ) 構文の誤りを見つけるためにJCLステートメントを操作するだけで実行はしないことを指示。保留が解かれたら構文チェックするため、サブミット時点のプロシージャの内容で実行されるとは限らない。
※ジョブストリーム 実行される一連のジョブと、処理順序を決める時刻、優先順位、その他の依存関係のことです。
 ※SYSOUTデータセット(プログラムの実行結果などを格納する特別なスプール内のデータ)
  詳細は参考文献:サイト様の「SYSOUTデータセットとは」を参照。
サンプルJCL(PRTY)
  //PRESRPT OUTPUT PRTY=200,FORMS=TOPSEC
・PRTY=nnn   (nnn 優先順位)
   1.  ジョブクラス内での選択優先順位を指定する
   2.  初期の優先順位を指定します。nnn は、0 から 255 までの 10 進数です。
    0 が最も低い優先順位で、255 が最高です。
    この例では、JES は、社長の報告書 (PRESRPT) のコピーを 1 つ、TOPSEC という
   名前の用紙に印刷します。優先順位を 200 と指定したので、報告書はおそらく出力
   キューに入ると即座に印刷されます。
サンプルJCL(NOTIFY)
  //TESTJOB7 JOB CLASS=A,MSGCLASS=H,NOTIFY=USERNAME
・NOTIFY=user  (userはログオンID)
ジョブの完了時に、完了メッセージをユーザのTSO端末に送るように指示します。
userの部分に&SYSUIDを指定し、SUBMITするとそのJOBの実行ユーザにメッセージが送られる
  ※サブミット(JCLをリーダINTRDR:Internal reader = 内部読み取りプログラムへ投入することでジョブがスケジュールされる)
  詳細は参考文献:サイト様の「INTRDR」を参照。
 
  ※TSO端末(Time Sharing Option)IBMによるMVS(OS)対応の主要開発環境マネージャ。
  詳細は参考文献:サイト様の「11.TSOとISPF」を参照。  
③ステップの定義(EXECステートメント)
 ジョブステップの始まりを示します。(またはプロシージャー内の各ステップ)
 一つのJOBに対して複数のEXECステートメントを記述することができます。
 EXECステートメントは、ジョブステップの定義を行う。
 ステップ名や以下の、PGM・PROC・・・・・・・などを指定。
  ※プロシージャは、処理の単位(ある特定の処理を行うための一連の命令)
  ※ストリーム内プロシージャ(同じジョブ内で繰り返し実行されるステップを定義したもの)
  ※カタログ式プロシージャ(複数のジョブで共有されるプロシージャが独立したメンバー)
サンプルJCL(ステップ名)
  //STEP02   EXEC PGM=PGMNAME
・STEP02  は  ステップ名
   1.  1~8文字の英数字または各国用文字 (#@¥)など
サンプルJCL(PGM)
  //STEP03   EXEC PGM=PGMNAME
・PGM=PGMNAME  は  プログラム名
   1.  ステップで実行するプログラムのロードモジュール名を指定する。
サンプルJCL(PROC)
  //STEP04   EXEC PROC=IBMZC
・PROC=IBMZC  は  プロシージャ名
   1.  ステップで実行するプロシージャー名を指定する。
サンプルJCL(JOBLIB)
  //TESTJOB8 JOB CLASS=A,MSGCLASS=H
  //JOBLIB   DD DISP=SHR,DSN=TESTDATA.ALOAD
  //STEP05   EXEC PGM=TESTPGM1
・JOBLIB  は  ジョブ全体で使用するライブラリーを指定するDD
   1.  定義する場所は、JOBステートメントの後 かつ EXECステートメントの前に定義する。
サンプルJCL(STEPLIB)
  //TESTJOB8 JOB CLASS=A,MSGCLASS=H
  //JOBLIB   DD DISP=SHR,DSN=TESTDATA.ALOAD
  //STEP06   EXEC PGM=TESTPGM2
  //STEP07   EXEC PGM=TESTPGM3
  //STEPLIB  DD DISP=SHR,DSN=TESTDATA.SLOAD
・STEPLIB  は  このステップだけで使用するライブラリーを指定するDD
   1.  定義する場所は、EXECステートメントの後に定義する。
   2.  JOBLIBとSTEPLIBが両方指定された場合は、STEPLIBだけが使用される。
   (上記の場合は
    STEP06のPGM0002は、STEPLIBがないので、JOBLIBのTESTDATA.ALOAD
    STEP07のPGM0003は、STEPLIBのTESTDATA.ALOAD が参照される
    )
サンプルJCL(JCLLIB)
  //TESTJOB9 JOB CLASS=A,MSGCLASS=H
  //         JCLLIB ORDER=(TESTDATA.1LIB,
                TESTDATA.2LIB,TESTDATA.3LIB)
  //JOBLIB   DD DISP=SHR,DSN=TESTDATA.ALOAD
  //*
  //STEP08   EXEC PROC1
・JCLLIB ORDER=(TESTDATA.1LIB,TESTDATA.2LIB,TESTDATA.3LIB)
   1.  PROCパラメータで指定した、プロシージャがカタログ式プロシージャの場合、プロシージャメンバーが格納されているデータセットを定義
   2.  定義する場所は、JOBステートメントの後 かつ EXECステートメントの前に定義する。
※//* 注釈ステートメント(出力リストにコメントを記述するために使用します)
サンプルJCL(PARM)
  //STEP09   EXEC PGM=TESTPGM,PARM=ABCDEFG
・PARM=ABCDEFG
   1.  PGMで指定したプログラムに渡す可変情報を指定(引数)
サンプルJCL(PARMMD)
  //STEP10   EXEC PGM=TESTPGM,PARMMD=PROGPARM
  //PROGPARM DD *
  AAA ~ BBB
  CCC ~ DDD
   ZZZ(100文字以上)
  /*
・PARMMD=PROGPARM
   1.  パラメータ文字列が100文字を超える場合は、任意のDD名の順次データセットを組み合わせる(Z/OS V2R1以降の場合)
※/* 区切りステートメント(入力ストリーム内のデータの末尾または転送レコードの終わりを示すために使用します)
サンプルJCL(COND=(コード,演算子))
  //STEP11   EXEC PGM=TESTPGM,COND=(0,NE)
   1.  ステップの実行をスキップする条件を指定
・COND=(コード,演算子)
   2.  復帰コード(ジョブステップが終了したあとにOSによって戻される、実行結果)
   3.  演算子
  EQ :コードが、復帰コードに等しい(コード=復帰コード)
  NE :コードが、復帰コードに等しくない(コード!
=復帰コード)
  GT :コードが、復帰コードにより大きい(コード>復帰コード)
  GE :コードが、復帰コードにより大きい または 等しい(コード>=復帰コード)
  LT :コードが、復帰コードにより小さい(コード<復帰コード)
  LE :コードが、復帰コードにより小さい または 等しい(コード<=復帰コード)
上記の場合は、先行ステップの復帰コードがゼロでない場合は、STEP11は実行されない。
サンプルJCL(COND=(コード,演算子,ステップ名))
  //STEP12   EXEC PGM=TESTPGM,COND=(4,LT,STEP22)
・COND=(コード,演算子,ステップ名)
   上記の場合は、コード(4)がSTEP22の復帰コード  より
         小さい場合は、STEP12は実行されない。
      ( STEP22の復帰コード が 4なら
                STEP12は実行される
            STEP22の復帰コード が 5,6なら
                STEP12は実行されない  )
  //         IF STEP22.RC <= 4 THEN
  //STEP12   EXEC PGM=TESTPGM
  //         ENDIF
・IF/THEN/ELSE/ENDIF ステートメント構文
   上記の場合は、STEP22の復帰コード が4以下の場合は、
       THEN~ENDIF間のステップ(STEP12)を実行する。
サンプルJCL(COND 特殊なパラメータ)
  //STEP12   EXEC PGM=TESTPGM,COND=EVEN,PARM=0
 ※特殊なパラメータ
・COND=EVEN・・・先行するステップが異常終了した場合でも、ジョブステップを実行する。
・COND=ONLY・・・先行するステップが異常終了した場合のみ、ジョブステップを実行する。
サンプルJCL(REGION)
  //STEP13   EXEC PGM=TESTPGM,REGION=120K
・REGION=値
   1.  プログラムを実行するのに使用するメモリーを指定
     上記の場合は、120K バイトの領域を割り当てます。
サンプルJCL(MEMLIMIT)
  //STEP14   EXEC PGM=TESTPGM,MEMLIMIT=10000M
・MEMLIMIT=値
   1.  このジョブステップは、2 GB を超える
      64ビット仮想ストレージの利用限度を指定する。
     上記の場合は10000M バイトと指定しています。(Z/OS V2R1以降の場合)
サンプルJCL(TIME)
  //STEP15   EXEC PGM=TESTPGM,TIME=(12,10)
・TIME=値
   1.  ジョブがCPUを使用できる最大の時間を指定する。
   2.  上記の場合は 12分 10 秒であると指定しています。
      次回:JCL記載方法まとめ 【初心者編】2
   https://qiita.com/nano357/items/39ae7edaf31bbe1b3619
参考文献
JCL関連情報サイト様
   https://arteceed.squares.net/
   http://yfuku.sakura.ne.jp/mvs/mvsindex.html
   http://superbassist.fc2web.com/hp2/study/jcl/jclb.html
MVS JCL 解説書 - IBM Documentation:正式な構文等は以下を参照
   https://www.ibm.com/docs/ja/zos/2.3.0?topic=SSLTBW_2.3.0/com.ibm.zos.v2r3.ieab600/toc.htm
原典:日本アイ・ビー・エム株式会社
GC28-1757-00
OS/390 MVS JCL Reference
(一部改変)
OS/VS2 MVS JCL
(一部改変)
