在继续前进之前检查所有IF条件。 (多个条件,BASH)

时间:2016-06-27 23:25:07

标签: bash if-statement multiple-conditions

这就是我所拥有的。我被迫使用后续命令是否有匹配。我希望尽可能避免这种情况。

if [[ ${USER} == "user1" || "user2" || "user3" || "user4" ]]; then
     echo "user matches."
else
     echo "${USER} Does not match configured users."
     exit 1
fi

有没有办法在后续命令中翻转语法退出?这看起来更干净,减少了行数。这里的问题是,它会在第一个真实条件下退出。那么也许可以在前进之前检查所有条件?

if [[ ${USER} != "user1" || "user2" || "user3" || "user4" ]]; then
     echo "${USER} Does not match configured users."
     exit 1
fi

以下更新 我最终使用了正则表达式的以下IF语句。的!将语句更改为“不匹配”。

if ! [[ ${USER} =~ ^user1|user2|user3|user4$ ]]; then
     log "${USER} Does not match configured users."
     exit 1
fi

使用变量进行扩展:

USERS="user1|user2|user3|user4"

if ! [[ ${USER} =~ ^${USERS}$ ]]; then
     log "${USER} Does not match configured users."
     exit 1
fi

2 个答案:

答案 0 :(得分:3)

我不认为If语句正在做你认为的事情;

例如

 $ if [[ "a" == "b" || "c" ]] ; then echo y; else echo n; fi
 y

因为(“a”==“b”)为假,但没有条件的“c”为真 因此false || truetrue 但是,我很确定你认为它是假的“n”

改为使用像这样的case语句;

case "${USER}" in
 "user1" | "user2" | "user3" | "user4")
     echo "user matches."
     ;;
 *)
     echo "${USER} Does not match configured users."
     exit 1 ;;
esac

答案 1 :(得分:-1)

翻转语法,如果我理解你的问题,你可以通过使用“!”来否定你想“翻转”的条件。操作

示例:

BigTable[1][0][0] = TableB[0][0]

但它可以通过连接AND完成,用“&&”表示的bash。

例:

if ! [[ ${USER} == "user1" || "user2" || "user3" || "user4" ]]; then