如何检查Bash脚本是以root用户还是普通用户身份运行的?

3

我开始学习Bash脚本编程。我有一个概念上的疑问,如何确定脚本是以root用户身份还是普通用户身份运行。

我知道如果用户的UID为0,则表示该用户是root用户,但我不知道如何实现它。有人能向我解释一下如何使它工作吗?如果脚本以普通用户身份运行,是否可以打印一个消息“Not a root user”?

我的脚本是一个简单的hello_world.sh:

#!/bin/bash
echo 'Hello World';
1个回答

5

POSIX shell具有内置变量$UID$EUID。您也可以检查id -u的返回值。无论何种情况,ID 0表示root。

#!/bin/sh
if [ $EUID -ne 0 ]; then
    echo "This script should be run as root." > /dev/stderr
    exit 1
fi

我猜你想要的是 $EUID,而不是 $UID,因为这是检查脚本是否以 root 权限运行的方法。 - user2719058
你是对的,我编辑了我的回答。实际上,我不确定 UID 在这里如何与 EUID 不同(或者 setuid 在某些平台上是否适用于 shell 脚本?)。 - remram
1
脚本可以由更改有效UID的父进程分叉。尽管bash默认将有效UID重置为实际UID,除非给出“-p”选项,因此通常$EUID = $UID成立。然而,其他像dash这样的shell没有实现这一点。 - user2719058

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