首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash:在FOR循环中突破IF循环

Bash:在FOR循环中突破IF循环
EN

Stack Overflow用户
提问于 2014-04-23 01:33:10
回答 1查看 3.6K关注 0票数 1

我正在尝试合并一个FOR循环(在IP地址上迭代)和一个IF循环(在继续之前使用nc来检查ssh连接是否成功)。

我有一个包含IP地址的数组${INSTANCE_IPS@} (目前它包含2个IP地址)。以下是代码:

代码语言:javascript
复制
while [ $ITERATION -le 30 ]
do
    for instance in ${INSTANCE_IPS[@]}
    do    
        nc -w 2 $instance 22 > /dev/null
            if [ $? -eq 0 ]
            then echo "connection succeeded to $instance"
            else
                ITERATION=$((ITERATION+1))
                echo ITERATION=$ITERATION
                echo "[info] connection to $instance unsuccessful. trying again. iteration=$ITERATION"
                sleep 20
            fi
    done
done

IF循环中的“works”语句工作良好。这是“当时”的陈述,我对此有异议.当连接成功后,我不知道如何摆脱IF循环。下面是我运行上述命令时的一个示例输出:

代码语言:javascript
复制
connection succeeded to 10.11.143.171
connection succeeded to 10.11.143.170
connection succeeded to 10.11.143.171
connection succeeded to 10.11.143.170
connection succeeded to 10.11.143.171
connection succeeded to 10.11.143.170

如果我在break之后使用then echo "connection succeeded to $instance,那么它只遍历一个IP地址,永远不会出现如下情况:

代码语言:javascript
复制
connection succeeded to 10.11.143.171
connection succeeded to 10.11.143.171
connection succeeded to 10.11.143.171

理想情况下,我认为最好的方法是查询数组中的元素数,然后执行netcat连接--某个值增加1,直到它等于数组中的元素数,但我真的不知道如何点这个值。

如果你需要更多的信息,请告诉我。

干杯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-23 01:43:20

重新制定你的逻辑。如果某件事情成功了,你就不能崩溃,因为你不知道另一个项目是否会失败。

相反,保留一个标记,说明您是否成功地完成了所有这些操作,如果有什么失败,则将其设置为false。在这一点上,你也可以休息和等待。

代码语言:javascript
复制
ITERATION=0
all_succeeded=false
while [ "$all_succeeded" = "false" -a $ITERATION -le 30 ]
do
    all_succeeded=true
    for instance in ${INSTANCE_IPS[@]}
    do    
        nc -w 2 $instance 22 > /dev/null
        if [ $? -eq 0 ]
        then 
          echo "connection succeeded to $instance"
        else
          all_succeeded=false
          echo "[info] connection to $instance unsuccessful."
          sleep 20
          break
        fi
    done
    let ITERATION++
done

if [ "$all_succeeded" = "true" ]
then
  echo "It worked"
else
  echo "Giving up"
fi
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23233274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档