首页 > 解决方案 > 在这种情况下,Bash 多个 if else 条件

问题描述

我需要检查哪个条件失败。有没有更好的方法来做到这一点?如何用更少的代码行重构代码?如果/其他条件可能是一个班轮?

flag1=0
flag2=0
flag3=0
flag4=0
success=0
FAIL=""

if (( 2==2 ))
then
flag1=1
fi

# check if anything is 0
if (( $flag1==1 ))
then
    FAIL="flag1"
elif (( $flag2==1 ))
then
    FAIL="flag2"
elif (( $flag3==1 ))
then
    FAIL="flag3"
elif (( $flag4==1 ))
then
    FAIL="flag4"
fi;

echo failed is $FAIL

标签: bash

解决方案


您可以迭代标志的名称并使用间接参数扩展来测试每个标志的值。用于break在测试成功后停止测试。

FAIL=""

for f in flag1 flag2 flag3 flag4; do
  (( ${!f:-1} == 1 )) && FAIL=$f && break
done

推荐阅读