Одна строка, чтобы увидеть, вернул ли grep что-нибудь?

Одна строка, чтобы увидеть, вернул ли grep что-нибудь?

Я пытаюсь проверить, является ли машина ThinkPad или нет, используя что-то вроде этого:

sudo dmidecode | grep ThinkPad

Я хочу, чтобы конечный результат возвращал значение true или false (или 1/0).

Я думаю, что решение может быть таким:

sudo dmidecode | grep -c ThinkPad | test xargs -gt 0

Но я не уверен, как xargsздесь правильно использовать.

решение1

Просто добавьте проверку статуса выхода после grep, и по умолчанию она всегда будет получать статус выхода из последней команды конвейера:

sudo dmidecode | grep -q ThinkPad; echo $?

Используйте -qдля подавления любого вывода, grepпоскольку нас интересует только статус выхода.


При желании вы можете использовать группировку команд, но здесь это несколько излишне:

sudo dmidecode | { grep -q ThinkPad; echo $? ;}

решение2

Если вы собираетесь использовать этот скрипт оболочки с ifпроверкой, просто используйте, -qкак предложил heemayl:

if sudo dmidecode | grep -q Thinkpad
then
    echo "I'm a Thinkpad"
fi

Поскольку ifблок проверяет статус завершения команды, мы можем полагаться на grepстатус завершения напрямую, а не печатать $?его и сравнивать с чем-то еще.

решение3

ВдохновленОтвет Хемайла:

sudo dmidecode | grep -q ThinkPad && echo true || echo false

Это вернет true, если ThinkPad найден с помощью grep, и false в противном случае.

решение4

sudo dmidecode | grep -c ThinkPad | xargs test 0 -lt

Вам нужно переставить команду xargsи test, а также ее операнды, чтобы получить то, что вы хотите. Это вернет истинный статус, если есть ненулевые (>0) ThinkPad, составляющие строки.

В качестве альтернативы, если вы хотите сохранить порядок операндов тестовой команды, вы можете сделать следующее:

sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0

Затем в обеих командах проверьте $?значение переменной, чтобы определить судьбу успеха/неудачи grep, как показано ниже:

if sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0; then
   echo "success hooray!"
else 
   echo nothing
fi

Связанный контент