1. Введение в JCL: структура, синтаксис и основные правила написания кода
Введение в JCL: структура, синтаксис и основные правила написания кода
Добро пожаловать в курс «Основы JCL для начинающих». Если вы решили погрузиться в мир мейнфреймов (Mainframes) и операционной системы z/OS, то первое, с чем вам предстоит столкнуться — это JCL. Это не просто «еще один язык программирования», это ключ к управлению мощнейшими вычислительными машинами в мире.
В этой первой статье мы разберем фундамент: что такое JCL, зачем он нужен, почему он выглядит именно так (спойлер: виноваты перфокарты) и как написать свой первый корректный код.
Что такое JCL и зачем он нужен?
JCL расшифровывается как Job Control Language (Язык Управления Заданиями). Важно сразу понять главное отличие: JCL — это не язык программирования в привычном смысле, как Python, Java или C++. Вы не пишете на нем алгоритмы, циклы for или сложную бизнес-логику.
JCL — это скриптовый язык, который служит «посредником» между вашей программой и операционной системой мейнфрейма (z/OS). Он говорит системе:
> Представьте, что мейнфрейм — это огромная кухня ресторана, а операционная система — шеф-повар. Программы — это рецепты. А JCL — это заказной чек (тике́т), который официант передает на кухню. В чеке написано: «Столик №5 (JOB), приготовить стейк (EXEC), используя мясо из холодильника №2 (DD)». Без этого чека кухня не узнает, что ей делать, даже если рецепты идеальны.
Наследие перфокарт: правило 80 колонок
Когда вы впервые видите код JCL, он может показаться архаичным. Причина кроется в истории. JCL создавался в эпоху, когда основным носителем информации были перфокарты. Стандартная перфокарта имела 80 колонок в ширину.
Хотя физические перфокарты давно исчезли, структура JCL в z/OS до сих пор строго привязана к этому формату. Каждая строка кода JCL — это виртуальная перфокарта длиной в 80 символов.
Структура строки JCL
Строка JCL делится на строго определенные поля. Нарушение границ этих полей приведет к ошибке JCL Error, и ваше задание не запустится.
Рассмотрим анатомию строки:
| Поле | Колонки | Описание |
| :--- | :--- | :--- |
| Identifier (Идентификатор) | 1-2 | Почти всегда это два слеша //. Они говорят системе: «Это строка JCL». |
| Name (Имя) | 3-10 | Имя задания, шага или файла. Должно начинаться с 3-й колонки. |
| Operation (Операция) | 11+ | Команда, которую нужно выполнить (например, JOB, EXEC, DD). |
| Parameter (Параметры) | После операции | Аргументы для команды. Отделяются от операции пробелом. |
| Comments (Комментарии) | После параметров | Необязательный текст для пояснения кода, отделяется пробелом. |
| Sequence (Нумерация) | 73-80 | Исторически использовалось для нумерации карт. Сейчас обычно игнорируется системой, но писать код здесь нельзя. |
!Визуализация структуры строки JCL с разметкой по колонкам.
Три кита JCL: JOB, EXEC, DD
Любое задание (Job) в JCL строится на трех основных операторах. Если вы запомните их, вы поймете 90% логики любого JCL-скрипта.
1. JOB (Задание)
Это «паспорт» вашего задания. ОператорJOB всегда идет первым. Он сообщает системе имя задания, информацию о владельце, бухгалтерские данные и глобальные настройки.Пример:
* MYJOB01 — имя задания.
* JOB — операция.
* Остальное — параметры (номер счета, имя программиста, класс выполнения).
2. EXEC (Выполнение)
Это команда «На старт!». ОператорEXEC (Execute) указывает, какую именно программу или процедуру нужно запустить.Пример:
* STEP1 — имя шага (Step name).
* EXEC — операция.
* PGM=IEFBR14 — параметр, указывающий имя программы (в данном случае это системная «пустышка», которая ничего не делает, но полезна для тестов).
3. DD (Определение данных)
Это связующее звено.DD (Data Definition) связывает внутреннее имя файла, которое использует программа, с реальным физическим файлом (датасетом) на диске или ленте.Пример:
* DD1 — имя, которое ищет программа внутри своего кода.
* DD — операция.
* DSN=... — реальное имя файла в системе.
Синтаксис и правила написания
JCL очень чувствителен к синтаксису. Одна лишняя запятая или пробел могут «уронить» задание. Вот свод основных правил, которые нужно выучить наизусть.
1. Идентификатор //
Все исполняемые строки JCL обязаны начинаться с // в колонках 1 и 2. Исключение составляют только данные внутри потока (in-stream data), но об этом мы поговорим в следующих статьях.2. Имена (Name Field)
* Имя должно начинаться строго в колонке 3. * Длина имени: от 1 до 8 символов. * Допустимые символы: A-Z, 0-9 и национальные символы (@, #, $). * Первый символ не может быть цифрой.3. Пробелы имеют значение
В JCL пробел — это разделитель полей. * Между именем и операцией должен быть хотя бы один пробел. * Между операцией и параметрами должен быть хотя бы один пробел. * ВНИМАНИЕ: Если вы случайно поставите пробел внутри списка параметров, система посчитает, что параметры закончились и дальше идет комментарий.Неправильно:
(Здесь пробел после запятой перед PARM приведет к ошибке или игнорированию параметра PARM, так как система сочтет его комментарием).
Правильно:
4. Комментарии
Чтобы оставить заметку для себя или коллег, используйте строку, начинающуюся с//* в колонках 1-3.Также можно писать комментарии в конце исполняемой строки, отделив их пробелом от последнего параметра.
5. Перенос строки (Continuation)
Часто параметры не помещаются в одну строку (помните про ограничение до 71-й колонки, так как 72-80 часто резервируются). Чтобы перенести код на следующую строку:,.// в колонках 1-2.Пример переноса:
Параметры: Позиционные и Ключевые
В поле операндов параметры делятся на два типа:
JOB первым часто идет информация о бухгалтерии, а вторым — имя программиста.КЛЮЧ=ЗНАЧЕНИЕ. CLASS=A, PGM=IEFBR14, DSN=MY.FILE.Пример простейшего задания (Hello World)
Давайте соберем всё вместе и напишем валидный JCL код. Поскольку в JCL нет команды `print(