Shell script - While [RESOLVIDO]

1. Shell script - While [RESOLVIDO]

Gustavo
rs23

(usa Ubuntu)

Enviado em 01/05/2010 - 13:53h

Não estou conseguindo fazer o script terminar quando o usuário digita fim


#!/bin/bash

read -p "Entre com o número: " numero
num=$numero

while [ "$num" -ne "fim" ]
do

if [ "$num" -eq 1 -o "$num" -eq 2 ];then
echo "éh primo"
else
for ((i=2;i<$num;i++));do
aux=`echo $(($num%$i))`
if [ "$aux" -eq 0 ]; then
echo "não é primo"
break
else
if [ "$i" -eq `echo $(($num-1))` ]; then
echo "primo"
fi
fi
done
fi
read -p "Deseja continuar 1-sim 0-não : " cont
done

O script gera erro dizendo que o valor de num tem que ser inteiro.




  


2. MELHOR RESPOSTA

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 02/05/2010 - 10:02h

Tah blz! Se for só pra digitar fim e o script sair você pode fazer assim:
Leia do teclado. Se for a palavra fim, então break no loop infinito.
Se não for a palavra fim, veja se a coisa digitada é primo ou não.

Tae:

#!/bin/bash

# Loop infinito

while true
do
# Le o numero. Se o usuario digitar fim, entao break no loop.
read -p "Entre com o número (fim para terminar): " numero
[ "$numero" = "fim" ] && break ;

if [ "$numero" -eq 1 -o "$numero" -eq 2 ];then
echo "éh primo"
else
for ((i=2;i<$numero;i++));do
aux=`echo $(($numero%$i))`
if [ "$aux" -eq 0 ]; then
echo "não é primo"
break
else
if [ "$i" -eq `echo $(($numero-1))` ]; then
echo "primo"
fi
fi
done
fi
done

t+

3. Re: Shell script - While [RESOLVIDO]

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 01/05/2010 - 14:02h

Ok! A comparação deve ser feita com o operador != que é usado para strings.
(-eq, -lt, -gt .. etc são para números inteiros)

Achei meio estranho a elaboração de seu script. Você faz o "Deseja continuar" e lê para a variável
cont, sendo que, a variável num que é testada pelo loop while.

Bem, qualquer coisa é só postar.

t+


4. Re: Shell script - While [RESOLVIDO]

Gustavo
rs23

(usa Ubuntu)

Enviado em 01/05/2010 - 15:03h

Daemonio

Mas fazendo a comparação != "fim" também gera erro.




5. Re: Shell script - While [RESOLVIDO]

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 01/05/2010 - 17:50h

Troque o -ne do while por !=, vai funcionar sim. xD

O script roda sem erros mas não faz o que você está querendo. Você lê o número no início mas depois não o atualiza dentro do loop while.
Então se, o usuário digitar 10, o script entrará em loop infinito imprimindo "nao é primo" para sempre.

Tomei a liberdade e alterei seu script de forma que, quando o usuário digitar 0, o script finaliza.

#!/bin/bash

continuar=1
while [ $continuar -ne 0 ]
do

# Leitura direto em num e dentro do loop.
read -p "Entre com o número: " num
# 1 == primo? :S
if [ "$num" -eq 1 -o "$num" -eq 2 ];then
echo "éh primo"
else
for ((i=2;i<$num;i++));do
aux=`echo $(($num%$i))`
if [ "$aux" -eq 0 ]; then
echo "não é primo"
break
else
if [ "$i" -eq `echo $(($num-1))` ]; then
echo "primo"
fi
fi
done
fi
read -p "Deseja continuar 1-sim 0-não : " continuar
done

Acho que era isso que você queria.

Espero ter ajudado.
t+


6. Re: Shell script - While [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 01/05/2010 - 18:50h

Para ficar mais pratico deveria:

read -n 1 -p "Deseja continuar? S/sim | Qualquer outra tecla/não: " OP

case $OP in
S)exit;;
*)sleep 0.0032s;;
esac

done

Ou seja digite S para sair qualquer outra tecla para continuar. Pratico não


7. Re: Shell script - While [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 01/05/2010 - 18:52h

AAA, e dentro de um loop "infinito":

while : ; do
etc, bla, bla
case
...
done

Entendeu???




8. Re: Shell script - While [RESOLVIDO]

Gustavo
rs23

(usa Ubuntu)

Enviado em 01/05/2010 - 19:00h

Daemonio

O script deve ser finalizado quando o usuário digitar fim



9. Na boquinha...

Perfil removido
removido

(usa Nenhuma)

Enviado em 01/05/2010 - 19:15h

- Controle de erros sensivelmente melhorado.
- Faça as modificações necessárias ao seu caso.
- Atenção para o "loop pseudo inifinito", o typeset e o parâmetro -n do read



#!/bin/bash

# by ./.ronin
# htttp://wolferineblues.com


while : ; do

read -p "Entre com um número: " nr

typeset -i num=$nr;

if [ "$num" -eq 1 -o "$num" -eq 2 ];then

echo "$num é primo!"

else

for ((i=2;i<$num;i++));do

aux=`echo $(($num%$i))`

if [ "$aux" -eq 0 ]; then

echo "${num} não é primo!!"
break;
else

if [ "$i" -eq `echo $(($num-1))` ]; then

echo "$num é primo!!!"

fi

fi

done

fi

read -n 1 -p "Deseja continuar? [ N/não | S/sim Opção padrão: sim] " OP

case $OP in
N) echo ' '; exit;;
S) echo ' ';;
*) echo ' ';;
esac;

done

exit




10. Re: Shell script - While [RESOLVIDO]

Gustavo
rs23

(usa Ubuntu)

Enviado em 03/05/2010 - 01:08h

Daemonio

Obrigado pela ajuda




11. Obrigado! Apesar do meu problema ser bem diferente, a sua estrutura While me ajudou muito!

André Braga
Z8AXLGUNS

(usa Ubuntu)

Enviado em 27/08/2016 - 23:42h

Daemonio escreveu:

Troque o -ne do while por !=, vai funcionar sim. xD

O script roda sem erros mas não faz o que você está querendo. Você lê o número no início mas depois não o atualiza dentro do loop while.
Então se, o usuário digitar 10, o script entrará em loop infinito imprimindo "nao é primo" para sempre.

Tomei a liberdade e alterei seu script de forma que, quando o usuário digitar 0, o script finaliza.

#!/bin/bash

continuar=1
while [ $continuar -ne 0 ]
do

# Leitura direto em num e dentro do loop.
read -p "Entre com o número: " num
# 1 == primo? :S
if [ "$num" -eq 1 -o "$num" -eq 2 ];then
echo "éh primo"
else
for ((i=2;i<$num;i++));do
aux=`echo $(($num%$i))`
if [ "$aux" -eq 0 ]; then
echo "não é primo"
break
else
if [ "$i" -eq `echo $(($num-1))` ]; then
echo "primo"
fi
fi
done
fi
read -p "Deseja continuar 1-sim 0-não : " continuar
done

Acho que era isso que você queria.

Espero ter ajudado.
t+









Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts