[shell-script] Re: dúvida a usar o comando SED

2007-10-30 Por tôpico miguelcm86
--- Em shell-script@yahoogrupos.com.br, "Tiago Barcellos Peczenyj"
<[EMAIL PROTECTED]> escreveu
>
> On 10/29/07, miguelcm86 <[EMAIL PROTECTED]> wrote:
> >
> > Olá mais uma vez
> >
> >  Decidi por esta dúvida à parte já que não tem nada haver com as que
> >  postei antes.
> >
> >  Tenho um ficheiro que é state.reg
> >
> >  Conteúdo do fiheiro state.reg:
> >  
> >  State=21
> >  Status=1
> >  
> >
> >  Qual o comando com o SED para saber que valor tenho em frente ao
State
> >  e já agora como alterar alquele valor. Saliento que não sei qual o
> >  valor que está na variável State.
> 
> Humm???
> 
> olha, vc poderia fazer algo como
> 
> sed -i.old '/State=/{ s/[^=]*$/valor_que_vc_deseja/ }' arquivo
> 
> >  pelo documentação que tenho o SED só permite indicar um intervalo de
> >  texto para alterar.
> >  Já agora os extremos são tb alterados? como neste exemplo
> >
> >  sed '//,/<\/pre>/c
> >
> >  o  e /pre> desaparece???
> 
> Basta fazer um teste:
> 
> $ cat xxx.html
> antes
> 
> aiaiaiaia
> 
> depois
> 
> $ sed '//,/<\/pre>/d' xxx.html
> antes
> depois
> 
> quando vc usa
> 
> sed 'começo, fim Comando'
> 
> o comando sera executado desde o endereço/padrão começo até o
> endereço/padrão fim.
> 
> []´s T
> 
> -- 
> Tiago B Peczenyj
> Linux User #405772
> 
> http://peczenyj.blogspot.com/
>
Fiquei sem perceber como é que se lê o valor que está à frente de
State=, já agora esse valor entra numa variável num script para
comparar com outros valores.

Será que me podia explicar esta parte do comando que não percebi.
{ s/[^=]*$/valor_que_vc_deseja/ }

O comando que voçê escreveu não apagou os extremos, como é que é
possivel? 

obrigadão ;)



Re: [shell-script] Re: Funções com comando tee

2007-10-30 Por tôpico Julio C. Neves
Olá Miguel,
vou te explicar o que está acontecendo, mas vc terá de estudar um pouco. É
muito comum as pessoas confundirem o uso do if eo uso do cmd test. A melhor
forma de vc aprender para sempre o uso destes cmds é ler este texto sobre o
ife
este
texto sobre o 
test.
Vc não perderá mais de 30 min para aprender e se quiser aproveitar e ir
convertendo para o Português Europeu, será muito bem vindo.

O par de parênteses quadrados (que no Brasil chamamos de colchetes) é o cmd
test, que serve para testar condições, porém sem dar resultado algum a não
ser o $?. Nas outras linguagens que estamos habituados, quem testa condições
é o if no shell, como vimos, é o test e o if testa se uma instrução foi bem
executada ou não.

Assim, o seu if deveria testar a execução da sua função. Para entender isso,
deixe a função como vc definiu e faça o seguinte:

$ if Install
> then
> echo Resultado OK
> else
> echo $?
> echo Resultado NOK
> fi
testes que só fazem perder tempo
34
Resultado NOK

Até aí tudo funciona com o esperado, porém vejamos o que acontece se
adicionarmos um tee:

$ if Install | tee teste1.rep
> then
> echo Resultado OK
> else
> echo $?
> echo Resultado NOK
> fi
testes que só fazem perder tempo
Resultado OK

Epa! Não era esse o resultado esperado! Vamos agora adicionar o vetor
(array) PIPESTATUS que o Tiago mencionou para entender o que está
acontecendo:

$ if  Install | tee teste1.rep
> then
> echo [EMAIL PROTECTED]
> echo bem
> else
> echo mal
> fi
testes que só fazem perder tempo
34 0
bem

Ahhh, agora dá para entender o que houve... Repare que o retorno do pipe foi
34 e zero, e assim sendo o zero representa cmd bem executado e por isso ele
executa os cmds do then e não os do else como esperávamos. A forma de
contornar isso seria:

$ Install | tee teste1.rep
testes que só fazem perder tempo
$ if [ ${PIPESTATUS[0]} -eq 34 ]
> then
> echo mal
> else
> echo bem
> fi
mal

