Um forro para ver se o grep retornou alguma coisa? [duplicado]

5

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

sudo dmidecode | grep ThinkPad

Eu 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 sei como usar corretamente xargs aqui.

    
por Philip Kirkbride 17.04.2017 / 05:27

5 respostas

14

Apenas marque 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 -q para suprimir qualquer saída de grep , pois estamos interessados apenas no status de saída.

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

sudo dmidecode | { grep -q ThinkPad; echo $? ;}
    
por 17.04.2017 / 05:31
9

Se você for usar um script de shell com uma if , use apenas -q como sugerido por heemayl:

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

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

    
por 17.04.2017 / 09:03
2

Inspirado por resposta do Heemayl :

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

Isso retornará true se o ThinkPad for encontrado por grep e false se não for.

    
por 17.04.2017 / 14:37
1

Usando test e command substitution ,

test -n "$(sudo dmidecode | grep Thinkpad)" 

também,

[ -n "$(sudo dmidecode | grep Thinkpad)" ]
    
por 17.04.2017 / 07:15
0
sudo dmidecode | grep -c ThinkPad | xargs test 0 -lt

Você precisa reorganizar o comando xargs e test , assim como seus operandos para conseguir o que deseja. Isso retornará um status verdadeiro se houver linhas não-zero (> 0) do ThinkPad.

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

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

E, em seguida, 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
    
por 17.04.2017 / 05:53

Tags