voltar ao inicio de um while

1. voltar ao inicio de um while

pdcc pirata
pdcc

(usa Freespire)

Enviado em 25/08/2011 - 13:17h

OLá


Eu tenho um script com um while dentro de outro. ALguém sabe se existe alguma instrução que permita sair do while e depois voltar ao inicio do primeiro?

obrigado


  


2. Re: voltar ao inicio de um while

Mauricio Souza Klein
Hebang

(usa Arch Linux)

Enviado em 25/08/2011 - 13:25h

É só dar um break no while mais interno.


3. Re: voltar ao inicio de um while

pdcc pirata
pdcc

(usa Freespire)

Enviado em 25/08/2011 - 13:30h

Mas ele não está a retornar. Dá uma olhadela:



while : ; do

read resposta_passeios


if [ $resposta_passeios = "c" ];

then

echo "Qual o nome que deseja dar ao novo campo dos $nome_passeios com os respectivos números de ruas?"

read campo_passeios

psql -d $nomemuni -c "Alter table $nome_passeios add column $campo_passeios integer" && break


elif [ $resposta_passeios = "e" ];

then

echo "Digite o nome do campo da tabela $nome_passeios que vai obter os números de rua"

while : ; do

read campo_passeios

psql -d $nomemuni -c "Update $nome_passeios set $campo_passeios = 999" && break

MSG_ERR='does not exist'
ERR='relation "$campo_rua" does not exist'

GET_RST=$(echo $ERR | cut -d ' ' -f 2-)

if [ "$GET_RST" != "$MSG_ERR" ]

then echo "\d $nome_passeios" | psql $nomemuni
echo "

O campo digitado não existe!
A tabela $nome_passeios tem as caracteristicas descritas em cima.
Tente de novo ou prima Ctrl + C para sair."

read voltar

