|
From: | Tiago Peczenyj |
Subject: | Re: [shell-script] Dúvida com return |
Date: | Tue, 4 Mar 2014 14:17:31 +0100 |
Fala Willy,não quero me meter na conversa de vcs, mas como o Tiago é muito meu amigo, creio que ele não vai brigar comigo, nem deixar de pagar o chope. ;)Mas vc entenderá tudinho sobre esse tema se ler este capítulo do Papo de Botequim, que tem um exemplo exatamente igual a esse, que o Tiago respondeu, veja:while read arqdo((i++)) # assim nao eh necessario inicializar iecho "$i: $arq"done < <(ls)echo "No diretorio corrente (`pwd`) existem $i arquivos"Alias, o ideal seria ler o Papo de Botequim completo e se embebedar de conhecimento de Shell... ;)Abcs,Julio@juliobash
Próximos cursos de Shell
Cidade
Local
Período
Rio de Janeiro
10-14/03
Dou treinamento de shell em qualquer cidade.
Para detalhes, entre em contato por email ouecho 436233889341364416673541503686485725801923229706P | dcEm 4 de março de 2014 00:05, Willy Romão <address@hidden> escreveu:
Tiago,
Muito obrigado.
Era exatamente isso, pode explicar melhor o que aconteceu? E também explicar a linha "done < <(ls /home)"?
Não é um teste de diretorio, a função que eu escrevi era apenas um exemplo didático para explicar o meu problema.
Willy Romão
On 03/03/2014 08:18 PM, Tiago Peczenyj wrote:
Ola
o problema esta no pipe.
quando vc faz
comando | ...
o que esta depois do pipe é executado em um outro processo. logo o return "de lá" não é visto pela função "de cá".
veja se isto funciona:
while read diretorio; do
if [[ ${diretorio} = ${usuario} ]]; then
echo "Existe o diretorio do usuario"
return 0
fi
done < <(ls /home)
OU
for diretorio in /home/*; do
if [[ ${diretorio} = ${usuario} ]]; then
echo "Existe o diretorio do usuario"
return 0
fi
done
Por outro lado, se vc quer testar se o diretorio existe, vc pode fazer test -d como
if [[ -d diretorio ]]; thenecho "existe"fi
2014-03-04 0:05 GMT+01:00 Willy Romão <address@hidden>:
Senhores,
Estou com dúvida na utilização do return em certos casos, talvez vocês
poderiam me ajudar a entender:
Caso comum do uso do return:
funcao()
{
echo "Essa eh minha funcao"
return 1
echo "Esse echo nunca vai ser executado, pq o return ja vai
retornar o valor 0 para quem chamou a funcao"
}
A saída dessa função, será apenas o primeiro echo, e a variável $? vai
ter o valor 1 do retorno.
Até aí, entendido. O caso que eu estou tendo problema:
funcao()
{
usuario=$1
ls /home |
while read diretorio; do
if [[ ${diretorio} = ${usuario} ]]; then
echo "Existe o diretorio do usuario"
return 0
fi
done
echo "O diretorio desse usuario nao existe"
return 1
}
Nesse caso, quando a variavel ${diretorio} fosse igual a ${usuario},
deveria executar o comando (echo "Existe o diretorio do usuario") e
depois o return 0, saindo da funcao e retornando 0 para quem chamou. Mas
isso não acontece, o while continua e acaba chegando na mensagem de erro
e no retorno 1. Por que isso acontece?
*A função é uma analogia, o caso real é diferente.
Obrigado a todos,
Willy Romão
--
Tiago B. Peczenyj
Linux User #405772
http://about.me/peczenyj
--
Tiago B. Peczenyj
Linux User #405772
http://about.me/peczenyj
[Prev in Thread] | Current Thread | [Next in Thread] |