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

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

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

  else (do stuff)
fi

exit

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

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


当前回答

1-阅读官方的GNU Linux文档,有很多正确的方法。

2-确保你把shell签名,以避免错误解释:

#!/bin/bash

3-这是我的剧本

#!/bin/bash 

if [[ $EUID > 0 ]]; then  
  echo "Please run as root/sudo"
  exit 1
else
  #do your stuff
fi

其他回答

检查你是否是root用户,如果不是就退出:

if ((EUID != 0)); then
    echo "Root or Sudo  Required for script ( $(basename $0) )"
    exit
fi

或者在本例中,尝试在根位置创建目录,然后在提升权限后再尝试。

检查你是否是root,如果可能的话,如果不是elevate:

# Fails to create these dirs (needs sudo)
mkdir /test-dir-$(basename $0)
rmdir /test-dir-$(basename $0)

if ((EUID != 0)); then
    echo "Granting root privileges for script ( $(basename $0) )"
    if [[ -t 1 ]]; then
        sudo "$0" "$@"
    else
        exec 1> output_file
        gksu "$0" "$@"
    fi
    exit
fi
echo "Root privileges granted..."
# Creates Dirs as it now has rights
mkdir /test-dir-$(basename $0)
rmdir /test-dir-$(basename $0)

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

#!/bin/su root

1-阅读官方的GNU Linux文档,有很多正确的方法。

2-确保你把shell签名,以避免错误解释:

#!/bin/bash

3-这是我的剧本

#!/bin/bash 

if [[ $EUID > 0 ]]; then  
  echo "Please run as root/sudo"
  exit 1
else
  #do your stuff
fi

我的小笑话:

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

据我所知,正确的检查方法如下:

#!/bin/sh

if [ "$(id -u)" -eq 0 ]; then
    echo "You are root."
else
    echo "You are NOT root." >&2
fi

OP注释:你可以在linuxcommand.org上看到“测试Root”部分。

编者注:我稍微调整了这个shell片段,使其与posix兼容。