Я пытаюсь проверить, является ли машина 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