使用带有 or 的 if 语句来验证 shell 脚本的参数

DFr*_*esh 3 bash shell-script

我正在编写一个 bash 脚本来在不同环境中重新启动多个 apache 实例。它工作正常,除了我想添加一些逻辑以确保只输入正确的参数。我已经以多种方式尝试了以下声明,但我没有任何运气。有什么建议么?

if [[ $ENVT != qa || $ENVT != qa2 || $ENVT != stageqa || $ENVT != stage ]];
  then
    usage
fi
Run Code Online (Sandbox Code Playgroud)

当我使用舞台环境时,它正在评估第一个选项并调用该函数,而不是像打开时那样进行迭代set -x

+ ENVT=stage
+ ACTION=stop
+ USER=www
+ '[' 2 -ne 2 ']'
+ [[ stage != qa ]]
+ usage
Run Code Online (Sandbox Code Playgroud)

cuo*_*glm 6

在这种情况下,您不应使用多个if条件,case而是使用:

case "$ENVT" in
  (qa|qa2|stageqa|stage) ;;
  (*) usage ;;
esac
Run Code Online (Sandbox Code Playgroud)