我使用下面的if条件在我的脚本中执行某些任务,但事实并非如此 按预期工作。有人可以告诉我,如果我错了。
if [ `whoami` != 'user1' ]|[ `whoami` != 'user2' ]; then
echo "Must run this script as user1 or user2."
exit
else
do something
fi
答案 0 :(得分:2)
[ `whoami` != 'user1' ]|[ `whoami` != 'user2' ]
所以你正在使用[
测试命令,它返回true或false并且没有输出,然后管道空输出到另一个 [
测试。
管道的返回状态只是 last 命令的结果。所以,这相当于
[ `whoami` != 'user2' ]
你想要的可能是
[ (`whoami` != 'user1') -a (`whoami` != 'user2') ]
这是一个带有布尔和的测试命令。
(您的代码看起来更像是逻辑或,但它与程序逻辑不匹配。)
运行whoami
两次似乎没必要 - 该值可能已经在$USER
,但如果您不想信任,那么您可能会将代码重构为
case $(whoami) in
user1|user2) ;; # OK - continue below esac
*) echo "Must run this script as user1 or user2."
exit ;;
esac
# do something
答案 1 :(得分:0)
使用-a
("用户不是user1,用户不是user2")来组合这两个条件:
if [ `whoami` != 'user1' -a `whoami` != 'user2' ]; then
有关详细信息,请参阅man test
。请注意,test
a.k.a。[
内置于bash shell中,而不是单独的二进制文件,因此它也被隐藏在man bash
某处。