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

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

Re: [Bulk] Re: [shell-script] teste retorno comando


From: Paulo Bettega
Subject: Re: [Bulk] Re: [shell-script] teste retorno comando
Date: Sun, 14 Dec 2014 04:20:30 -0200
User-agent: Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Thunderbird/31.3.0

Olá Sidney, não sei se funciona com os comandos que vc postou.

snmpwalk -v 2c -c public $i sysname 2>&1 || ${response};$( ./check_nrpe -H $i ) || echo "${i};${response}"

Fiz o teste com o seguinte (não pode ter usuário ROOT :))
grep ROOT /etc/passwd || grep ROOT /etc/passwd || echo tudo falso
falso (grep falhou)   OU falso (grep falhou)   OU executa o echo

Se não me perdi na lógica, acho que o resultado é o mesmo do teu teste
verdadeiro (snmpwalk falhou) E verdadeiro (check_nrpe falhou) E executa o echo

Abraços Paulo Bettega


On 14-12-2014 01:13, Sidney Souza address@hidden [shell-script] wrote:
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>
----------------------------------------------------------------------------------------------------


reply via email to

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