我正在编写一个 bash 脚本来在不同环境中重新启动多个 apache 实例。它工作正常,除了我想添加一些逻辑以确保只输入正确的参数。我已经以多种方式尝试了以下声明,但我没有任何运气。有什么建议么?
if [[ $ENVT != qa || $ENVT != qa2 || $ENVT != stageqa || $ENVT != stage ]];
then
usage
fi
当我使用舞台环境时,它正在评估第一个选项并调用该函数,而不是像set -x
打开时那样进行迭代。
+ ENVT=stage
+ ACTION=stop
+ USER=www
+ '[' 2 -ne 2 ']'
+ [[ stage != qa ]]
+ usage
答案1
if
在这种情况下,您不应使用多个条件,case
而是使用:
case "$ENVT" in
(qa|qa2|stageqa|stage) ;;
(*) usage ;;
esac
答案2
我预计质量保证,质量保证2等等假的更复杂测试的值。如果它们是真实的价值观,@Gnouc的解决方案是好多了明显地。
我将把这个答案留在这里,以获得与原始示例语法相关的教育价值。
您可能需要一个“and”与“!=”一起使用。
然后,您不应该将许多表达式或运算符链接在一起,而是使用像这样的单独测试(它与引号相关):
if [[ a1 != b1 ]] && [[ a2 != b2 ]] && [[ a3 != b3 ]] ...
就像是:
if [[ "$ENVT" != qa ]] && [[ "$ENVT" != qa2 ]] && [[ "$ENVT" != stageqa ]] && [[ "$ENVT" != stage ]];
then
usage
fi
如您所见,我在变量周围添加了引号。这在双 [[ ]] 内部并不是绝对必要的,但几乎在其他任何地方,例如在 [ ] 中,它们都非常相似。习惯总是引用已经够难的了,所以我就保留引用。