test
é apenas um comando, então sua expressão é analisada da mesma forma que os argumentos de qualquer outro comando - significando que parênteses, canais, etc. devem ser escapados ou citados para funcionar (e para evitar problemas com isso, test
usa -o
em vez de ||
). Se você está realmente usando o bash, ele tem uma expressão [[ ]]
test que evita essas esquisitices.
Além disso, sua lógica de expressão está desativada. Você reporta o erro se o usuário atual não é mpurcell ou não é root; desde que o usuário atual não pode ser ambos, ele sempre irá errar. Tenho certeza que você quer um e lá.
Por fim, como você tem a parte echo ...; exit 1
entre parênteses, ela será executada em uma subshell e, portanto, o comando exit
sairá da subshell, não do script. Para evitar isso, use { ... }
em vez de parênteses.
Aqui está uma versão bash:
[[ $(whoami) != 'mpurcell' && $(whoami) != 'root' ]] && { echo "Cannot start script as non-ccast user..."; exit 1; }
E aqui está uma versão que deve funcionar em um shell POSIX genérico:
test "$(whoami)" != 'mpurcell' -a "$(whoami)" \!= 'root' && { echo "Cannot start script as non-ccast user..."; exit 1; }