bash的标准解决方案,请参阅:
https://askubuntu.com/questions/15853/how-can-a-script-check-if-its-being-run-as-root
是:
#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root"
exit 1
fi
在dash中不起作用,它正慢慢成为Linux下的标准shell。如何将上述内容移植到破折号?
答案 0 :(得分:7)
使用id
:
if [ "$(id -u)" -eq 0 ]; then
echo "I am root!"
fi
或者
#!/bin/sh
if [ "$(id -u)" -ne 0 ]; then
echo "This script must be run as root"
exit 1
fi
在Linux中,您只需阅读/proc/$$/loginuid
,这比依赖二进制文件更有效。
#!/bin/sh
read ID < "/proc/$$/loginuid"
if [ "$ID" -ne 0 ]; then
echo "This script must be run as root"
exit 1
fi
答案 1 :(得分:1)
使用“id -u”命令获取当前有效的用户ID:
#!/bin/dash
MYUID=`id -u`
if [ "$MYUID" -eq 0 ]
then
echo "You are root"
else
echo "You are the non-root user with uid $MYUID"
fi
答案 2 :(得分:0)
我通常做的是检查我实际需要的功能,以便脚本也可以为喜欢通过备用特权帐户运行的用户正常工作(* BSD以前为超级用户提供toor
csh
,当然,正确的思想中没有人会想要这些日子,但无论如何。)
test -w /usr/share/bin ||
{ echo "$0: /usr/share/bin not writable -- aborting" >&2; exit 1 }