Вам вообще не нужно wc
. Если счетчик строк равен нулю, это означает, что grep
не произвел вывода, и в этом случае он будет иметь ненулевой статус выхода. Оператор if
в любом случае заботится только о статусе выхода.
if ! aws ls s3://bucket/dir | grep -q _SUCCESS; then
echo FAILURE
fi
!
отрицает статус выхода конвейера (который является статусом существования крайнего левого отказа, в противном случае 0), так что вам не нужно писать что-то вроде
if aws ls s3://bucket/dir | grep -q _SUCCESS; then
: # Do nothing
else
echo FAILURE
fi
grep -q
подавляет его вывод, поскольку вас интересует только статус выхода, а не фактический вывод.
Строго говоря, grep
имеет статус выхода 1, если совпадения нет, и другое ненулевое значение, обычно 2, если действительно есть ошибка. Если вам интересно, вам нужно явно проверить значение $?
после запуска команды.
aws ls s3://bucket/dir | grep -q _SUCCESS
case $? in
0) : ;;
1) echo FAILURE ;;
*) echo "Some other error" ;;
esac