Uma linha para ver se o grep retornou alguma coisa?

Uma linha para ver se o grep retornou alguma coisa?

Estou tentando verificar se uma máquina é ThinkPad ou não usando algo assim:

sudo dmidecode | grep ThinkPad

Quero que o resultado final retorne verdadeiro ou falso (ou 1/0).

Estou pensando que a solução pode ser algo assim:

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

Mas não tenho certeza de como usar corretamente xargsaqui.

Responder1

Basta seguir a verificação do status de saída após grep, ele sempre obterá o status de saída do último comando do pipeline por padrão:

sudo dmidecode | grep -q ThinkPad; echo $?

Use -qpara suprimir qualquer saída, greppois estamos interessados ​​apenas no status de saída.


Você pode usar o agrupamento de comandos se desejar, mas isso é um tanto redundante aqui:

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

Responder2

Se você for usar este script de shell com uma ifverificação, basta usar -qcomo sugerido pelo heemayl:

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

Como o ifbloco verifica o status de saída do comando, podemos confiar grepdiretamente no status de saída em vez de imprimir $?e compará-lo com outra coisa.

Responder3

Inspirado porA resposta de Heemayl:

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

Isso retornará verdadeiro se o ThinkPad for encontrado pelo grep e falso se não for encontrado.

Responder4

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

Você precisa reorganizar o comando xargsand teste também seus operandos para conseguir o que deseja. Isso retornará um status verdadeiro se houver linhas do ThinkPad diferentes de zero (>0).

Alternativamente, se você quiser manter a ordem dos operandos do comando de teste, você pode fazer

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

E então, em ambos os comandos, verifique o $?valor da variável para determinar o destino do sucesso/falha do grep, da seguinte forma:

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

informação relacionada