色々詰まったdo-whileループ

スクリプト例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
declare -i RETRY_OUT
declare -i RETRY=0
declare -a JOBS=("job1" "job2" "job3")

for JOB_NAME in ${JOBS[@]}
do
RETRY=0
$( ${JOB_NAME} )

while [※JOB実行結果チェック※] || [ ${RETRY} -le ${RETRY_OUT} ]
do
RETRY=$(( RETRY+1 ))
$( ${JOB_NAME} )
done

if [ ${RETRY} -ge ${RETRY_OUT} ]; then
echo "RETRY OUT!!!"
fi
done

ポイント1: bashにdo-whileはない

bashにはdo-whileはない。色々書き方はあるがここではシンプルに2回書いている。

ポイント2: 変数をIntegerとして宣言する

数値として扱うためにdeclare -iでカウンタを宣言している。
数値として宣言したものは-ge-leの数値比較が可能。

ポイント3: 配列操作

複数のジョブを実行する例で配列にジョブ名を入れている。
配列はdeclare -aで宣言し、使用するときは[@]を付けて使用する。

ポイント4: 数値のインクリメント

インクリメントで変数++のような表記はできない。
RETRY=$(( RETRY+1 ))のように記述する。