首页 > 解决方案 > 在不退出脚本的情况下中断循环(bash)

问题描述

我想运行一个循环来遍历用户列表并在两个检查都通过时执行一个操作。每个检查都写成一个函数,根据检查是否通过,返回是或否。现在我把它设置成这样:

for User in Users
 do
   check_1
   check_2
   if [[ check_1 = yes ]] && [[ check_2 = yes ]]
   then
      perform some function
   fi
done

我想将每个检查保留为一个函数,而不是将它们显式地写入 for 循环,因为它们非常冗长,并且会形成一个非常讨厌的 ifs、fors 和 while 嵌套。我想知道是否有某种方法可以取消 if 语句,以便每次检查如果通过则继续执行该函数,如果不通过则继续执行下一个用户,这样代码就会像这样运行;

for user in users
 do
    check_1
    check_2
    some_function
 done

直觉上我觉得这是更好的代码风格。我对么?这可行吗?有没有更好的办法?

编辑:我正在结束这个问题,因为它似乎是由于对 bash 的根本误解造成的。抱歉,已经有一段时间了。

标签: bashloops

解决方案


假设check_1,check_2等是在失败时返回非零状态的命令;ERR 陷阱可能会有所帮助。例如:

trap continue ERR

for user in users; do
    check_1
    check_2
    ...
done

trap - ERR

推荐阅读