检查字符串是以下之一

时间:2013-09-04 20:30:28

标签: bash unix

我正在尝试编写一个脚本,在开始时它只在用户是以下之一时运行:Peter,Paul,Simon:

我做:

if [[ "$(whoami)" != peter && "$(whoami)" != paul && "$(whoami)" != simon]]; then
    echo -e "\nPlease run this script as someone who is allowed" >&2
    exit 1
fi

我明白了:

syntax error in conditional expression: unexpected token `;'

任何提示?或者更好的是,这是一个更好的方法吗?

由于

2 个答案:

答案 0 :(得分:6)

你忘了在最后添加一个空格:

... != simon ]]

另外,如果你可以考虑使用扩展的globs,你可以这样简单:

shopt -s extglob
if [[ $(whoami) != @(peter|paul|simon) ]]; then

还有一种老式但POSIX兼容的方式:

case $(whoami) in
peter|paul|simon)
    ;;
*)
    echo -e "\nPlease run this script as someone who is allowed" >&2
    exit 1
    ;;
esac

答案 1 :(得分:3)

关于]]之前的空格字符,

konsolebox's answer是正确的。

但是如果你不想搞乱扩展的globs,你可以使用regexp:

if [[ $(whoami) =~ ^(peter|paul|simon)$ ]]; then

甚至

if [[ $USER =~ ^(peter|paul|simon)$ ]]; then