如果失败则 Bash 嵌套

如果失败则 Bash 嵌套

我正在尝试执行一个 while 循环,迭代 10 次以重试 2 个连续命令;

基本上;

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

但我似乎无法正确嵌套它以获得所需的结果,即:尝试一个命令,如果失败,请尝试第二个命令。依次尝试这 2 个命令 10 次。如果任一命令在任何时候成功,则中断

答案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

使用定义为的两个命令进行测试

command1 () {
    r=$((RANDOM%10))
    if ((r)) ; then
        return 1
    else
        return 0
    fi
}

相关内容