Abraços aos amigos portugueses,
Julio


Em 29/10/07, miguelcm86 <[EMAIL PROTECTED]> escreveu:
>
>   Pensei que houvesse uma solução mais fácil.. estou a testar, mas além
> de não perceber muito bem como é que isso funciona, eu chamo todas
> pipesatus [0] e [1] e [2] e estão todos a 0.
> aqui está o codigo:
>
> #! /bin/bash
> Install(){
> echo "testes que só fazem perder tempo"
> return 34
> }
>
> if ( Install | tee teste1.rep ) ##executa as funções e guarda os output
> then echo "bem"
> echo $PIPESTATUS[0] $PIPESTATUS[1]
> else echo "mal"
> fi
> echo $PIPESTATUS[1] $PIPESTATUS[2]
>
> exit 0
>
> por mais que altere o 34 para o 0 e outro valor o output é sempre este:
> [EMAIL PROTECTED]:~$ ./teste1.sh
> testes que só fazem perder tempo
> bem
> 0[1] 0[2]
> 0[1] 0[2]
> [EMAIL PROTECTED]:~$
>
> isto assim diz que está a receber demasiados arguementos:
> if [ `Install | tee teste1.rep` ]
>
> output:
> ./teste1.sh: line 10: [: demasiados argumentos
>
> --- Em shell-script@yahoogrupos.com.br ,
> "Tiago Barcellos Peczenyj"
> <[EMAIL PROTECTED]> escreveu
>
> >
> > On 10/29/07, miguelcm86 <[EMAIL PROTECTED]> wrote:
> > >
> > > olá pessoal
> > >
> > > o que se passa é simples
> > >
> > > -Tenho que chamar uma função install, guardar todo o seu output
> dentro
> > > de um arquivo e saber qual o return que recebo da função install.
> > > Estou a fazer desta maneira que está errada, queria saber como
> resolvo.
> > >
> > > Install(){
> > > ..
> > > return variavel
> > > }
> > >
> > > if [ Install | tee install.rep ]
> > > then echo "return = 0"
> > > else echo "return = 1"
> > > fi
> > >
> > > uso o comando tee porque quero no install.rep todo o output no
> ficheiro.
> > >
> >
> > Miguel,
> >
> > a palavra "return" em uma função é semelhante ao exit de um script,
> > porém interrompe apenas a função, e o seu resultado pode ser lido pela
> > variavel $? e pode ser usado nas operações && e ||
> >
> > function xxx() {
> > return 12
> > }
> >
> > $ xxx
> >
> > $ echo $?
> > 12
> >
> > Agora, quando vc esta trabalhando com pipes, esse resultado é
> > armazenado em um vetor chamado PIPESTATUS, que guarda o retorno de
> > cada processo
> >
> > $ xxx | tee supimpa
> >
> > [EMAIL PROTECTED] ~
> > $ echo [EMAIL PROTECTED]
> > 12 0
> >
> > certo, mano ?
> >
> > Existem outras alternativas como usar sinais, mas por enquanto deve
> bastar ;-)
> >
> > --
> > Tiago B Peczenyj
> > Linux User #405772
> >
> > http://peczenyj.blogspot.com/
> >
>
>  
>



-- 
Abraços,
Julio
http://www.julioneves.com - Um livro sobre Bash completo e on-line
:wq


[As partes desta mensagem que não continham texto foram removidas]



Re: [shell-script] Re: Funções com comando tee

2007-10-30 Por tôpico Carlos Ferreira
Julio,
fiz o teste e deu retorno diferente:

#! /bin/bash
Install(){
echo "testes que só fazem perder tempo"
return 34
}

if ( Install | tee teste1.rep ) ##executa as funções e guarda os output
then
echo "bem"
echo Valores [EMAIL PROTECTED]
echo PIPE0=$PIPESTATUS[0] PIPE1=$PIPESTATUS[1]
else echo "mal"
fi
echo retorno=$?
echo pipe1=$PIPESTATUS[1] pipe2=$PIPESTATUS[2]
echo [EMAIL PROTECTED]

exit 0

Resultado obtido:

$ ./teste_pipe.sh
testes que só fazem perder tempo
bem
Valores vetPIPE=0
PIPE0=0[0] PIPE1=0[1]
retorno=0
pipe1=0[1] pipe2=0[2]
0