elif [$voltar = "v"

then break

fi
done
break


else echo "

A opção escolhida não é válida, tente de novo por favor ou prima Ctrl + C para sair."

fi
done


4. Re: voltar ao inicio de um while

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 25/08/2011 - 13:38h

Olha o seu elif
elif [$voltar = "v"

tá faltando coisa ai, veja
elif [ $voltar = "v" ]

Abraços


5. Re: voltar ao inicio de um while

pdcc pirata
pdcc

(usa Freespire)

Enviado em 25/08/2011 - 13:39h

foi um erro só ao copiar. no script tenho e não funciona


6. Re: voltar ao inicio de um while

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 25/08/2011 - 13:44h

faça um debug do seu script para analisar erro, chame-o assim:

bash -x ./nome_script

E veja as saídas que vão aparecer no terminal, assim fica mais fácil analisar o erro e encontrar o problema.

Abraços


7. Re: voltar ao inicio de um while

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 25/08/2011 - 13:59h

Use a instrução 'break' informando o número do loop mais interno que você quer controlar (e que no seu caso parece ser o 2). Exemplo:

while true; do
...
...
while true; do
...
if [ <se condição for falsa volte ao 1o while> ]; then
break 2
fi

done
done


8. Re: voltar ao inicio de um while

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 25/08/2011 - 22:35h

Olá @SMarcell este break 2 eu não sabia :)


9. Re: voltar ao inicio de um while

pdcc pirata
pdcc

(usa Freespire)

Enviado em 26/08/2011 - 05:34h

Mesmo assim não consigo. Reparem:



while : ; do

read resposta

if [ $resposta = "c" ];

then

echo "Qual o nome que deseja dar ao novo campo da tabela $nome_ruas com o respectivo número de rua?"

read campo_rua

psql -d $nomemuni -c "alter table $nome_ruas add column $campo_rua serial"

psql -d $nomemuni -c "UPDATE $nome_passeios SET $campo_passeios = (SELECT $campo_rua FROM $nome_ruas ORDER BY ST_Distance( Line_Interpolate_Point_Alter($nome_ruas.wkb_geometry, 0.5), $nome_passeios.wkb_geometry) ASC LIMIT 1)" && break










#Se o campo já existir previamente



elif [ $resposta = "e" ];

then

echo "Digite o nome do campo com o número de rua da tabela $nome_ruas"

while : ; do

read campo_rua


psql -d $nomemuni -c "UPDATE $nome_passeios SET $campo_passeios = (SELECT $campo_rua FROM $nome_ruas ORDER BY ST_Distance( Line_Interpolate_Point_Alter($nome_ruas.wkb_geometry, 0.5), $nome_passeios.wkb_geometry) ASC LIMIT 1)" && break

MSG_ERR='does not exist'
ERR='relation "$campo_rua" does not exist'

GET_RST=$(echo $ERR | cut -d ' ' -f 2-)

if [ "$GET_RST" != "$MSG_ERR" ]

then echo "\d $nome_ruas" | psql $nomemuni
echo "

O campo digitado não existe!
A tabela $nome_ruas tem as caracteristicas descritas em cima.
Tente de novo ou prima Ctrl + C para sair, ou prima v para sair."


read voltar

elif [ $voltar = "v" ]

then break && break



fi
done
break


else echo "

A opção escolhida não é válida, tente de novo por favor, ou prima Ctrl + C para sair."

fi
done


10. Re: voltar ao inicio de um while

pdcc pirata
pdcc

(usa Freespire)

Enviado em 26/08/2011 - 05:35h

Experimentei com dois break mas nada. Eu quero que seja possivel voltar a digitar entre escolher ou criar depois de o usario tiver selecionado escolher


11. while dentro de while enquanto.....

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 26/08/2011 - 07:20h

[citando]
Eu tenho um script com um while dentro de outro. ALguém sabe se existe alguma instrução que permita sair do while e depois voltar ao inicio do primeiro?
[/citando]

1- Quando entrar no Script o usuário precisa optar entre opções?
2- Quando escolher a opção ele ficará dentro do 2º while ou irá sempre retornar ao 1º ?
3- Quando ele não pode voltar ao 1º while ?
4- Em que momento ele deve sair do 1º while e abandonar o Script ?

Vou tentar responder com um Script genérico a estas perguntas. Se as rotinas puderem ser usadas dentro do teu contexto ótimo.





12. Protótipo: Faça enquanto... while dentro de while

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 26/08/2011 - 08:32h


#!/bin/bash
#
# passeios.sh
# -----------------------------------------------------------------------------
# Necessidade1: Testar se existe campo na tabela.
# -----------------------------------------------------------------------------
# Se existe o campo, retorna aviso.
# Se campo não existe na tabela, adicionar.
# -----------------------------------------------------------------------------
# Necessidade2: Existindo o campo na tabela, fazer update neste campo e demais.
# -----------------------------------------------------------------------------
# Necessidade3: Fazer loop em menu principal até usar opção sair.(manual)
# -----------------------------------------------------------------------------
# TODO: Basicamente este Script espera o nome de um campo na tabela e grava
# o nome do campo na tabela e a informação necessária.
# Fica aguardando receber outro campo ou protosuário escolhe sair.
# -----------------------------------------------------------------------------
# Protótipo de fases versão 0.1
# -----------------------------------------------------------------------------

function _campo_existe()
{
:
# Faz teste para saber se o campo existe mesmo.
# Mosta mensagem de erro alertando que campo não existe.
# Retorna True ou false 0,ou 1 para a função que o chamou.
}
function _grava_campo()
{
:
# Vai fazer a gravação do campo.
# Só tem acesso nesta função se o campo realmente existe.
_campo_existe;
# Comando pra gravar o campo vai aqui.
}

function _cad_campo()
{
: #Vai tentar o cadastro do campo.
_campo_existe; #Testa se o campo não existe. Se falso faz o cadastro.
_cad_campo; # Só faz o cadastro do campo se não existir.
}
function _opcoes()
{
:
# c= Cadastrar campo, a=alterar campos s=Sair
# Fica sempre mostrando as opções até escolher [S] sair.
}

function main() {
_opcoes;
}

main ${@};

exit



============================================
Confira se a lógica é esta mesmo.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts