我已经编写了这个 bash 脚本,它测试用户是否有超级用户权限,如果没有,它会要求他们。最终,我试图反转第二个“if”语句,以便我可以删除以下两行(echo“password ok”和下一行的 else)
# Root user only
if [[ "$EUID" != 0 ]]; then
sudo -k # make sure to ask for password on next sudo
if sudo true; then
echo "Password ok"
else
echo "Aborting script"
exit 1
fi
fi
echo "do my ops"
第四行的“真实”的目的只是一个空语句吗?
我需要反转第四行的测试,我该怎么做?这是我尝试过的:
if sudo false; then
if sudo true == false; then
if [!(sudo true)]; then
true
在 bash 中不是关键字,它是一个立即退出并成功退出代码的程序。同样,false
是一个以不成功的退出代码退出的程序。您可以通过从终端运行这两个程序,然后读取
$?
包含最后一个程序的退出代码的变量来尝试这一点;if sudo true
不等于if sudo == true
.if sudo true
正在使用 运行true
程序sudo
,并检查退出代码。所以:
if sudo false; then
false
正在以 sudo 身份运行程序。回报永远是假的。if sudo true == false
true
将使用参数运行程序==
并false
使用sudo
. 这显然不是你想要的。if [!(sudo true)]
是无效的语法。您可能正在寻找的是
我觉得接受的答案实际上并没有回答你的问题?
这样做的目的是检查您是否真的可以
sudo
。true
如接受的答案中所述,如何通过程序执行此检查。正如我在这个脚本中看到的那样。它只是检查是否启用了 sudo,就是这样..
true 只返回 true。
因此,在这种情况下,如果他们需要使用 sudo 运行任何命令,它首先会在启动时检查,只询问一次密码。
条件是这样的:如果 sudo 正确执行了 true 命令,它将为 if 条件返回 true,然后启用 sudo 并且用户输入了正确的密码,否则你输入了错误的密码或 sudo 没有启用,脚本不得继续。
其他命令不需要询问sudo密码,因为你的认证是第一次成功(但这取决于sudo配置,所以这个脚本很大程度上取决于环境配置)
'echo password ok' 也证明了这一点。shell 脚本将不再询问密码。