& ldquo; слишком много аргументов & rdquo; проверить условие и выполнить какое-либо действие, если оно не соответствует действительности?

Я отредактировал свой файл 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. Что я делаю не так?

2
задан 4 January 2014 в 19:14

2 ответа

Эта книга может быть лучшим источником для изучения Bash Scripting в Ubuntu.

0
ответ дан 4 January 2014 в 19:14
  1. "Поваренная книга bash" - отличный ресурс, вы можете получить основы в Интернете, но это сэкономит вам время, когда у вас не хватает времени.

  2. Никогда не используйте двойные кавычки на вещах, которые вы намереваетесь назвать пустыми строками, например не подлежит замене bash, поэтому строка пропускания должна быть заключена в одинарные кавычки.

  3. Всегда используйте двойные кавычки для ссылок на переменные в тестовой конструкции [], [[]], (()) и т. Д. Если вы этого не сделаете, могут случиться плохие вещи, читайте об этом. Предпочтительная конструкция:

[ "${passRd}" = "${passPut}" ]
  1. Точки с запятой после вызовов функций не нужны и загромождают код.

  2. man test , между каждым аргументом в тестовом вызове должны быть пробелы.

  3. установите -x в CLI или передайте -x в #! / Bin / bash, чтобы помочь в отладке, подробности см. В справочном наборе .

0
ответ дан 4 January 2014 в 19:14

Другие вопросы по тегам:

Похожие вопросы: