Loop no S/n [RESOLVIDO]

1. Loop no S/n [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 05/12/2016 - 21:11h

pessoas ... tenho o script

#!/bin/bash
comando 1....
comando 2....
comando 3....
echo "quer fazer de novo ? S/n"
read resposta
if [ $resposta -eq "s" ]; then
repete o script
else
exit


como implemento o loop no caso da resposta for 's' ???


  


2. MELHOR RESPOSTA

Kevin Welisson
kevin Welisson

(usa Outra)

Enviado em 07/12/2016 - 00:38h

Segue o codigo abaixo amigo, funcionou ok aki.


x="s"
while [ 1 ];
do
echo "quer fazer de novo ? S/n"
read resposta
if [ $resposta != $x ]; then
exit
fi
done

3. Re: Loop no S/n

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 07/12/2016 - 00:47h

kevin Welisson escreveu:

Segue o codigo abaixo amigo, funcionou ok aki.


x="s"
while [ 1 ];
do
echo "quer fazer de novo ? S/n"
read resposta
if [ $resposta != $x ]; then
exit
fi
done


legal velho ... eu até tinha feito já a parada mas não fechei o tópico pq estava esperando resposta mais "profissional"

seguinte ... me explica três coisas

1 - no caso eu jogaria os comandos entre o 'do' e o 'echo' né ???
2 - qual a moral do '[ 1 ]' depois do 'while' ???
3 - para eu entender direitinho ... se a resposta for diferente da variável segue o script .... aí no caso o 'else' seria o proprio loop, é assim q interpreta ???

___________________________________________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"


4. Re: Loop no S/n

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 07/12/2016 - 02:02h

Mauriciodez escreveu:

pessoas ... tenho o script

#!/bin/bash
comando 1....
comando 2....
comando 3....
echo "quer fazer de novo ? S/n"
read resposta
if [ $resposta -eq "s" ]; then
repete o script
else
exit


como implemento o loop no caso da resposta for 's' ???


Bom dia Mauricio...
Crie uma função com os comandos e caso a resposta seja "s", chame-a novamente.
Exemplo:

#!/bin/bash
#FUNÇãO COMANDOS COM LOOPING.

COMANDOS() {
comando 1....
comando 2....
comando 3....
read -p "Repetir os Comandos? [S/N]: " -n1 RESP
if [[ $RESP = +(S|s) ]];then #Valida a RESP com "S" e com "s"
COMANDOS
else
exit
fi
COMANDOS


Com o "test" "reduzido" . . .

#!/bin/bash
#FUNÇãO COMANDOS COM LOOPING.

COMANDOS() {
comando 1....
comando 2....
comando 3....
read -p "Repetir os Comandos? [S/N]: " -n1 RESP
[[ $RESP = +(S|s) ]] && COMANDOS || exit
COMANDOS


Uma opção mais complexa é: while/continue/break

Att.:
Marcelo Oliver




5. Re: Loop no S/n

Perfil removido
removido

(usa Nenhuma)

Enviado em 07/12/2016 - 05:35h

resp="S"
until [ "$resp" == "N" ]
do
#COMANDOS ...
resp=""
while [ "$resp" != "S" -a "$resp" != "N" ]
do
read "Deseja continuar S/N?" -n1 resp
resp=`echo -n $resp | tr sn SN`
done
#MAIS COMANDOS ...
done


----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



6. Re: Loop no S/n [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 07/12/2016 - 16:43h

msoliver escreveu:
#!/bin/bash
#FUNÇãO COMANDOS COM LOOPING.

COMANDOS() {
comando 1....
comando 2....
comando 3....
read -p "Repetir os Comandos? [S/N]: " -n1 RESP
if [[ $RESP = +(S|s) ]];then #Valida a RESP com "S" e com "s"
COMANDOS
else
exit
fi
COMANDOS



Marcelo ... isso não finciona !!!

#!/bin/bash
COMANDOS() {
echo "comando1"
echo "comando2"
echo "comando3"
read -p "Repetir os Comandos? [S/N]: " -n1 RESP
if [[ $RESP = +(S|s) ]];then #Valida a RESP com "S" e com "s"
COMANDOS
else
exit
fi
COMANDOS


line 13: erro de sintaxe: fim prematuro do arquivo 

___________________________________________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"


7. Re: Loop no S/n

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 07/12/2016 - 19:24h

Mauriciodez escreveu:

msoliver escreveu:
#!/bin/bash
#FUNÇãO COMANDOS COM LOOPING.

COMANDOS() {
comando 1....
comando 2....
comando 3....
read -p "Repetir os Comandos? [S/N]: " -n1 RESP
if [[ $RESP = +(S|s) ]];then #Valida a RESP com "S" e com "s"
COMANDOS
else
exit
fi
COMANDOS



Marcelo ... isso não finciona !!!

#!/bin/bash
COMANDOS() {
echo "comando1"
echo "comando2"
echo "comando3"
read -p "Repetir os Comandos? [S/N]: " -n1 RESP
if [[ $RESP = +(S|s) ]];then #Valida a RESP com "S" e com "s"
COMANDOS
else
exit
fi
COMANDOS


line 13: erro de sintaxe: fim prematuro do arquivo 

___________________________________________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

Desculpa ae mestre . . . .KKKKKK
Cometi um grave erro, mas já corrigi, me perdoe . . .

#!/bin/bash
#FUNÇãO COMANDOS COM LOOPING.

COMANDOS() {
comando 1....
comando 2....
comando 3....
read -p "Repetir os Comandos? [S/N]: " RESP
if [[ $RESP = +(S|s) ]];then #Valida a RESP com "S" e com "s"
COMANDOS
else
exit
fi
} #TINHA ESQUECIDO DE FECHAR
COMANDOS


Att.:
msoliver





8. Re: Loop no S/n

Paulo
paulo1205

(usa Ubuntu)

Enviado em 08/12/2016 - 16:48h

msoliver escreveu:

Desculpa ae mestre . . . .KKKKKK
Cometi um grave erro, mas já corrigi, me perdoe . . .

#!/bin/bash
#FUNÇãO COMANDOS COM LOOPING.

COMANDOS() {
comando 1....
comando 2....
comando 3....
read -p "Repetir os Comandos? [S/N]: " RESP
if [[ $RESP = +(S|s) ]];then #Valida a RESP com "S" e com "s"
COMANDOS
else
exit
fi
} #TINHA ESQUECIDO DE FECHAR
COMANDOS


Essa ideia é muito ruim. Uma função que chama a si mesma inúmeras vezes vai consumindo cada vez mais espaço da pilha de chamadas a funções. Após um certo número de execuções, a pilha vai acabar estourando o limite de memória alocado para ela.

Por mais que esse limite seja grande, e execuções no mundo real possam não passar nem perto do limite, é melhor evitar chamadas recursivas de funções, deixando-as apenas nos casos em que for necessária (ou que possa ser otimizada para não abusar da pilha, algo que alguns compiladores conseguem fazer, mas que eu não sei se se aplica ao shell -- infelizmente, porém, o exemplo que você mostrou não é facilmente otimizável e, do jeito como está, daria problema mesmo em linguagens compiladas).

Para execução repetida de um bloco de comandos, a recomendação geral é utilizar estruturas de repetição que não dependam de pilha. Para algo que teha de executar pelo menos uma vez, eis minha sugestão.

while : ; do
comandos
read continua
[[ "$continua" = S -o "$continua" = s ]] || break
done



9. Re: Loop no S/n

Kevin Welisson
kevin Welisson

(usa Outra)

Enviado em 22/12/2016 - 17:08h

Mauriciodez escreveu:

[quote]kevin Welisson escreveu:

Segue o codigo abaixo amigo, funcionou ok aki.


x="s"
while [ 1 ];
do
echo "quer fazer de novo ? S/n"
read resposta
if [ $resposta != $x ]; then
exit
fi
done


legal velho ... eu até tinha feito já a parada mas não fechei o tópico pq estava esperando resposta mais "profissional"

seguinte ... me explica três coisas

1 - no caso eu jogaria os comandos entre o 'do' e o 'echo' né ???
Exatamente, entre eles. Porém voce deve lembra que será executado os comandos colocados nessa posição no mínimo uma vez.

2 - qual a moral do '[ 1 ]' depois do 'while' ???
Funciona pra deixar o loop infinito, é o mesmo que while(true) em c++ por exemplo.

3 - para eu entender direitinho ... se a resposta for diferente da variável segue o script .... aí no caso o 'else' seria o proprio loop, é assim q interpreta ???
Pode interpretar dessa forma sim, pq vc está interessado apenas se a resposta for não, que no caso entra no if e este sai do loop, caso a resposta seja SIM, entra no else, como não existe, é o próprio loop.




10. Re: Loop no S/n

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 23/12/2016 - 00:05h

kevin Welisson escreveu:
..


pode crer então o meu seria assim ??

x="s"
while [ 1 ];
do
comando 1....
comando 2....
comando 3....
echo "quer fazer de novo ? S/n"
read resposta
if [ $resposta != $x ]; then
exit
fi
done

___________________________________________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"


11. Re: Loop no S/n [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 23/12/2016 - 00:10h

paulo1205 escreveu:
Para execução repetida de um bloco de comandos, a recomendação geral é utilizar estruturas de repetição que não dependam de pilha. Para algo que teha de executar pelo menos uma vez, eis minha sugestão.
done[/code]


seria assim velho ???

while : ; do
comando 1....
comando 2....
comando 3....
echo "quer fazer de novo ? S/n"
read continua
[[ "$continua" = S -o "$continua" = s ]] || break
done


qual é a moral do 'break' ???
___________________________________________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"


12. Re: Loop no S/n [RESOLVIDO]

Kevin Welisson
kevin Welisson

(usa Outra)

Enviado em 24/12/2016 - 11:43h

Mauriciodez escreveu:

kevin Welisson escreveu:
..


pode crer então o meu seria assim ??

x="s"
while [ 1 ];
do
comando 1....
comando 2....
comando 3....
echo "quer fazer de novo ? S/n"
read resposta
if [ $resposta != $x ]; then
exit
fi
done

___________________________________________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"


Isso aí mano.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts