在 Bash 中检查 sudo(带有 if 语句的脚本)

问题描述 投票:0回答:3

我使用 bash 的时间不超过 6 小时,现在我正在尝试创建一个菜单,让你可以做一些“有趣”的事情 :D.

我的问题是检查您是否处于 sudo 模式的 if 语句。 我想要有3个条件:

  1. 如果我使用 sudo 模式执行脚本,我将能够输入要复制的文件夹的路径。
  2. 如果我在没有 sudo 模式的情况下执行脚本,它会要求我插入密码,如果我正确执行,脚本将向我显示 echoread op ,允许我将文件夹的路径写入被复制。
  3. 与第2点相同,但如果身份验证失败,应用程序将自动关闭。

创建副本

2)
    if [ "$EUID" -ne 0 ]
      then 
            echo "Checking if you are in sudo mode..."
            echo "Error, please insert your password:"
            sudo ls /root
            if [ "$EUID" -ne 0 ]
                then
                    echo -e "\nCould not authenticate the user."
                    echo -e "For security reasons the application will be closed."
                    exit    
            else
                echo "==============================================================="
                echo -e "ALL COPIES HAVE A DEFAULT ROUTE: /home/patryk/Desktop/a/"
                echo "==============================================================="
                echo -e "Enter the path of the folder to be copied: "
                read origin
                rsync -avzh $origin /home/patryk/Desktop/a/`date-I`
            fi
    else
        echo "==============================================================="
        echo -e "ALL COPIES HAVE A DEFAULT ROUTE: /home/patryk/Desktop/a/"
        echo "==============================================================="
        echo -e "Enter the path of the folder to be copied: "
        read origin
        rsync -avzh $origin /home/patryk/Desktop/a/`date -I`    
    fi;;    
linux bash if-statement sudo su
3个回答
24
投票

如果您启用了 sudo 凭据缓存(即,在成功 sudo 后,您不必在后续 sudo 中再次输入密码),您可以使用以下技巧:

执行

sudo true
并检查返回状态。如果输入了正确的密码,退出代码将始终为
0
。否则退出代码将会不同。

if [[ "$EUID" = 0 ]]; then
    echo "(1) already root"
else
    sudo -k # make sure to ask for password on next sudo
    if sudo true; then
        echo "(2) correct password"
    else
        echo "(3) wrong password"
        exit 1
    fi
fi
# Do your sudo stuff here. Password will not be asked again due to caching.

至少在我的系统上,root 的 UID 是 0,而不是 1,所以我调整了 if。


1
投票

脚本

if pgrep -s 0 '^sudo$' > /dev/null ; then
    echo 'Hello Sudo'
else
    else 'Hello Chestnut'
fi

注释

  • pgrep 检查是否存在与正则表达式匹配的进程
  • 正则表达式 '^sudo$' 与 'sudo' 完全匹配
  • -s 0 将搜索限制在自己的会话中
  • “if”分支取决于 pgrep 的返回码

0
投票

我认为你真正想做的是检查你的脚本是否以 root 身份运行。如果安全考虑不是超级重要,您可以将其放在脚本的开头:

if [ "$USER" != "root" ]
then
    echo "Please run this as root or with sudo"
    exit 2
fi

这将起作用,并且还涵盖使用 sudo 作为另一个用户(不是 root)运行命令的情况

© www.soinside.com 2019 - 2024. All rights reserved.