Logo Hardware.com.br
Caspper
Caspper Super Participante Registrado
865 Mensagens 3 Curtidas

Shell Codigo de retorno

#1 Por Caspper 20/10/2008 - 11:38
Pessoal,

Eu estou fazendo um script shell e preciso definir o codigo de retorno, como eu não estou usando função não posso usar o return, alguém sabe como fazer isso, pensei em definir na mão o $? mas ele não aceitou. É como se fosse assim:

if [ condição verdadeira ]
then
Deu certo
"return 0"
else
Não OK
"return 1"


Porém os comandos não tem retorno próprio eu que tenho que difinir as saidas, pois todas são 0.

Valeu
peczenyj
peczenyj Geek Registrado
3K Mensagens 75 Curtidas
#2 Por peczenyj
20/10/2008 - 12:55
Tudo depende do que vc esta fazendo.

Veja este exemplo:
peczenyj@dl128144:~$ function f_false() { echo "f_false()" ; return 1 ; }
peczenyj@dl128144:~$ function f_true() { echo "f_true()" ; return 0 ; }
peczenyj@dl128144:~$ f_false
f_false()
peczenyj@dl128144:~$ echo $?
1
peczenyj@dl128144:~$ f_true
f_true()
peczenyj@dl128144:~$ echo $?
0
peczenyj@dl128144:~$ f_true && echo 'verdade' || echo 'mentira'
f_true()
verdade
peczenyj@dl128144:~$ f_false && echo 'verdade' || echo 'mentira'
f_false()
mentira


Agora se vc quer pegar o codigo de retorno de scripts vc tem que usar exit no lugar do return.

if ./script.sh ; then 
echo 'sucesso'
else
echo 'falha'
fi


Nesse caso sera sucesso no caso de um exit ou exit 0
exit 1 ou exit n com n maior que zero retorna um $? maior que zero, respectivamente. exit termina um script, return termina uma função. Uma função de shell script não tem o mesmo comportamento de uma função C, pois o return altera a $?, entendido ?
Caspper
Caspper Super Participante Registrado
865 Mensagens 3 Curtidas
#3 Por Caspper
20/10/2008 - 16:28
peczenyj disse:
Tudo depende do que vc esta fazendo.

Veja este exemplo:
peczenyj@dl128144:~$ function f_false() { echo "f_false()" ; return 1 ; }
peczenyj@dl128144:~$ function f_true() { echo "f_true()" ; return 0 ; }
peczenyj@dl128144:~$ f_false
f_false()
peczenyj@dl128144:~$ echo $?
1
peczenyj@dl128144:~$ f_true
f_true()
peczenyj@dl128144:~$ echo $?
0
peczenyj@dl128144:~$ f_true && echo 'verdade' || echo 'mentira'
f_true()
verdade
peczenyj@dl128144:~$ f_false && echo 'verdade' || echo 'mentira'
f_false()
mentira


Agora se vc quer pegar o codigo de retorno de scripts vc tem que usar exit no lugar do return.

if ./script.sh ; then 
echo 'sucesso'
else
echo 'falha'
fi


Nesse caso sera sucesso no caso de um exit ou exit 0
exit 1 ou exit n com n maior que zero retorna um $? maior que zero, respectivamente. exit termina um script, return termina uma função. Uma função de shell script não tem o mesmo comportamento de uma função C, pois o return altera a $?, entendido ?


Vou tentar denovo aqui

Valeu
Regards,
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal