JP1/Advanced Shell

[目次][用語][索引][前へ][次へ]


5.2.1 制御文

JP1/Advanced Shellは,次に示す制御文を使用できます。詳細については,「9.5 スクリプト制御文」を参照してください。

制御文の次に示す個所に,コマンド置換,またはスクリプト拡張コマンドを除く任意のコマンドを指定できます。

コマンド置換を指定できる個所
  • case文の式およびパターン
  • for文のwordlist

コマンド置換,またはスクリプト拡張コマンドを除く任意のコマンドを指定できる個所
  • if文の条件1(ifの後ろの条件),および条件2(elifの後ろの条件)
  • until文の条件
  • while文の条件

指定した任意のコマンドの終了コードは,ジョブおよびジョブステップの終了コードに反映されません。制御文の実行が完了した時点でのジョブおよびジョブステップの終了コードは制御文のブロック内で最後に実行されたコマンドの終了コードになります。

ただし,次の条件のどれかに該当する場合は,指定した任意のコマンドの終了コードは,ジョブおよびジョブステップの終了コードに反映されます。ジョブステップが完了した時点でのジョブおよびジョブステップの終了コードは,指定したコマンドの終了コードになります。

  1. 指定したコマンドがコマンド置換ではなく,exitコマンドまたはreturnコマンドである場合
  2. 指定したコマンドがコマンド置換ではなく,特殊組み込みコマンドであり,かつエラーとなった場合
  3. 指定した1.,2.以外のコマンドがエラーとなり,かつ制御文がonError属性にstopを指定したジョブステップ内であった場合

JP1/AJSでジョブをエラーとしたい場合など,エラーとなったコマンドの終了コードをジョブの終了コードに反映したい場合は,onError属性にstopを指定したジョブステップ内に制御文を記述してください。

if文での例を次に示します。

例1
if `cmd true`  ←cmdは存在しないコマンド名
then
 echo "true"
else
 echo "false" ←else節が実行される
fi
# この時点でのジョブの終了コードは0となる

上記の例1で,if文の条件1に指定したコマンド置換のcmdが存在しないコマンド名の場合,条件が偽と見なされelse節の「echo "false"」が実行されます。このとき,if文が完了した時点でのジョブの終了コードは0になります。

例2
#-adsh_step_start S1 -onError stop
if `cmd true`      ←cmdは存在しないコマンド名
then
 echo "true"
else
 echo "false"
fi
#-adsh_step_end    ←then節もelse節も実行しないでジョブステップ中断
# ジョブステップS1,およびこの時点でのジョブの終了コードは127となる

上記の例2で,if文の条件1に指定したコマンド置換のcmdが存在しないコマンド名の場合,if文のthen節とelse節のどちらも実行しないでジョブステップの実行を中断します。このとき,ジョブステップが完了した時点でのジョブの終了コードは,指定したコマンドが存在しないことを示す127になります。ジョブステップの定義,およびonError属性については,「9.4 スクリプト拡張コマンド」の「#-adsh_step_start コマンド,#-adsh_step_error コマンド,#-adsh_step_end コマンド(ジョブステップを定義する)」を参照してください。

[目次][前へ][次へ]


[他社商品名称に関する表示]

All Rights Reserved. Copyright (C) 2011, 2012, Hitachi, Ltd.