如何在Shell脚本中检查条件是否多次?

时间:2018-07-30 11:08:34

标签: linux bash shell sh

我正在创建一个shell脚本,该脚本检查在另一台计算机上运行的服务的状态,如果没有得到任何响应,则只能在本地系统上执行某些操作。我正在脚本中使用if子句来完成此任务。

有时由于网络连接,它错误地假定远程服务器没有响应,并执行if子句中提到的任务。我想设置一个重试,以便在第一次尝试未找到任何响应时检查条件是否不止一次。

是否有任何方法可以为此目的在shell脚本中设置类似的重试?

下面是示例代码

RSI1_STATUS=$(psql -U username -h serverip -d postgres -t -c "select version();" )


if [ -z "$RSI1_STATUS" ]  #Condition will be true if remote server is not active
then    
   touch /tmp/postgresql.trigger       
fi

现在,我想在第一次尝试中是否多次检查该条件。

1 个答案:

答案 0 :(得分:2)

您可以使用while循环添加具有多个重试次数的重试循环:

retries=5
while ! check_network_connection && ((--retries)); do
    sleep 1 # or probe the network, etc.
done

if [[ $retries -eq 0 ]]; then
    echo "Error: Connection retries exhausted."
else
   # connection succeeded.
fi

您要睡觉还是做其他事情取决于您的使用情况和应用程序。

注意:在循环中检查后,“网络连接”可能已经成功。因此,如果retries为0,则不一定表示连接仍然​​断开。