这就是我所拥有的。我被迫使用后续命令是否有匹配。我希望尽可能避免这种情况。
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
答案 0 :(得分:3)
我不认为If语句正在做你认为的事情;
例如
$ if [[ "a" == "b" || "c" ]] ; then echo y; else echo n; fi
y
因为(“a”==“b”)为假,但没有条件的“c”为真
因此false || true
是true
但是,我很确定你认为它是假的“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