5.2.1 制御文
JP1/Advanced Shellは,次に示す制御文を使用できます。詳細については,「9.6 スクリプト制御文」を参照してください。
-
case
文字列の内容に応じて,幾つかある処理のうち,1つを実行します。
-
for
値を順次変化させながら,同じ処理を繰り返し実行します。
-
if
条件に合わせて分岐することで,各条件に沿った処理を実行します。
-
until
条件が成立するまで,同じ処理を繰り返し実行します。
-
while
条件が成立している間,同じ処理を繰り返し実行します。
制御文の次に示す個所に,コマンド置換,またはスクリプト拡張コマンドを除く任意のコマンドを指定できます。
- コマンド置換を指定できる個所
-
-
case文の式およびパターン
-
for文のwordlist
-
- コマンド置換,またはスクリプト拡張コマンドを除く任意のコマンドを指定できる個所
-
-
if文の条件1(ifの後ろの条件),および条件2(elifの後ろの条件)
-
until文の条件
-
while文の条件
-
指定した任意のコマンドの終了コードは,ジョブおよびジョブステップの終了コードに反映されません。制御文の実行が完了した時点でのジョブおよびジョブステップの終了コードは制御文のブロック内で最後に実行されたコマンドの終了コードになります。
ただし,次の条件のどれかに該当する場合は,指定した任意のコマンドの終了コードは,ジョブおよびジョブステップの終了コードに反映されます。ジョブステップが完了した時点でのジョブおよびジョブステップの終了コードは,指定したコマンドの終了コードになります。
-
指定したコマンドがコマンド置換ではなく,exitコマンドまたはreturnコマンドである場合
-
指定したコマンドがコマンド置換ではなく,特殊組み込みコマンドであり,かつエラーとなった場合
-
指定した1.,2.以外のコマンドがエラーとなり,かつ制御文がonError属性にstopを指定したジョブステップ内であった場合
JP1/AJSでジョブをエラーとしたい場合など,エラーとなったコマンドの終了コードをジョブの終了コードに反映したい場合は,onError属性にstopを指定したジョブステップ内に制御文を記述してください。
if文での例を次に示します。
- 例1
if `cmdA true` ←cmdAは存在しないコマンド名 then echo "true" else echo "false" ←else節が実行される fi # この時点でのジョブの終了コードは0となる
上記の例1で,if文の条件1に指定したコマンド置換のcmdAが存在しないコマンド名の場合,条件が偽と見なされelse節の「echo "false"」が実行されます。このとき,if文が完了した時点でのジョブの終了コードは0になります。
- 例2
#-adsh_step_start S1 -onError stop if `cmdA true` ←cmdAは存在しないコマンド名 then echo "true" else echo "false" fi #-adsh_step_end ←then節もelse節も実行しないでジョブステップ中断 # ジョブステップS1,およびこの時点でのジョブの終了コードは127となる
上記の例2で,if文の条件1に指定したコマンド置換のcmdAが存在しないコマンド名の場合,if文のthen節とelse節のどちらも実行しないでジョブステップの実行を中断します。このとき,ジョブステップが完了した時点でのジョブの終了コードは,指定したコマンドが存在しないことを示す127になります。ジョブステップの定義,およびonError属性については,「9.5 スクリプト拡張コマンド」の「#-adsh_step_start コマンド,#-adsh_step_error コマンド,#-adsh_step_end コマンド(ジョブステップを定義する)」を参照してください。