Ответы:
Любая POSIX-совместимая версияgrep
имеет переключатель -q
для тишины:
-q
Quiet. Nothing shall be written to the standard output, regardless
of matching lines. Exit with zero status if an input line is selected.
В GNU grep (и, возможно, других) вы также можете использовать синонимы с длинными опциями:
-q, --quiet, --silent suppress all normal output
Строка существует:
$ echo "here" | grep -q "here"
$ echo $?
0
Строка не существует:
$ echo "here" | grep -q "not here"
$ echo $?
1
Вам просто нужно объединиться grep -q <pattern>
с немедленной проверкой кода завершения для последнего процесса quit ( $?
).
Вы можете использовать это для создания такой команды, например:
uname -a | grep -qi 'linux' ; case "$?" in "0") echo "match" ;; "1") echo "no match" ;; *) echo "error" ;; esac
Вы можете при желании подавить вывод, STDERR
например, так:
grep -qi 'root' /etc/shadow &> /dev/null ; case "$?" in "0") echo "match" ;; "1") echo "no match" ;; *) echo "error: $?" ;; esac
Это напечатает error: 2
из case
оператора (при условии, что у нас нет привилегий на чтение /etc/shadow
или что файл не существует), но сообщение об ошибке от grep
будет перенаправлено, /dev/null
чтобы мы никогда его не увидели.
echo $?
еслиgrep
вернет ненулевой код завершения.