Сценарий оболочки для поиска шаблона в файле, используя if else

Это мой скрипт, я хочу найти шаблон в файле. Я знаю статус выхода grep -q '<Pattern>' '<file>' && echo $? 0, если шаблон найден. Но я получаю, если: Синтаксическая ошибка выражения.

 if ( (grep -q '<Pattern>' '<file>' && echo $?)==0  ) then
 echo "Pattern found"
 else
 echo "Pattern not found"
 endif

2 ответа

Решение

Я настоятельно рекомендую не использовать csh (или его варианты) для новых скриптов по причинам, обсуждаемым здесь. Почему я не должен программировать на csh?

Однако правильный синтаксис выглядит так:

if ( { grep -q 'Pattern' file } ) then
  echo "Pattern found"
else
  echo "Pattern not found"
endif

т.е. внутренние скобки должны быть фигурными скобками, { ... }, Вам не нужно эхо $? для того, чтобы проверить состояние выхода.

Кроме того, вы можете использовать $status переменная:

grep -q 'Pattern' file
if ( $status == 0 ) then
  echo "Pattern found"
else
  echo "Pattern not found"
endif

В tcshпеременная $status может быть заменен $? - но не все csh реализации, кажется, поддерживают это.

Я думаю, что вы не закрыли условие с "фи".

попробуйте ниже, это должно быть работать.

if ((grep -q '' '' && echo $?) == 0) тогда echo "Паттерн найден" else echo "Паттерн не найден"fi

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