LINUX.ORG.RU

Как осуществить выход по результату выполненной команды

 , ,


0

3

Добрый день! Вопрос такого рода. Необходимо по файлам в каталоге провести поиск текста. Это решил вот так:

grep -rl 'Not supported' /home/tester/testresults/
Нужно сделать так, что если есть Not supported то это ошибка, если не находит то все в порядке. Заранее спасибо за ответы

Надо посмотреть, какие у grep есть варианты кодов завершения, потом код анализировать. Или так:

NUM=`grep -rl 'Not supported' /home/tester/testresults/ | wc -l`

AS ★★★★★
()

что если есть Not supported то это ошибка

У тебя сейчас в выводе будут присутствовать только имена файлов, в тексте которых содержится строка 'Not supported'. Если тебе нужно для каждого этого файла что-то сделать, то делай какую-то такую конструкцию:

grep -rl 'Not supported' /home/tester/testresults/ | while read FNAME ; do echo error "${FNAME}" ; done

kostik87 ★★★★★
()
Ответ на: комментарий от galiullinainur

У тебя и так в выводе команды grep в том виде, как ты её вызываешь, будут присутствовать только имена файлов, в которых нашлась строка 'Not supported'. Если тебе нужно их как-то обработать, то я написал тебе как, если нет, то смотри свой вывод.

kostik87 ★★★★★
()
grep -rl 'Not supported' /home/tester/testresults/ || exit 1
...
<continue execute script body>
...
anonymous
()

Если grep нашел подстроку, то он завершается с кодом 0, если нет - с кодом 1. Можно либо if-then-else-fi использовать:

grep -rl 'Not supported' /home/tester/testresults/ &>/dev/null
grepStatus=$?
if [ "$grepStatus" -eq 0 ]
then
  echo "Строка найдена"
  exit 1
else
  echo "Строка не найдена"
  <тут какие-то действия или вообще ничего и убрать этот блок>
fi

Или сделать еще проще в одну строку

<тут часть скрипта>
grep -rl 'Not supported' /home/tester/testresults/ &>/dev/null && exit 1
<тут остаток скрипта>
alozovskoy ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.