我正在编写一个需要根级权限的脚本,我想让它这样做,如果脚本不是以根身份运行,它只是回显“请以根身份运行”并退出。

下面是我正在寻找的一些伪代码:

if (whoami != root)
  then echo "Please run as root"

  else (do stuff)
fi

exit

我怎样才能最好地(干净和安全地)完成这个任务呢?谢谢!

啊,只是澄清一下:(做东西)部分将涉及运行本身需要root的命令。因此,作为一个普通用户运行它只会出现一个错误。这只是为了干净地运行一个需要根命令的脚本,而不需要在脚本中使用sudo,我只是在寻找一些语法糖。


当前回答

让脚本只能由root用户运行的一个简单方法是使用shebang启动脚本:

#!/bin/su root

其他回答

我的小笑话:

if [ "$(id -u)" -ne 0 ]; then echo "Please run as root." >&2; exit 1; fi

试试下面的代码:

#!/bin/sh

if [ "$(id -u)" -ne 0 ]; then
    echo "Sorry, you are not root." >&2
    exit 1
fi

编辑时注意:反撇号现在被认为已弃用(还有很多注意事项)。

让脚本只能由root用户运行的一个简单方法是使用shebang启动脚本:

#!/bin/su root

很简单的方法:

if [ "$(whoami)" = "root" ]; then
    # you are root
else
    # you are not root
fi

使用this代替id的好处是,您可以检查某个非root用户是否也在运行该命令;如。

if [ "$(whoami)" = "john" ]; then
    # you are john
else
    # you are not john
fi

编者注:要么更喜欢使用posix兼容的测试命令和比较[…]=……或者你可以使用Bash/+其他特定的shell[[…]= =…]]。

如果脚本确实需要根访问权限,那么它的文件权限应该反映这一点。非根用户可执行根脚本将是一个危险信号。我建议您不要使用if检查来控制访问。

chown root:root script.sh
chmod u=rwx,go=r script.sh