如何确定 shell 脚本是否以 root 权限运行?

13

我有一个脚本需要使用su权限才能运行,但是会失败的那个命令在脚本的最后执行,因此我希望在脚本前面进行干净的测试,以确定脚本是否需要SU权限。

对于bash、sh和/或csh,有什么好的方法可以实现这一点?


3
你试过访问http://www.cyberciti.biz/tips/shell-root-user-check-script.html吗? - Nick ODell
看起来很不错。为什么你没有把这个作为答案呢? :-) - F. Randall Farmer
可能是如何在bash脚本中检查是否以root身份运行的重复问题。 - Nick ODell
2个回答

16

bash/sh:

#!/usr/bin/env bash
# (Use #!/bin/sh for sh)
if [ `id -u` = 0 ] ; then
        echo "I AM ROOT, HEAR ME ROAR"
fi

csh:

#!/bin/csh
if ( `id -u` == "0" ) then
        echo "I AM ROOT, HEAR ME ROAR"
endif

3
这段代码在 POSIX shell (/bin/sh) 中无法运行。[[ 命令和 EUID 变量是 Bash 特有的,它们不在 POSIX 规范中定义。为了让代码能在 POSIX shell 中运行,需要使用 POSIX-compliant 的语法和命令。 - Richard Hansen
2
另外,#!/bin/bash 几乎总是错误的。如果必须使用 bash(这确实不是首选),请使用 /usr/bin/env bash。 - Good Person
2
似乎那些在问题中特别提到bash的人更喜欢使用bash。 - jwg

13

您可以在脚本开头添加类似以下内容的代码:

#!/bin/sh

ROOTUID="0"

if [ "$(id -u)" -ne "$ROOTUID" ] ; then
    echo "This script must be executed with root privileges."
    exit 1
fi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接