Echo enter file name
Read file
Echo enter pattren
Read pattren
If [ grep $pattern $file ]
Then
Echo pattern found
Else
Echo not found
Fi
Когда я выполняю это, я получаю ошибку как invalid operator grep
По-видимому, Вы не хотите проверять, что существует такая строка как grep $pattern $file
, но существует ли вывод от команды, таким образом, что-то как [[ $(grep foo bar) ]]
работало бы. Или как @steeldriver указанный, можно просто проверить статус выхода grep
:
echo "enter file name: "
read file
echo "enter pattern: "
read pattern
if grep -q "$pattern" "$file"; then
echo "yeah, got it"
else echo "nope, sorry, got nothing"
fi
, Очевидно, зафиксируйте ограничения. Echo
не команда.
test
команда (также известный как [
) имеет определенные операторы, список которых можно найти в man test
руководство. Таким образом, [ grep $pattern $file ]
является неправильным, так как Вы даете [
3 аргумента, что это не распознает.
то, Что Вы, вероятно, хотите сделать, - то, что Zanna показал - использование grep
в если оператор для оценки статуса выхода только. С другой стороны, можно сохранить вывод grep
к переменной и проверить, непуста ли та переменная что-то вдоль этих строк:
output=$(grep "$pattern" "$file" 2> /dev/null)
if [ -n "$output" ];
then
echo "Got something"
else
echo "Nothing"
fi
более часто, Вы будете видеть что-то вроде этого сделанное на практике:
if [ "x$output" != "x" ]
then
echo "Got something"
else
echo "Nothing"
fi