根据多个值检查bash变量

时间:2015-03-17 14:47:51

标签: bash shell variables scripting

我想在Bash脚本中检查输入参数。可以有很多组合,所以我决定使用这样的结构:

if  ( [[ "$2" = "(PARAM1|PARAM2|PARAM3)" && "$3" = "(PARAM11|PARAM22|PARAM33)" ]] )

我希望这一行会检查指定的参数(可以有PARAM1 PARAM22PARAM11 PARAM3等输入组合。)。

但它不起作用。我应该使用数组还是只需要尝试其他语法?

1 个答案:

答案 0 :(得分:2)

您可能需要重新阅读bash手册页的"复合命令"和"有条件的表达" (每页的封面)。你的问题将条件放在子shell中,这是不必要的。

如果要将参数($2$3等)与正则表达式匹配,可以使用如下格式:

if [[ $2 =~ ^(foo|bar)$ ]]; then
   ...
fi

或者:

if [[ $2 =~ ^(foo|bar)$ ]] && [[ $3 =~ ^(baz|flarn)$ ]]; then
   ...
fi

那就是说,正则表达式在这里真的不需要。正则表达式使用比简单模式匹配更多的CPU。我可以使用case语句来处理这个问题:

case "$2" in
  foo|bar)
    case "$3" in
      glurb|splat)
      # do something
      ;;
    esac
    ;;
  baz)
    # do something else
    ;;
esac

处理参数的确切方式取决于您实际需要使用的内容,而这些内容并未在您的问题中分享。如果您更新问题以包含更多详细信息,我们很乐意更新此答案。 :)