shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] teste retorno comando


From: Julio C. Neves
Subject: Re: [shell-script] teste retorno comando
Date: Sat, 13 Dec 2014 19:37:05 -0200

Fala Herbert,
acho que vc está misturando um monte de conceitos.

1 - Toda vez que vejo um if [ $? -eq ... ], desconfio, quase com certeza que o script está muito mal escrito.

A função do if é testar instrução, então não tem por que c executar a instruçõ e testar o seu retorno. Otimize isso assim:

if who | grep usuario &> /dev/null
then
    echo "logado"
else
    echo "não logado"
fi

Mas o erro não está aí, estou só te mostrando como otimizar e programar limpo.

2 - &> só passou a funcionar no bash 4.0. Se vc estiver abaixo dessa versão, já era!

3 - Existe um vetor do sistema que te devolve o $? de cada um dos componentes de uma linha com pipes (|) é o PIPESTATUS, veja:

$ who | grep usuario &> /dev/null
$ echo ${PIPESTATUS[@]}
0 1

Isso significa que o who foi bem sucedido e o grep deu zebra.

4 - Como o grep não dá erro caso não case com ninguém, basta mandar a saída primária para /dev/null, ou usar a facilidade que o próprio grep oferece:

$ who | grep -q usuario


Abcs,
Julio
@juliobash
P
róximos cursos de Shell
Cidade         Local Período
Rio de Janeiro EDX 09 a 13/03/15
São Paulo 4Linux 24 a 28/11/14
Dou treinamento de Shell em qualquer cidade.
Para mais detalhes, me mande um e-mail.


Em 13 de dezembro de 2014 14:12, Herbert Parentes Fortes Neto (hpfn) address@hidden [shell-script] <address@hidden> escreveu:
 

olá,

estou com uma dúvida bem básica. dá até vergonha de dizer.

se faço: who | grep usuario &> /dev/null || echo "nao logado"
tenho o retorno esperado.

mas isso não está funcionando:

who | grep usuario &> /dev/null

if [ $? ] # tanto faz o valor de $? - 0 ou 1. estou sempre logado
then
echo "logado"
else
echo "não logado"
fi

o que está errado ?

abraço,
--
Herbert Parentes Fortes Neto (hpfn)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]