0

我正在尝试编写一个脚本,一开始它仅在用户是以下之一时运行:彼得,保罗,西蒙:

我愿意:

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 `;'

有小费吗?或者更好,更好的方法来做到这一点?

谢谢

4

2 回答 2

6

您忘记在末尾添加空格:

... != simon ]]

此外,如果您可以考虑使用扩展的 glob,则可以像这样更简单:

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
于 2013-09-04T20:31:59.183 回答
3

konsolebox对空格字符的回答是正确的 before ]]

但是,如果您不想弄乱扩展的 glob,则可以使用 regexp:

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

甚至

if [[ $USER =~ ^(peter|paul|simon)$ ]]; then
于 2013-09-04T20:38:28.083 回答