[ `whoami` != 'user1' ]|[ `whoami` != 'user2' ]
so verwenden Sie den [
Test-Befehl, der wahr oder falsch zurückgibt und keine Leistung abgibt, und dann Rohrleitungen die leere Ausgabe andere[
Test.
Der Rückgabestatus einer Pipeline ist nur das Ergebnis des Befehls letzten. Also, das ist äquivalent zu
[ `whoami` != 'user2' ]
Was wollten Sie war vielleicht
[ (`whoami` != 'user1') -a (`whoami` != 'user2') ]
, die ein einzelner Test-Befehl mit einem boolean und.
(Ihr Code sieht mehr, wie es eine logische oder sein sollte, aber das ist nicht die Programmlogik übereinstimmt).
Lauf whoami
zweimal scheint nicht notwendig - der Wert bereits in $USER
sein kann, aber wenn Sie wollen, dass nicht vertrauen, könnten Sie wahrscheinlich Ihren Code in so etwas wie
case $(whoami) in
user1|user2) ;; # OK - continue below esac
*) echo "Must run this script as user1 or user2."
exit ;;
esac
# do something
Refactoring Ich bin ziemlich sicher, dass OP Boolean UND statt OR wollte. Sonst kann dies niemals falsch werden. – Thomas
Ja, ich lese gerade die Frage neu und erkannte, dass ich von der Annahme, dass '|' als '||' gedacht war, ausging. – Useless