如果条件不能在unix中工作

时间:2017-12-15 09:38:00

标签: shell unix

我使用下面的if条件在我的脚本中执行某些任务,但事实并非如此 按预期工作。有人可以告诉我,如果我错了。

if [ `whoami` != 'user1' ]|[ `whoami` != 'user2' ]; then
  echo "Must run this script as user1 or user2."
  exit
else
  do something 
fi

2 个答案:

答案 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某处。