Bash:循环重试

时间:2017-08-29 21:56:35

标签: bash

我有一个bash脚本,用于设置一堆配置文件并以块

结束
set -xe

restart_app () {
        sudo stop myapp
        sleep 10
        sudo start myapp
}
restart_app

for i in {1..10};
do
        status=$(curl -Is localhost:3001 | head -1 | awk '{print $2}') # returns 200
        if [ -z "$status" ];then
                restart_myapp
        else
                :
        fi
done

这使我可以转到status并使用UI。但由于某种原因,应用程序有时dsnt start我想将它包装在一个排序循环中。这就是我所做的:

find
如果应用程序启动,

begin将返回200。如果不是,它什么也不返回。但是我的脚本dsnt完全退出并继续进行10次尝试。

1 个答案:

答案 0 :(得分:2)

  

然而,我的脚本dsnt完全退出并继续进行10次尝试。

您需要在for中摆脱else循环:

for i in {1..10};
do
        status=$(curl -Is localhost:3001 | awk 'NR==1{print $2; exit}')
        if [[ -z "$status" ]];then
                restart_myapp
        else
                break
        fi
done

此处不需要head,因为awk可以为第一条记录设置条件NR==1