Intereting Posts
«seq» и ​​«bash» Есть ли способ найти файл в обратном рекурсивном поиске? Я отформатирую файловую систему zfs или просто монтирую и разделяю? Каким уведомлением отправляется Firefox при завершении загрузки? Как использовать команду convert с bash для изменения размера всех изображений в заданном каталоге? Как проверить список прокси-серверов? как получить IP-адрес от DHCP в сети в redhat, который установлен на VMware Iptables и сканирование портов и последний модуль Виртуальная машина ARM на Ubuntu Интернет регулярно исчезает Как сделать восстановление данных очень-очень сложно или невозможно для Unix-компьютера перед перепродажей? i3 Window Manager не разрешает полноэкранное видео на двух мониторах Только выходные результаты grep Как перечислить ключи, добавленные в ssh-agent с помощью ssh-add? У меня есть команда, которая выводит каталог, и я хочу записать cd в этот каталог

Как использовать отрицание команды в цикле while с grep в сценарии оболочки?

Есть ли способ использовать while loop и grep вместе? См. Мой пример:

while [[ !(grep -R -h "${text}" ${path}) ]]; do ... done 

В нем говорится:

 ./test_script.sh: line 1: conditional binary operator expected ./test_script.sh: line 1: expected `)' ./test_script.sh: line 1: syntax error near `-R' ./test_script.sh: line 1: `while [[ !(grep -R -h "${text}" ${path}) ]];' 

  1. Не помещайте команды в квадратные скобки. Для цикла, пока grep удастся (т. grep Пока он не сработает), просто выполните

     while grep ... do ︙ done 
  2. Для цикла, пока сбой grep не выполняется (т. Е. До тех пор, пока он не удастся), выполните

     while ! grep ... do ︙ done 

    с пробелом между ! и команда.

  3. Вы всегда должны указывать ссылки на переменные оболочки (например, "$path" ), если у вас нет веских оснований, и вы уверены, что знаете, что делаете. Напротив, в то время как фигурные скобки могут быть важными, они не так важны, как кавычки, поэтому "$text" и "$path" достаточно хороши (вам не нужно использовать "${text}" и "${path}" , в этом контексте).

  4. Вам не нужна точка с запятой ( ; ) в конце строки while (если вы не поместите do после нее).