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

Posted

技术标签:

【中文标题】在 Bash 中检查 sudo(带有 if 语句的脚本)【英文标题】:Checking sudo in Bash (script with if statements) 【发布时间】:2017-08-10 02:10:34 【问题描述】:

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

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

    如果我用 sudo 模式执行脚本,我就可以输入要复制的文件夹的路径。 如果我在没有 sudo 模式的情况下执行脚本,它会要求我输入密码,如果我正确地输入密码,脚本会显示 echoread op 允许我写下要复制的文件夹的路径。 与第 2 点相同,但如果我未能通过身份验证,应用程序将自动关闭。

创建副本

2)
    if [ "$EUID" -ne 1 ]
      then 
            echo "Checking if you are in sudo mode..."
            echo "Error, please insert your password:"
            sudo ls /root
            if [ "$EUID" -ne 1 ]
                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;;    

【问题讨论】:

欢迎来到 SO,请展示您的编码工作。 是的,对不起:D. 你试过elif语句了吗? 我正要放它,但我没有放。我用了大约 5 个小时... 顺便说一句,您对echo -e 的大量使用似乎被误导了。你或许应该考虑改用printf 【参考方案1】:

如果您启用了 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。

【讨论】:

以上是关于在 Bash 中检查 sudo(带有 if 语句的脚本)的主要内容,如果未能解决你的问题,请参考以下文章

Bash 中“if”语句的“and”运算符

Bash:将带有空变量的“$@”参数传递给 sudo -i

为啥在 bash if 语句中未设置的变量被评估为 0

在 C# 中使用带有多个 if 语句的 else

AWS CodeBuild buildspec bash 语法错误:用 if 语句替换错误

执行命令并在if语句中进行比较