-- 
Carlos Ferreira
Analista de Desenvolvimento
Niterói - RJ - Brasil
LinuxUser  #271002
http://www.carnivorosemdentes.blogger.com.br/


Em 30/10/07, Julio C. Neves <[EMAIL PROTECTED]> escreveu:
>
>   Olá Miguel,
> vou te explicar o que está acontecendo, mas vc terá de estudar um pouco. É
> muito comum as pessoas confundirem o uso do if eo uso do cmd test. A
> melhor
> forma de vc aprender para sempre o uso destes cmds é ler este texto sobre
> o
> if<
> http://twiki.softwarelivre.org/bin/view/TWikiBar/TWikiBarPapo003#Comandos_Condicionais
> >e
> este
> texto sobre o test<
> http://twiki.softwarelivre.org/bin/view/TWikiBar/TWikiBarPapo004#O_Comando_test
> >.
> Vc não perderá mais de 30 min para aprender e se quiser aproveitar e ir
> convertendo para o Português Europeu, será muito bem vindo.
>
> O par de parênteses quadrados (que no Brasil chamamos de colchetes) é o
> cmd
> test, que serve para testar condições, porém sem dar resultado algum a não
> ser o $?. Nas outras linguagens que estamos habituados, quem testa
> condições
> é o if no shell, como vimos, é o test e o if testa se uma instrução foi
> bem
> executada ou não.
>
> Assim, o seu if deveria testar a execução da sua função. Para entender
> isso,
> deixe a função como vc definiu e faça o seguinte:
>
> $ if Install
> > then
> > echo Resultado OK
> > else
> > echo $?
> > echo Resultado NOK
> > fi
> testes que só fazem perder tempo
> 34
> Resultado NOK
>
> Até aí tudo funciona com o esperado, porém vejamos o que acontece se
> adicionarmos um tee:
>
> $ if Install | tee teste1.rep
> > then
> > echo Resultado OK
> > else
> > echo $?
> > echo Resultado NOK
> > fi
> testes que só fazem perder tempo
> Resultado OK
>
> Epa! Não era esse o resultado esperado! Vamos agora adicionar o vetor
> (array) PIPESTATUS que o Tiago mencionou para entender o que está
> acontecendo:
>
> $ if Install | tee teste1.rep
> > then
> > echo [EMAIL PROTECTED]
> > echo bem
> > else
> > echo mal
> > fi
> testes que só fazem perder tempo
> 34 0
> bem
>
> Ahhh, agora dá para entender o que houve... Repare que o retorno do pipe
> foi
> 34 e zero, e assim sendo o zero representa cmd bem executado e por isso
> ele
> executa os cmds do then e não os do else como esperávamos. A forma de
> contornar isso seria:
>
> $ Install | tee teste1.rep
> testes que só fazem perder tempo
> $ if [ ${PIPESTATUS[0]} -eq 34 ]
> > then
> > echo mal
> > else
> > echo bem
> > fi
> mal
>
> Abraços aos amigos portugueses,
> Julio
>
> Em 29/10/07, miguelcm86 <[EMAIL PROTECTED]>
> escreveu:
> >
> > Pensei que houvesse uma solução mais fácil.. estou a testar, mas além
> > de não perceber muito bem como é que isso funciona, eu chamo todas
> > pipesatus [0] e [1] e [2] e estão todos a 0.
> > aqui está o codigo:
> >
> > #! /bin/bash
> > Install(){
> > echo "testes que só fazem perder tempo"
> > return 34
> > }
> >
> > if ( Install | tee teste1.rep ) ##executa as funções e guarda os output
> > then echo "bem"
> > echo $PIPESTATUS[0] $PIPESTATUS[1]
> > else echo "mal"
> > fi
> > echo $PIPESTATUS[1] $PIPESTATUS[2]
> >
> > exit 0
> >
> > por mais que altere o 34 para o 0 e outro valor o output é sempre este:
> > [EMAIL PROTECTED]:~$ ./teste1.sh
> > testes que só fazem perder tempo
> > bem
> > 0[1] 0[2]
> > 0[1] 0[2]
> > [EMAIL PROTECTED]:~$
> >
> > isto assim diz que está a receber demasiados arguementos:
> > if [ `Install | tee teste1.rep` ]
> >
> > output:
> > ./teste1.sh: line 10: [: demasiados argumentos
> >
> > --- Em 
> > shell-script@yahoogrupos.com.br,
> > "Tiago Barcellos Peczenyj"
> > <[EMAIL PROTECTED]> escreveu
> >
> > >
> > > On 10/29/07, miguelcm86 <[EMAIL PROTECTED]> wrote:
> > > >
> > > > olá pessoal
> > > >
> > > > o que se passa é simples
> > > >
> > > > -Tenho que chamar uma função install, guardar todo o seu output
> > dentro
> > > > de um arquivo e saber qual o return que recebo da função install.
> > > > Estou a fazer desta maneira que está errada, queria saber como
> > resolvo.
> > > >
> > > > Install(){
> > > > ..
> > > > return variavel
> > > > }
> > > >
> > > > if [ Install | tee install.rep ]
> > > > then echo "return = 0"
> > > > else echo "return = 1"
> > > > fi
> > > >
> > > > uso o comando tee porque quero no install.rep todo o output no
> > ficheiro.
> > > >
> > >
> > > Miguel,
> > >
> > > a palavra "return" em uma função é semelhante ao exit de um script,
> > > porém interrompe apenas a função, e o seu resultado pode ser lid

Re: [shell-script] Re: Funções com comando tee

2007-10-30 Por tôpico Tiago Barcellos Peczenyj
Ah... mas veja só

echo "bem"
echo Valores [EMAIL PROTECTED]

tanto a variavel $? quanto o vetor PIPESTATUS se referem ao ultimo processo
executado pelo script.

nesse seu exemplo, vc esta vendo o codigo de retorno da instrução -> echo
"bem"

O ideal é guardar esse vetor assim:

MEUVETOR=( [EMAIL PROTECTED] )  # logo depois do comando

e ir para o abraço :)

