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

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

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

  else (do stuff)
fi

exit

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

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


当前回答

在Bash中,我的观点是:

#!/bin/bash

# Display the UID variable
echo "Your UID is $UID"

# Check for root user via UID
if [ "$UID" -eq 0 ]; then
    echo "You are root"
else
    echo "You are not root user" >&2
fi

其他回答

在Bash中,我的观点是:

#!/bin/bash

# Display the UID variable
echo "Your UID is $UID"

# Check for root user via UID
if [ "$UID" -eq 0 ]; then
    echo "You are root"
else
    echo "You are not root user" >&2
fi

试试下面的代码:

#!/bin/sh

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

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

正如@ wrkken在他的评论中提到的,id -u是一个更好的根检查。

此外,通过正确使用sudo,您可以检查脚本,看看它是否以根用户身份运行。如果不是,让它通过sudo收回自己,然后以根权限运行。

根据脚本的功能,另一个选项可能是为脚本可能需要的任何专门命令设置一个sudo条目。

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

#!/bin/su root

id -u比whoami要好得多,因为Android等系统可能不提供root这个词。


示例命令:

# whoami

示例输出:

whoami: unknown uid 0