我已编辑sudoers
文件以允许非 root 用户运行sudo
命令而无需输入密码。在 中vim
,如何创建一个函数来检查此条件是否为真,如果不为真,则提示用户是否希望脚本编辑并保存文件sudoers
以使此条件为真?
如果条件为真,则继续执行脚本的其余部分。如果条件不为真,则脚本会默默地%sudo ALL=(ALL:ALL) NOPASSWD: ALL
在文件中编辑/添加行: sudoers
,保存,然后继续执行脚本的下一部分。
因此我开始使用以下代码编写函数:
... #lines 1-5
passChk() {
passPut="%sudo ALL=(ALL:ALL) NOPASSWD:ALL";
passRd=sudo grep -is "$passPut" --file=/etc/sudoers;
if [ $passRd == $passPut ]; then #if sudoers already contains line from $passPut,
#exit passChk and proceed to pkgFetch.
pgkFetch;
else
echo "You will be prompted for user password. Do you want to temporarily disable this?";
read answer;
fi
if [ $answer !="y" ] || [ $answer !="n" ]; then null
elif [ $answer ="y" ]; then
$passPut|tee -a > /etc/sudoers
elif [ $answer ="n" ]; then
pkgFetch;
fi;
clear;
};
passChk;
我在第 9 行收到错误if [ $passRd = $passPut ]; then pkgFetch; [: too many arguements
。我不明白。我正在尝试测试目录中是否$passRd
包含来自的字符串$passPut
。我做错了什么?
答案1
“Bash 食谱”是一种极好的资源,你可以从网上获得基础知识,但当你时间紧迫时这会节省你的时间。
永远不要对你想要作为裸字符串的内容使用双引号,例如不受 bash 替换的内容,因此 passput 行应该用单引号引起来。
在测试结构 []、[[ ]]、(()) 等中,始终使用双引号引用变量引用。如果不这样做,可能会发生不好的事情,请仔细阅读。首选结构是:
[ “${passRd}” = “${passPut}” ]
函数调用后的分号是不必要的,并且会使代码变得混乱。
男人测试,测试调用中的每个参数之间必须有空格。
在 CLI 上设置 -x 或将 -x 传递给 #!/bin/bash 以协助调试,请参阅帮助集了解详情。
答案2
这本书可能是学习 Ubuntu 中的 Bash 脚本的最佳资源。