Aproveitando o gancho da discussão levantada pelo Júlio, gostaria de saber dos
senhores como poderia
evitar o uso do $? no script abaixo.
i=127.0.0.1
response=$( snmpwalk -v 2c -c public $i sysname 2>&1 )
snmpExecution=$?
response="${response};$( ./check_nrpe -H $i )"
nrpeExecution=$?
[ ${snmpExecution} -ne 0 -a ${nrpeExecution} -ne 0 ] && echo "${i};${response}"
Sei que o if testa instruções, mas me pergunto se colocar as duas instruções
dentro do if não
ficaria ainda pior para ler o código.
Essa do PIPESTATUS mudou a minha vida.. nunca ia imaginar que isso existia..
Julio, c é d+ cara.
2014-12-13 20:19 GMT-02:00 Jonathan Lessa address@hidden <mailto:address@hidden>
[shell-script] <address@hidden <mailto:address@hidden>>:
__
Sim, tive receio de falar errado justamente por ter algum tempo que não uso
essa sintaxe rsrssrsrs
Agora é o && e || logo após o "comando"
Em 13/12/2014 19:11, "'Julio C. Neves' address@hidden
<mailto:address@hidden>
[shell-script]" <address@hidden <mailto:address@hidden>> escreveu:
__
Falou certo Jonathan, o test que vc aplicou (aritmético) é muito mais
veloz que o
convencional, o problema é que qdo vejo um [ $? == ... ], ou um [[ $?
== ... ]], ou até (($?
==...)), sinto dor de barriga e olha que minha barriga é muuuuito
grande.
Inscreva-se vc tb na CPDEC - Campanha Para Desestimular Essa Construção
;). Isso é um
horror, é um pleonasmo, é o mesmo que subir para cima, descer para
baixo ou entrar para
dentro. E eu sempre aviso aos que insistem nessa redundância: cuidado
para não dar uma
marcha a ré para trás... ;)
Abcs,
Julio
*@juliobash**
Próximos cursos de Shell*
*Cidade LocalPeríodo*
*Rio de JaneiroEDX <http://edx.srv.br/>09 a 13/03/15*
*São Paulo 4Linux
<http://www.4linux.com.br/cursos/programacao-em-shell-script>24 a 28/11/14*
Dou treinamento de /Shell/ em qualquer cidade.
Para mais detalhes, me mande um e-mail <mailto:address@hidden>.
Em 13 de dezembro de 2014 19:45, Jonathan Lessa address@hidden
<mailto:address@hidden> [shell-script] <address@hidden
<mailto:address@hidden>> escreveu:
__
Se não me engano, em um curso que fiz com o Julio, vi que o ideal
para testar
comparações numéricas é com parênteses e não com colchetes.
(( $? == 0 )) && echo igual || echo diferente
Julio, desculpe se falo errado... Kkkk
Em 13/12/2014 18:37, "'Julio C. Neves' address@hidden
<mailto:address@hidden> [shell-script]" <address@hidden
<mailto:address@hidden>> escreveu:
__
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**
Próximos cursos de Shell*
*Cidade LocalPeríodo*
*Rio de JaneiroEDX <http://edx.srv.br/>09 a 13/03/15*
*São Paulo 4Linux
<http://www.4linux.com.br/cursos/programacao-em-shell-script>24 a
28/11/14*
Dou treinamento de /Shell/ em qualquer cidade.
Para mais detalhes, me mande um e-mail <mailto:address@hidden>.
Em 13 de dezembro de 2014 14:12, Herbert Parentes Fortes Neto
(hpfn) address@hidden
<mailto:address@hidden> [shell-script] <address@hidden
<mailto: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)
----------------------------------------------------------------------------------------------------
Enviado por: Sidney Souza <address@hidden>
----------------------------------------------------------------------------------------------------