Я отредактировал свой файл 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
. Что я делаю не так?
Эта книга может быть лучшим источником для изучения Bash Scripting в Ubuntu.
"Поваренная книга bash" - отличный ресурс, вы можете получить основы в Интернете, но это сэкономит вам время, когда у вас не хватает времени.
Никогда не используйте двойные кавычки на вещах, которые вы намереваетесь назвать пустыми строками, например не подлежит замене bash, поэтому строка пропускания должна быть заключена в одинарные кавычки.
Всегда используйте двойные кавычки для ссылок на переменные в тестовой конструкции [], [[]], (()) и т. Д. Если вы этого не сделаете, могут случиться плохие вещи, читайте об этом. Предпочтительная конструкция:
[ "${passRd}" = "${passPut}" ]
Точки с запятой после вызовов функций не нужны и загромождают код.
man test , между каждым аргументом в тестовом вызове должны быть пробелы.
установите -x в CLI или передайте -x в #! / Bin / bash, чтобы помочь в отладке, подробности см. В справочном наборе .