2つの連続したコマンドを再試行するために10回繰り返すwhileループを実行しようとしています。
元;
retries=10
while ((retries > 0)); do
if ! command; then
if ! other_command; then
echo "Failed to start service - retrying ${retries}"
else
echo "Started service successfully"
break
fi
fi
((retries --))
if ((retries == 0 )); then
echo "service failed to start!"
fi
done
しかし、目的の結果を得るために正しく入れ子にすることはできないようです。つまり、1つのコマンドを試して失敗した場合は、2番目のコマンドを試してください。これら2つのコマンドを順番に10回試してみてください。いつでも2つのコマンドのいずれかが成功した場合
答え1
ネストされたifは必要ないので、break
これを防ぐのに役立ちます。基本的に説明した通りです。
#! /bin/bash
retries=10
while ((retries)) ; do
if command1 ; then
break
elif command2 ; then
break
fi
((--retries))
done
if ((!retries)) ; then
echo 'Service failed to start!' >&2
fi
次のように定義された2つのコマンドを使用してテストします。
command1 () {
r=$((RANDOM%10))
if ((r)) ; then
return 1
else
return 0
fi
}