失敗した場合の Bash ネスト

失敗した場合の Bash ネスト

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
}

関連情報