-1

У меня было абсолютно жестокое время делать что-то, что должно быть довольно простым.

Я перепробовал все, что мог придумать за последние несколько часов, но просто не могу заставить его работать. Самая последняя попытка здесь

У кого-нибудь есть предложения?

if [[ $(grep -q 10.212.5.5 /etc/dhcp/dhcpd.conf) == 0 ]] && [[ $(grep -q 10.212.5.15} /etc/dhcp/dhcpd.conf) == 0  ]] && [[ $(grep -q 10.212.5.5 file1) == 0 ]] && [[ $(grep -q 10.212.5.5 file2) == 0 ]] ; then echo "notfound" ; fi

1 ответ1

0

Команды (например, grep) обычно возвращают два разных вида результатов: вывод (то, что они печатают во время работы) и состояние выхода (лучше всего считать успехом или неудачей). Как указали цыплята, конструкция оболочки $(somecommand) захватывает выходные данные команды, а не ее состояние выхода; но опция grep от -q позволяет выводить данные, поэтому $( ) ничего не захватывает.

Я вижу два простых способа исправить это (при условии, что я понимаю, что вы пытаетесь сделать). Первый - использовать grep -c вместо -q , чтобы он выводил количество найденных совпадений, и вы можете зафиксировать это с помощью $( ) и сравнить с 0, точно так же, как вы делаете (хотя я обернул строки для удобства чтения). ):

if [[ $(grep -c 10.212.5.5 /etc/dhcp/dhcpd.conf) == 0 ]] &&
   [[ $(grep -c 10.212.5.15 /etc/dhcp/dhcpd.conf) == 0  ]] &&
   [[ $(grep -c 10.212.5.5 file1) == 0 ]] &&
   [[ $(grep -c 10.212.5.5 file2) == 0 ]] ; then
       echo "notfound"
fi

Другой вариант - использовать grep -q , но посмотрите на его статус выхода. Проверка состояния выхода команды в if тривиальности - просто используйте саму команду в качестве условия проверки. Но в этом случае все наоборот, поскольку grep возвращает успех, если шаблон был найден, и сбой, если его не было; Вы хотите, чтобы тест прошел успешно, если он не был найден, так что используйте ! чтобы изменить статус:

if ! grep -q 10.212.5.5 /etc/dhcp/dhcpd.conf &&
   ! grep -q 10.212.5.15 /etc/dhcp/dhcpd.conf &&
   ! grep -q 10.212.5.5 file1 &&
   ! grep -q 10.212.5.5 file2 ; then
       echo "notfound"
fi

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .