REXXプログラミング入門③
REXXプログラミングにおける条件付き終了と外部コマンドの実行結果の取得は、多くの実践的なシナリオで非常に役立ちます。この演習では、外部コマンドの実行結果に基づいてプログラムの流れを制御し、特定の条件が満たされた場合にプログラムを終了させる方法を学びます。
演習3: 条件付き終了
この演習の目標は、特定の外部コマンドを実行し、その結果として特定のメッセージが検出された場合にプログラムを終了するREXXスクリプトを作成することです。
スクリプトの内容
以下は、指定された条件下でプログラムを終了させるREXXスクリプトの例です。
/* REXX */
OPTIONS EXMODE
TRACE R
ADDRESS TSO "ADDRESS NETVASIS"
CMD = 'S JR1,D=''MYLIB.MYDATASET(MYMEMBER)'''
SAY CMD
CALL OUTTRAP 'cmdout.','*'
CALL ADDRESS TSO CMD
CALL OUTTRAP 'OFF'
found = 0
DO i = 1 TO cmdout.0
IF POS('IEF404I MYMEMBER', cmdout.i) > 0 | POS('IEF450I MYMEMBER', cmdout.i) > 0 THEN DO
found = 1
LEAVE
END
END
IF found = 0 THEN
SAY '*** MYPROG3 TIMEOUT ***'
EXIT
スクリプトの解説
-
CALL OUTTRAP 'cmdout.','*'
: この命令は、外部コマンドの実行結果をcmdout.
ステム変数に捕捉します。これにより、後で結果を解析することができます。 -
CALL ADDRESS TSO CMD
: 指定された外部コマンドを実行します。 -
DO i = 1 TO cmdout.0
: このループは、外部コマンドからの出力を解析し、特定のメッセージが含まれているかどうかをチェックします。 -
IF POS('IEF404I MYMEMBER', cmdout.i) > 0 | POS('IEF450I MYMEMBER', cmdout.i) > 0 THEN DO
: 特定のメッセージが検出された場合、found
変数を設定し、ループから脱出します。 -
IF found = 0 THEN SAY '*** MYPROG3 TIMEOUT ***'
: 特定のメッセージが検出されなかった場合、タイムアウトメッセージを表示します。
実行方法
このスクリプトをメインフレーム上でREXXプログラムとして実行します。スクリプトは外部コマンドを実行し、その結果を監視して、特定のメッセージが出力されたかどうかを確認します。
まとめ
この演習では、REXXプログラミングにおける重要な概念である外部コマンドの実行と結果の取得、条件付き処理の実装方法を学びました。これらのスキルは、実際のシステム管理や自動化タスクで非常に役立ちます。