2013-06-23 18 views

回答

2

试试这个:

who=`whoami` 
if [ $who != "root" ]; then 
    exit 5 
else 
+0

反引用'whoami';) –

+0

确实,感谢您纠正@gniourf_gniourf。编辑修复它。当我写这篇文章的时候,我还看到你编辑了你的评论并提供了所有的解释。 +1给你。 – vee

0

vinoqadhikary的答案是正确的。 gniourf_gniourf的评论也纠正了给出答案中的一个问题。

为什么你的代码有问题:

[实际上是我的系统上的一个外部命令:/usr/bin/[既然是命令,它希望周围有白色的空间,所以外壳可以解析它。

type [ 

会告诉你你的系统上有什么。

当你把里面的东西括号这样的:(stuff in here)两点需要注意:

stuff in here 

将作为一个命令来执行。 5不是一个命令。

下一步:如果你对stuff in here 有一个真正的shell命令的理解,那么shell就会将它作为子进程来运行 - 而不是你想要的。

+0

in [tag:bash],'['不是外部命令,它是一个内建函数:''help ['to be convinced。 –

+0

另外,尝试'echo(echo)'。圆括号内的“echo”是一个真实的命令,但该行仍然会产生错误。 –

+0

@gniourf_gniourf - 真的吗?我认为不是:'$ bash --version GNU bash,版本4.1.10(4) - 发布(i686-pc-cygwin) 版权所有(C)2009自由软件基金会,公司 许可证GPLv3 +:GNU GPL版本3或更高版本 这是免费软件;你可以自由改变和重新分配它。 在法律允许的范围内,不存在任何担保。 jim @ jim-HP〜 $其中[ /usr/bin/[ –

1

你也可以利用$(...)这将在子shell中运行命令,从而消除了额外的变量来存储有效的uid。

if [ $(whoami) != "root" ]; then 
    exit 5; 
else 
    ... 
fi 

或者,您可以使用id得到同样的信息:

if [ $(id -un) != "root" ]; then 
    exit 5; 
else 
    ... 
fi 
+0

不妨直接使用'((UID!= 0))&& exit 5':不需要外部进程! –

+0

对于root用户来说,不需要计算数字GID,那么为什么不呢! – devnull

相关问题