1. O que é REXX e onde ele roda

O REXX foi criado por Mike Cowlishaw na IBM em 1979 e se tornou a linguagem de scripting padrão de vários sistemas IBM. No z/OS ele roda em três contextos principais:

  • TSO interativo — você digita EXEC meu.rexx na linha de comando do ISPF e o exec roda imediatamente, podendo interagir com o usuário via SAY/PULL.
  • Batch (IKJEFT01) — o exec roda dentro de um job JCL, sem interação humana, ideal para automação agendada.
  • ISPF Dialogs — execs chamados de dentro de menus ISPF via ISPEXEC, com acesso a serviços de tela, variáveis de pool e datasets.

🦕 Analogia — REXX como Python ou Bash do mainframe

Se você já usou Python ou Bash para automatizar tarefas no Linux, vai se sentir em casa com REXX. A ideia é a mesma: em vez de escrever um programa compilado (COBOL = Java no Linux), você escreve um script interpretado que pode chamar comandos do sistema, processar texto e tomar decisões. REXX é o scripting moderno que o mainframe tinha desde os anos 80.

2. REXX vs CLIST

Antes do REXX, o mainframe tinha as CLISTs (Command Lists) — a linguagem de scripting original do TSO. As CLISTs ainda existem em muitas instalações, mas o REXX é claramente superior em quase todos os aspectos:

CaracterísticaREXXCLIST
SintaxeLimpa, similar a linguagens modernasVerbosa, cheia de &símbolos
Tratamento de stringsExcelente — funções ricasLimitado
DebugTRACE para diagnósticoDifícil
PortabilidadeRoda em z/OS, z/VM, PCApenas TSO
PerformanceMelhorMais lento
LegadoPadrão atualCódigo legado

Se você encontrar código com &VARIAVEL e PROC no início, é CLIST. Se o arquivo começa com um comentário /* */, é REXX. Aprenda REXX — CLISTs existem para manter sistemas antigos.

3. Seu primeiro REXX exec

Um exec REXX é um arquivo de texto salvo como membro de um PDS (geralmente com RECFM=FB, LRECL=80). A primeira linha obrigatoriamente deve ser um comentário REXX — isso é o que o interpretador usa para identificar que o arquivo é REXX:

/* REXX - Meu primeiro exec */ SAY 'Olá, mainframe!' SAY 'Hoje é: ' DATE() SAY 'Hora: ' TIME() EXIT 0

Linha a linha:

  • /* REXX ... */ — comentário obrigatório na linha 1. Sem ele, o TSO não reconhece o arquivo como REXX.
  • SAY — imprime uma linha de texto no terminal (ou SYSTSPRT em batch).
  • DATE() e TIME() — funções built-in que retornam data e hora atuais.
  • EXIT 0 — encerra o exec com return code 0. Opcional, mas boa prática.

4. Como executar um REXX

No TSO interativo (ISPF opção 6)

/* Na command line da opção 6 do ISPF: */ ==> EXEC 'USUARIO.MEUS.REXX(OLAREX)' /* Se o PDS estiver no SYSEXEC/SYSPROC, só o nome: */ ==> EXEC OLAREX /* Ou ainda mais curto — se configurado: */ ==> %OLAREX

Em batch (IKJEFT01)

//REXXJOB JOB (CONTA),'LADY COBOL',CLASS=A,MSGCLASS=X //REXXSTEP EXEC PGM=IKJEFT01 //SYSEXEC DD DSN=USUARIO.MEUS.REXX,DISP=SHR /* onde estão os execs */ //SYSTSPRT DD SYSOUT=* /* saída dos SAY */ //SYSTSIN DD * EXEC OLAREX /*

💡 SYSEXEC vs SYSPROC

O z/OS procura execs REXX no DD SYSEXEC e CLISTs no SYSPROC. Se ambos forem alocados, o SYSEXEC tem prioridade para REXX. Em muitas instalações, o SYSEXEC já aponta para as bibliotecas de sistema — você só precisa adicionar o seu PDS na concatenação para que seus execs sejam encontrados pelo nome simples.

5. Estrutura de um exec REXX

Um exec REXX bem organizado segue esta sequência:

/* REXX - Descrição do que o exec faz */ /* Autor: Seu Nome Data: 2026-06-17 */ /* 1. Receber parâmetros */ ARG parametro1 parametro2 /* 2. Lógica principal */ IF parametro1 = '' THEN DO SAY 'Uso: EXEC MEUEXEC PARAM1 PARAM2' EXIT 8 END SAY 'Processando:' parametro1 /* Chamar subrotinas */ CALL ProcessarDados parametro1 EXIT 0 /* ── Subrotina ──────────────────────────────────── */ ProcessarDados: PARSE ARG dado SAY 'Dado recebido:' dado RETURN

✅ REXX é case-insensitive para palavras-chave

As palavras-chave do REXX (SAY, IF, DO, END, EXIT) podem ser escritas em maiúsculo ou minúsculo — say, Say, SAY são equivalentes. Variáveis, no entanto, são convertidas automaticamente para maiúsculo quando você usa ARG ou PULL, então por convenção escreva nomes de variáveis em maiúsculo para evitar surpresas.