On 10/30/07, Carlos Ferreira <[EMAIL PROTECTED]> wrote:
>
>   Julio,
> fiz o teste e deu retorno diferente:
>
> #! /bin/bash
> Install(){
> echo "testes que só fazem perder tempo"
> return 34
> }
>
> if ( Install | tee teste1.rep ) ##executa as funções e guarda os output
> then
> echo "bem"
> echo Valores [EMAIL PROTECTED]
> echo PIPE0=$PIPESTATUS[0] PIPE1=$PIPESTATUS[1]
> else echo "mal"
> fi
> echo retorno=$?
> echo pipe1=$PIPESTATUS[1] pipe2=$PIPESTATUS[2]
> echo [EMAIL PROTECTED]
>
> exit 0
>
> Resultado obtido:
>
> $ ./teste_pipe.sh
> testes que só fazem perder tempo
> bem
> Valores vetPIPE=0
> PIPE0=0[0] PIPE1=0[1]
> retorno=0
> pipe1=0[1] pipe2=0[2]
> 0
>
> --
> Carlos Ferreira
> Analista de Desenvolvimento
> Niterói - RJ - Brasil
> LinuxUser #271002
> http://www.carnivorosemdentes.blogger.com.br/
> 
>
> Em 30/10/07, Julio C. Neves <[EMAIL PROTECTED] <08years%40gmail.com>>
> escreveu:
> >
> > Olá Miguel,
> > vou te explicar o que está acontecendo, mas vc terá de estudar um pouco.
> É
> > muito comum as pessoas confundirem o uso do if eo uso do cmd test. A
> > melhor
> > forma de vc aprender para sempre o uso destes cmds é ler este texto
> sobre
> > o
> > if<
> >
> http://twiki.softwarelivre.org/bin/view/TWikiBar/TWikiBarPapo003#Comandos_Condicionais
> > >e
> > este
> > texto sobre o test<
> >
> http://twiki.softwarelivre.org/bin/view/TWikiBar/TWikiBarPapo004#O_Comando_test
> > >.
> > Vc não perderá mais de 30 min para aprender e se quiser aproveitar e ir
> > convertendo para o Português Europeu, será muito bem vindo.
> >
> > O par de parênteses quadrados (que no Brasil chamamos de colchetes) é o
> > cmd
> > test, que serve para testar condições, porém sem dar resultado algum a
> não
> > ser o $?. Nas outras linguagens que estamos habituados, quem testa
> > condições
> > é o if no shell, como vimos, é o test e o if testa se uma instrução foi
> > bem
> > executada ou não.
> >
> > Assim, o seu if deveria testar a execução da sua função. Para entender
> > isso,
> > deixe a função como vc definiu e faça o seguinte:
> >
> > $ if Install
> > > then
> > > echo Resultado OK
> > > else
> > > echo $?
> > > echo Resultado NOK
> > > fi
> > testes que só fazem perder tempo
> > 34
> > Resultado NOK
> >
> > Até aí tudo funciona com o esperado, porém vejamos o que acontece se
> > adicionarmos um tee:
> >
> > $ if Install | tee teste1.rep
> > > then
> > > echo Resultado OK
> > > else
> > > echo $?
> > > echo Resultado NOK
> > > fi
> > testes que só fazem perder tempo
> > Resultado OK
> >
> > Epa! Não era esse o resultado esperado! Vamos agora adicionar o vetor
> > (array) PIPESTATUS que o Tiago mencionou para entender o que está
> > acontecendo:
> >
> > $ if Install | tee teste1.rep
> > > then
> > > echo [EMAIL PROTECTED]
> > > echo bem
> > > else
> > > echo mal
> > > fi
> > testes que só fazem perder tempo
> > 34 0
> > bem
> >
> > Ahhh, agora dá para entender o que houve... Repare que o retorno do pipe
> > foi
> > 34 e zero, e assim sendo o zero representa cmd bem executado e por isso
> > ele
> > executa os cmds do then e não os do else como esperávamos. A forma de
> > contornar isso seria:
> >
> > $ Install | tee teste1.rep
> > testes que só fazem perder tempo
> > $ if [ ${PIPESTATUS[0]} -eq 34 ]
> > > then
> > > echo mal
> > > else
> > > echo bem
> > > fi
> > mal
> >
> > Abraços aos amigos portugueses,
> > Julio
> >
> > Em 29/10/07, miguelcm86 <[EMAIL 
> > PROTECTED]>
>
> > escreveu:
> > >
> > > Pensei que houvesse uma solução mais fácil.. estou a testar, mas além
> > > de não perceber muito bem como é que isso funciona, eu chamo todas
> > > pipesatus [0] e [1] e [2] e estão todos a 0.
> > > aqui está o codigo:
> > >
> > > #! /bin/bash
> > > Install(){
> > > echo "testes que só fazem perder tempo"
> > > return 34
> > > }
> > >
> > > if ( Install | tee teste1.rep ) ##executa as funções e guarda os
> output
> > > then echo "bem"
> > > echo $PIPESTATUS[0] $PIPESTATUS[1]
> > > else echo "mal"
> > > fi
> > > echo $PIPESTATUS[1] $PIPESTATUS[2]
> > >
> > > exit 0
> > >
> > > por mais que altere o 34 para o 0 e outro valor o output é sempre
> este:
> > > [EMAIL PROTECTED]:~$ ./teste1.sh
> > > testes que só fazem perder tempo
> > > bem
> > > 0[1] 0[2]
> > > 0[1] 0[2]
> > > [EMAIL PROTECTED]:~$
> > >
> > > isto assim diz que está a receber demasiados arguementos:
> > > if [ `Install | tee teste1.rep` ]
> > >
> > > output:
> > > ./teste1.sh: line 10: [: demasiados argumentos
> > >
> > > --- Em 
> > > shell-script@yahoogrupos.com.br,
>
> > > "Tiago Barcellos Peczenyj"
> > > <[EMAIL PROTECTED]> escreveu
> > >
> > > >
> > > > On 10/29/07, miguelcm86 <[EMAIL 

Re: [shell-script] Re: Funções com comando tee

2007-10-30 Por tôpico Julio C. Neves
Fala Carlos,
o resultado deu diferente pq vc fez o mesmo que o Miguel. Se vc reproduzir o
que eu fiz, vc terá os resultados corretos.

Acho melhor vc tb dar uma estudada nos links que passei para o Miguel, pq
notei que vc tb não conhece bem o uso dos cmd condicionais em Shell.

Abração,
Julio


Em 30/10/07, Carlos Ferreira <[EMAIL PROTECTED]> escreveu:
>
>   Julio,
> fiz o teste e deu retorno diferente:
>
> #! /bin/bash
> Install(){
> echo "testes que só fazem perder tempo"
> return 34
> }
>
> if ( Install | tee teste1.rep ) ##executa as funções e guarda os output
> then
> echo "bem"
> echo Valores [EMAIL PROTECTED]
> echo PIPE0=$PIPESTATUS[0] PIPE1=$PIPESTATUS[1]
> else echo "mal"
> fi
> echo retorno=$?
> echo pipe1=$PIPESTATUS[1] pipe2=$PIPESTATUS[2]
> echo [EMAIL PROTECTED]
>
> exit 0
>
> Resultado obtido:
>
> $ ./teste_pipe.sh
> testes que só fazem perder tempo
> bem
> Valores vetPIPE=0
> PIPE0=0[0] PIPE1=0[1]
> retorno=0
> pipe1=0[1] pipe2=0[2]
> 0
>
> --
> Carlos Ferreira
> Analista de Desenvolvimento
> Niterói - RJ - Brasil
> LinuxUser #271002
> http://www.carnivorosemdentes.blogger.com.br/
> 
>
> Em 30/10/07, Julio C. Neves <[EMAIL PROTECTED] <08years%40gmail.com>>
> escreveu:
> >
> > Olá Miguel,
> > vou te explicar o que está acontecendo, mas vc terá de estudar um pouco.
> É
> > muito comum as pessoas confundirem o uso do if eo uso do cmd test. A
> > melhor
> > forma de vc aprender para sempre o uso destes cmds é ler este texto
> sobre
> > o
> > if<
> >
> http://twiki.softwarelivre.org/bin/view/TWikiBar/TWikiBarPapo003#Comandos_Condicionais
> > >e
> > este
> > texto sobre o test<
> >
> http://twiki.softwarelivre.org/bin/view/TWikiBar/TWikiBarPapo004#O_Comando_test
> > >.
> > Vc não perderá mais de 30 min para aprender e se quiser aproveitar e ir
> > convertendo para o Português Europeu, será muito bem vindo.
> >
> > O par de parênteses quadrados (que no Brasil chamamos de colchetes) é o
> > cmd
> > test, que serve para testar condições, porém sem dar resultado algum a
> não
> > ser o $?. Nas outras linguagens que estamos habituados, quem testa
> > condições
> > é o if no shell, como vimos, é o test e o if testa se uma instrução foi
> > bem
> > executada ou não.
> >
> > Assim, o seu if deveria testar a execução da sua função. Para entender
> > isso,
> > deixe a função como vc definiu e faça o seguinte:
> >
> > $ if Install
> > > then
> > > echo Resultado OK
> > > else
> > > echo $?
> > > echo Resultado NOK
> > > fi
> > testes que só fazem perder tempo
> > 34
> > Resultado NOK
> >
> > Até aí tudo funciona com o esperado, porém vejamos o que acontece se
> > adicionarmos um tee:
> >
> > $ if Install | tee teste1.rep
> > > then
> > > echo Resultado OK
> > > else
> > > echo $?
> > > echo Resultado NOK
> > > fi
> > testes que só fazem perder tempo
> > Resultado OK
> >
> > Epa! Não era esse o resultado esperado! Vamos agora adicionar o vetor
> > (array) PIPESTATUS que o Tiago mencionou para entender o que está
> > acontecendo:
> >
> > $ if Install | tee teste1.rep
> > > then
> > > echo [EMAIL PROTECTED]
> > > echo bem
> > > else
> > > echo mal
> > > fi
> > testes que só fazem perder tempo
> > 34 0
> > bem
> >
> > Ahhh, agora dá para entender o que houve... Repare que o retorno do pipe
> > foi
> > 34 e zero, e assim sendo o zero representa cmd bem executado e por isso
> > ele
> > executa os cmds do then e não os do else como esperávamos. A forma de
> > contornar isso seria:
> >
> > $ Install | tee teste1.rep
> > testes que só fazem perder tempo
> > $ if [ ${PIPESTATUS[0]} -eq 34 ]
> > > then
> > > echo mal
> > > else
> > > echo bem
> > > fi
> > mal
> >
> > Abraços aos amigos portugueses,
> > Julio
> >
> > Em 29/10/07, miguelcm86 <[EMAIL PROTECTED]
> >
> > escreveu:
> > >
> > > Pensei que houvesse uma solução mais fácil.. estou a testar, mas além
> > > de não perceber muito bem como é que isso funciona, eu chamo todas
> > > pipesatus [0] e [1] e [2] e estão todos a 0.
> > > aqui está o codigo:
> > >
> > > #! /bin/bash
> > > Install(){
> > > echo "testes que só fazem perder tempo"
> > > return 34
> > > }
> > >
> > > if ( Install | tee teste1.rep ) ##executa as funções e guarda os
> output
> > > then echo "bem"
> > > echo $PIPESTATUS[0] $PIPESTATUS[1]
> > > else echo "mal"
> > > fi
> > > echo $PIPESTATUS[1] $PIPESTATUS[2]
> > >
> > > exit 0
> > >
> > > por mais que altere o 34 para o 0 e outro valor o output é sempre
> este:
> > > [EMAIL PROTECTED]:~$ ./teste1.sh
> > > testes que só fazem perder tempo
> > > bem
> > > 0[1] 0[2]
> > > 0[1] 0[2]
> > > [EMAIL PROTECTED]:~$
> > >
> > > isto assim diz que está a receber demasiados arguementos:
> > > if [ `Install | tee teste1.rep` ]
> > >
> > > output:
> > > ./teste1.sh: line 10: [: demasiados argumentos
> > >
> > > --- Em shell-script@yahoogrupos.com.br
> ,
> > > "Tiago Barcellos Peczenyj"
> > > <[EMAIL PROTECTED]> escreveu
> > >
> > > >
> > > > On 10/29/07, miguelcm86 <[EMAIL PROTECTED]> wrote:
> > > > >
> > > > > olá pessoal
> > > > >
> > > > > o

Re: [shell-script] Re: Funções com comando tee

2007-10-30 Por tôpico Carlos Ferreira
Valeu Julio e Thiago.
Acho que desta forma fica evidente o erro que eu estava cometendo:

#! /bin/bash
Install(){
echo "testes que só fazem perder tempo"
return 34
}

if Install | tee teste1.rep  ##executa as funções e guarda os output
then
echo Valores [EMAIL PROTECTED]
echo "bem"
echo Valores [EMAIL PROTECTED]
echo PIPE0=$PIPESTATUS[0] PIPE1=$PIPESTATUS[1]
else echo "mal"
fi

exit 0

Resultado Obtido:

$ ./teste_pipe.sh
testes que só fazem perder tempo
Valores vetPIPE=34 0
bem
Valores vetPIPE=0
PIPE0=0[0] PIPE1=0[1]


[]s
-- 
Carlos Ferreira
Analista de Desenvolvimento
Niterói - RJ - Brasil
LinuxUser  #271002
http://www.carnivorosemdentes.blogger.com.br/


Em 30/10/07, Julio C. Neves <[EMAIL PROTECTED]> escreveu:
>
>   Fala Carlos,
> o resultado deu diferente pq vc fez o mesmo que o Miguel. Se vc reproduzir
> o
> que eu fiz, vc terá os resultados corretos.
>
> Acho melhor vc tb dar uma estudada nos links que passei para o Miguel, pq
> notei que vc tb não conhece bem o uso dos cmd condicionais em Shell.
>
> Abração,
> Julio
>
> Em 30/10/07, Carlos Ferreira <[EMAIL PROTECTED]>
> escreveu:
>
> >
> > Julio,
> > fiz o teste e deu retorno diferente:
> >
> > #! /bin/bash
> > Install(){
> > echo "testes que só fazem perder tempo"
> > return 34
> > }
> >
> > if ( Install | tee teste1.rep ) ##executa as funções e guarda os output
> > then
> > echo "bem"
> > echo Valores [EMAIL PROTECTED]
> > echo PIPE0=$PIPESTATUS[0] PIPE1=$PIPESTATUS[1]
> > else echo "mal"
> > fi
> > echo retorno=$?
> > echo pipe1=$PIPESTATUS[1] pipe2=$PIPESTATUS[2]
> > echo [EMAIL PROTECTED]
> >
> > exit 0
> >
> > Resultado obtido:
> >
> > $ ./teste_pipe.sh
> > testes que só fazem perder tempo
> > bem
> > Valores vetPIPE=0
> > PIPE0=0[0] PIPE1=0[1]
> > retorno=0
> > pipe1=0[1] pipe2=0[2]
> > 0
> >
> > --
> > Carlos Ferreira
> > Analista de Desenvolvimento
> > Niterói - RJ - Brasil
> > LinuxUser #271002
> > http://www.carnivorosemdentes.blogger.com.br/
> > 
> >
> > Em 30/10/07, Julio C. Neves <[EMAIL PROTECTED] 
> > <08years%40gmail.com><08years%40gmail.com>>
> > escreveu:
> > >
> > > Olá Miguel,
> > > vou te explicar o que está acontecendo, mas vc terá de estudar um
> pouco.
> > É
> > > muito comum as pessoas confundirem o uso do if eo uso do cmd test. A
> > > melhor
> > > forma de vc aprender para sempre o uso destes cmds é ler este texto
> > sobre
> > > o
> > > if<
> > >
> >
> http://twiki.softwarelivre.org/bin/view/TWikiBar/TWikiBarPapo003#Comandos_Condicionais
> > > >e
> > > este
> > > texto sobre o test<
> > >
> >
> http://twiki.softwarelivre.org/bin/view/TWikiBar/TWikiBarPapo004#O_Comando_test
> > > >.
> > > Vc não perderá mais de 30 min para aprender e se quiser aproveitar e
> ir
> > > convertendo para o Português Europeu, será muito bem vindo.
> > >
> > > O par de parênteses quadrados (que no Brasil chamamos de colchetes) é
> o
> > > cmd
> > > test, que serve para testar condições, porém sem dar resultado algum a
> > não
> > > ser o $?. Nas outras linguagens que estamos habituados, quem testa
> > > condições
> > > é o if no shell, como vimos, é o test e o if testa se uma instrução
> foi
> > > bem
> > > executada ou não.
> > >
> > > Assim, o seu if deveria testar a execução da sua função. Para entender
> > > isso,
> > > deixe a função como vc definiu e faça o seguinte:
> > >
> > > $ if Install
> > > > then
> > > > echo Resultado OK
> > > > else
> > > > echo $?
> > > > echo Resultado NOK
> > > > fi
> > > testes que só fazem perder tempo
> > > 34
> > > Resultado NOK
> > >
> > > Até aí tudo funciona com o esperado, porém vejamos o que acontece se
> > > adicionarmos um tee:
> > >
> > > $ if Install | tee teste1.rep
> > > > then
> > > > echo Resultado OK
> > > > else
> > > > echo $?
> > > > echo Resultado NOK
> > > > fi
> > > testes que só fazem perder tempo
> > > Resultado OK
> > >
> > > Epa! Não era esse o resultado esperado! Vamos agora adicionar o vetor
> > > (array) PIPESTATUS que o Tiago mencionou para entender o que está
> > > acontecendo:
> > >
> > > $ if Install | tee teste1.rep
> > > > then
> > > > echo [EMAIL PROTECTED]
> > > > echo bem
> > > > else
> > > > echo mal
> > > > fi
> > > testes que só fazem perder tempo
> > > 34 0
> > > bem
> > >
> > > Ahhh, agora dá para entender o que houve... Repare que o retorno do
> pipe
> > > foi
> > > 34 e zero, e assim sendo o zero representa cmd bem executado e por
> isso
> > > ele
> > > executa os cmds do then e não os do else como esperávamos. A forma de
> > > contornar isso seria:
> > >
> > > $ Install | tee teste1.rep
> > > testes que só fazem perder tempo
> > > $ if [ ${PIPESTATUS[0]} -eq 34 ]
> > > > then
> > > > echo mal
> > > > else
> > > > echo bem
> > > > fi
> > > mal
> > >
> > > Abraços aos amigos portugueses,
> > > Julio
> > >
> > > Em 29/10/07, miguelcm86 <[EMAIL PROTECTED]
> 
> > >
> > > escreveu:
> > > >
> > > > Pensei que houvesse uma solução mais fácil.. estou a testar, mas
> além
> > > > de não perceber muito bem como é que isso funciona, eu cham

[shell-script] Script SMS

2007-10-30 Por tôpico Vinícius Millão Winckler
Boa Tarde,

 

Alguém conhece um script p/ envio de SMS para operadoras Nacionais ?? tipo
BrT, Claro, Tim e Vivo Rio Grande do Sul ??

 

Mas tem que ser via Shell mesmo tipo “comandosms [celular] [mensagem]” e
mais nada.

 

Agradeço.

 


http://www.servicoop.com.br/images3/spacer.gif



http://www.saudepas.com.br/imagens/logo_servicoop.gif

http://www.servicoop.com.br/images3/spacer.gif

Vinícius Millão Winckler
(51) 3024-0099
  [EMAIL PROTECTED]
  www.servicoop.com.br


http://www.servicoop.com.br/images3/spacer.gif

 

 



[As partes desta mensagem que não continham texto foram removidas]