9.5.9 #-adsh_step_startコマンド,#-adsh_step_errorコマンド,#-adsh_step_endコマンド(ジョブステップを定義する)
形式
#-adsh_step_start [ジョブステップ名] [-successRC 終了コード定義[,終了コード定義 ...]] [-stepVar シェル変数名[,シェル変数名 ...]] [-run{normal|abnormal|always}] [-onError{cont|stop}] ... ジョブステップ内の処理...(ジョブステップ正常ブロック) [#-adsh_step_error] [... ジョブステップエラー時の処理...(ジョブステップエラーブロック)] #-adsh_step_end
機能
ジョブ定義スクリプトの一部分を,ジョブステップとしてグループ化します。ジョブステップとは,グループ化した一まとまりのコマンド群のことです。ジョブステップの定義は,それぞれ4,095個まで指定できます。
ジョブステップの使用方法については,「5.8.3 ジョブステップを定義する」を参照してください。
ジョブステップ内で実行するコマンドの正常・エラーの判定については,「5.8.8 ジョブ,ジョブステップおよびコマンドの終了コード」を参照してください。
ジョブステップ内でエラーが発生した場合の動作については,「5.8.10 ジョブ実行中にエラーが発生した場合の動作」を参照してください。
引数
- ジョブステップ名
~<環境変数名>((1~31バイト))
ジョブステップを識別する情報の1つであるジョブステップ名を定義します。ジョブステップ名はジョブ実行ログなどにメッセージとして表示されるほか,JP1/Advanced Shellが作成するファイル名の一部にも使用されます。
ジョブステップ名は,ジョブ内で重複できます。
- -successRC 終了コード定義[,終了コード定義]...
ジョブステップ正常ブロック内で実行するコマンドが正常終了したと見なす,コマンドの終了コードの値を定義します。定義を「,」で区切って複数指定した場合,どれかの定義を満たした場合に正常終了と見なします。
ただし,ステップ正常ブロック内で実行するコマンドがシグナル終了した場合は,この指定に関係なく,コマンドはエラー終了となります。
ステップ正常ブロック内で実行するコマンドが,successRC属性で定義したコマンドの終了コードに該当しない終了コードを返している場合でも,#-adsh_rc_ignoreコマンドで指定したコマンド名に該当すれば,successRC属性の指定値に関係なく#-adsh_rc_ignoreコマンドの指定が優先されます。
- 終了コード定義
~<符号なし整数>((0~255))
終了コード定義は8個まで指定できます。
・終了コード
終了コードに合致する場合,正常終了します。
・終了コード1:終了コード2
終了コード1以上,終了コード2以下の場合,正常終了します。
・終了コード:
終了コード以上の場合,正常終了します。
・:終了コード
終了コード以下の場合,正常終了します。
- -stepVar シェル変数名[,シェル変数名 ...]
ジョブステップ内だけで有効なシェル変数を宣言します。シェル変数名は,コンマで区切って32個まで指定できます。
シェル変数名
~<環境変数名>((1~255バイト))
ジョブステップ内だけで有効なシェル変数の名称を指定します。ただし,関数情報配列の名称,およびシェル変数ADSH_RC_EXTERNALは指定できません。
- -run{normal|abnormal|always}
先行ジョブステップや先行ジョブ定義スクリプト中のコマンドの状態によって,そのジョブステップを実行するかどうかを定義します。指定が省略されている場合,normalが指定されたものとします。
normal
先行ジョブステップの中にエラー終了したジョブステップが存在しない場合,または先行ジョブ定義スクリプト中にエラー終了したコマンドが存在しない場合,実行します。
abnormal
先行ジョブステップの中にエラー終了したジョブステップが存在する場合,または先行ジョブ定義スクリプト中にエラー終了したコマンドが存在する場合,実行します。
always
先行ジョブステップや先行ジョブ定義スクリプト中のコマンドの結果に関係なく,常に実行します。
- -onError{cont|stop}
ジョブステップ正常ブロック内のコマンドがエラー終了したとき,ジョブステップ正常ブロック内の後続ジョブ定義スクリプトを実行しないでジョブステップエラーブロックへジャンプするか,ジョブステップ正常ブロック内の後続ジョブ定義スクリプトを実行するかを定義します。指定が省略されている場合,stopが指定されたものとします。
cont
ジョブステップ正常ブロック内の後続ジョブ定義スクリプトを実行します。
stop
ジョブステップ正常ブロック内の後続ジョブ定義スクリプトを実行しないで,ジョブステップエラーブロック内のジョブ定義スクリプトを実行します。
終了コード
- #-adsh_step_start,#-adsh_step_errorの場合
-
終了コード
意味
0
正常終了
1
エラー終了
- #-adsh_step_endの場合
-
終了コード
意味
ジョブステップ正常ブロック内で最後に終了したコマンドの終了コード
ジョブステップ正常終了
ジョブステップエラー終了
exitコマンドの引数
ジョブステップエラーブロック内で引数を指定したexitコマンドを実行して終了
1
#-adsh_step_end自身のエラー終了
- 注
#-adsh_step_endコマンドのジョブステップ正常終了およびジョブステップエラー終了の終了コードは,環境設定パラメーターで変更できません。
注意事項
ジョブステップを制御文(if,for,while,until,case)のブロック内に記述する場合は,#-adsh_step_startから#-adsh_step_endまでを同一ブロック内に記述してください。記述しなかった場合は,実行前に文法エラーとなります。
for文,while文,until文のブロック内に,ジョブステップを定義しないでください。これらのブロック内に外部スクリプト展開がある場合,外部スクリプトにジョブステップを含むこともできません。含んだ場合,実行前に文法エラーとなります。
if文,case文のブロック内にはジョブステップを定義できます。ただし,run属性にabnormalまたはalwaysを指定できません。
ジョブステップ内にジョブステップを定義できません。
#-adsh_rc_ignoreコマンドなどを使用して,ジョブステップ正常ブロックで最後に実行したコマンドが0以外で正常終了した場合,ジョブステップが正常終了してもジョブステップの終了コードが0以外となることがあります。
ジョブ定義スクリプト
#-adsh_rc_ignore cmdA #-adsh_step_start S1 -onError cont cmdA #rc=4となるコマンド cmdA #rc=4となるコマンド #-adsh_step_end
実行ログ
KNAX6117-I コマンド(/home/hitachi/bin/cmdA, 行番号=3)が終了しました。rc=4 E-Time=0.001s C-Time=0.000s KNAX6117-I コマンド(/home/hitachi/bin/cmdA, 行番号=4)が終了しました。rc=4 E-Time=0.001s C-Time=0.000s KNAX6597-I ADSH152256.S1 ジョブステップが正常終了しました。rc=4 E-Time=0.004s C-Time=0.000s
KNAX6584-Iメッセージを出力してバッチジョブを中断する場合,最後に実行したコマンドに対しては,successRC属性の指定は有効になりません。
ジョブステップ正常ブロック内およびジョブステップエラーブロック内に関数を定義した場合,ジョブステップがrun属性によってスキップされても,定義した関数を使用できます。
-
CMDRC_CMDGRP_CHECKパラメータの指定によって,関数と関数内のコマンドのエラー判定およびsuccessRC属性の定義は次のようになります。
CMDRC_CMDGRP_CHECKパラメータの指定
対象
定義可否
詳細
FUNCTION
関数
○
関数の終了コードとsuccessRC属性の定義に従い,ジョブステップのエラー判定をします。
関数内のコマンド
×
関数内のコマンドの終了コードに従いジョブステップのエラー判定はされないで,常に正常終了したと見なされるため,ジョブステップのエラー判定とsuccessRC属性の定義の対象外となります。
NONEまたはパラメータの指定なし
関数
×
関数の終了コードに従いジョブステップのエラー判定はされないため,ジョブステップのエラー判定とsuccessRC属性の定義の対象外となります。
関数内のコマンド
○
関数内のコマンドの終了コードとsuccessRC属性の定義に従い,ジョブステップのエラー判定をします。
- (凡例)
-
○:対象が正常終了したと見なす終了コードの値をsuccessRC属性によって定義できる。
×:対象が正常終了したと見なす終了コードの値をsuccessRC属性によって定義できない。
使用例
if制御文のブロック内に#-adsh_step_startを指定し,対応する#-adsh_step_endをブロックの外に指定するとエラーになります。
if [[ $a = $b ]]; then #-adsh_step_start S1 fi #-adsh_step_end
while制御文のブロック内に,ジョブステップを定義するとエラーになります。
while [[ $a = $b ]] do #-adsh_step_start S1 #-adsh_step_end done
if制御文のブロック内には,ジョブステップを定義できます。
if [[ $a = $b ]]; then #-adsh_step_start S1 #-adsh_step_end fi