Bash

如果失敗則嵌套 Bash

  • November 4, 2022

我正在嘗試做一個迭代 10 次以重試 2 個連續命令的 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

但我似乎無法正確嵌套它以獲得所需的結果,即;嘗試一個命令,如果失敗,請嘗試第二個命令。嘗試這 2 個命令,一個接一個地嘗試 10 次。如果任一命令在任何時候都成功,則中斷

您不需要嵌套 ifs,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
}

引用自:https://unix.stackexchange.com/questions/723683