0

最初は、ユーザーが次のいずれかである場合にのみ実行されるスクリプトを作成しようとしています: 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 `;'

任意のヒント?それとも、これを行うためのより良い方法ですか?

ありがとう

4

2 に答える 2

6

最後にスペースを追加するのを忘れました:

... != simon ]]

また、拡張グロブの使用を検討できる場合は、次のように簡単にすることができます。

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の答えは、前のスペース文字について正しい]]です。

しかし、拡張グロブをいじりたくない場合は、正規表現を使用できます。

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

あるいは

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