Сценарий оболочки для поиска шаблона в файле, используя 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