Erro no laço de repetição for. ME AJUDEM!!! [RESOLVIDO]

1. Erro no laço de repetição for. ME AJUDEM!!! [RESOLVIDO]

Kayo
kayorodrigo

(usa Ubuntu)

Enviado em 27/09/2016 - 15:40h

Boa tarde, é o seguinte,
Todo programa que eu tento fazer para o shell script, ultilizando o laço for, está dando erro e isso está me impedindo de estudar.
Sou iniciante no Linux e não consigo resolver esse erro.
Eu já olhei em algumas perguntas semelhantes aqui do forúm e algumas pediam pra mudar o /bash para /dash ou para /sh que iria dar certo, mas em todas as tentativas o erro persistiu.
Ja separei a linha de comando do for de tudo quanto é jeito mas o erro persiste, estou sendo prejudicado nas aulas por conta deste erro e não conseguir acompanhar as explicações que o professor tenta passar durante a aula.
Estou a quase uma semana tentando resolver esse problema...
Por favor, se alguém puder me ajudar eu agradeceria muito. Obrigado desde já, segue, logo abaixo, o comando que estou usando e o erro que esta sendo apresentado no terminal:

Linhas de comando do gedit:
#!/bin/bash

for ((loop=0;loop<3;loop++));do
echo $loop
done
exit

Erro no terminal do linux:
l.sh: 3: l.sh: Syntax error: Bad for loop variable

Obs: Ja testei o mesmo laço em dois sistemas, Ubuntu 16.04 e Ubuntu 14.04


  


2. Re: Erro no laço de repetição for. ME AJUDEM!!! [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 27/09/2016 - 16:26h

kayorodrigo escreveu:

Boa tarde, é o seguinte,
Todo programa que eu tento fazer para o shell script, ultilizando o laço for, está dando erro e isso está me impedindo de estudar.
Sou iniciante no Linux e não consigo resolver esse erro.
Eu já olhei em algumas perguntas semelhantes aqui do forúm e algumas pediam pra mudar o /bash para /dash ou para /sh que iria dar certo, mas em todas as tentativas o erro persistiu.
Ja separei a linha de comando do for de tudo quanto é jeito mas o erro persiste, estou sendo prejudicado nas aulas por conta deste erro e não conseguir acompanhar as explicações que o professor tenta passar durante a aula.
Estou a quase uma semana tentando resolver esse problema...
Por favor, se alguém puder me ajudar eu agradeceria muito. Obrigado desde já, segue, logo abaixo, o comando que estou usando e o erro que esta sendo apresentado no terminal:

Linhas de comando do gedit:
#!/bin/bash

for ((loop=0;loop<3;loop++));do
echo $loop
done
exit

Erro no terminal do linux:
l.sh: 3: l.sh: Syntax error: Bad for loop variable
Obs: Ja testei o mesmo laço em dois sistemas, Ubuntu 16.04 e Ubuntu 14.04


Boa tarde kayorodrigo.
A sintaxe (comando) esta correta.
Algum problema com o bash ....
Qual a versão?
echo $BASH_VERSION
Localização?
which bash
Verifique a var de ambiente "$BASH"
echo $BASH
Se executar o comando diretamente no terminal, apresenta o erro?
for ((x=0;x<=5;x++));do echo $x;done

No aguardo,
marcelo oliver




3. Erro no laço de repetição FOR. ME AJUDEM!!!

Kayo
kayorodrigo

(usa Ubuntu)

Enviado em 27/09/2016 - 16:37h

Boa tarde kayorodrigo.
A sintaxe (comando) esta correta.
Algum problema com o bash ....
Qual a versão?
echo $BASH_VERSION
Localização?
which bash
Verifique a var de ambiente "$BASH"
echo $BASH
Se executar o comando diretamente no terminal, apresenta o erro?
for ((x=0;x<=5;x++));do echo $x;done
No aguardo,
marcelo oliver


A versão do bash é:
4.3.46(1)-release
A localização é:
/bin/bash
Quando verifiquei a var do ambiente $BASH com o comando echo $BASH apareceu isso:
/bin/bash
Não o comando não apresenta erro ao ser executado no terminal, executa normal imprimindo os número 0, 1 e 2 na tela.
Eu já não sei o que fazer, preciso muito de ajuda pra resolver isso, obrigado desde já!






4. Re: Erro no laço de repetição for. ME AJUDEM!!! [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 27/09/2016 - 16:48h

kayorodrigo escreveu:

Boa tarde kayorodrigo.
A sintaxe (comando) esta correta.
Algum problema com o bash ....
Qual a versão?
echo $BASH_VERSION
Localização?
which bash
Verifique a var de ambiente "$BASH"
echo $BASH
Se executar o comando diretamente no terminal, apresenta o erro?
for ((x=0;x<=5;x++));do echo $x;done
No aguardo,
marcelo oliver


A versão do bash é:
4.3.46(1)-release
A localização é:
/bin/bash
Quando verifiquei a var do ambiente $BASH com o comando echo $BASH apareceu isso:
/bin/bash
Não o comando não apresenta erro ao ser executado no terminal, executa normal imprimindo os número 0, 1 e 2 na tela.
Eu já não sei o que fazer, preciso muito de ajuda pra resolver isso, obrigado desde já!

Tudo correto.
Como voce esta "executando" o script
./nomedoscript
É isso?



5. Re: Erro no laço de repetição for. ME AJUDEM!!! [RESOLVIDO]

Kayo
kayorodrigo

(usa Ubuntu)

Enviado em 27/09/2016 - 16:56h

Tudo correto.
Como voce esta "executando" o script
./nomedoscript
É isso?


Cara estou executando com o comando "sh "nomedoarquivo", no entendo eu não coloco .sh no final do nome que é dado ao arquivo do gedit que esta com o mesmo dentro dele.
Já tentei colocar e mesmo assim não funciona.
Acabo de tentar executar colocar "./nomedoarquivo" ou "./nomedoarquivo.sh" e apresenta um erro diferente, segue o erro logo abaixo:
bash: ./loop.sh: Permissão negada

Eu já tentei de todas as formas mas não sei o que fazer.

OBS: Se eu fizer um comando comum, por exemplo:

#!/bin/bash
echo teste
sleep 2
exit

Na tela é impresso o nome teste, o programa dorme por 2 segundos. Ou seja o programa funciona normal, o único problema é quando eu vou usar o for.



6. Re: Erro no laço de repetição FOR. ME AJUDEM!!!

thinomar
thinomar

(usa Linux Mint)

Enviado em 27/09/2016 - 17:14h

Agora está explicado... /bin/sh é um link do DASH e não do BASH. A sintaxe for (( ... )) é do bash, e não do dash. Sendo assim, não adianta colocar o interpretador sendo o bash (#!/bin/bash) e executar o script com o comando sh. Execute o script assim:
/caminho/do/script 
ou
bash /caminho/do/script 
Se não funcionar, dê permissão de execução
chmod +x /caminho/do/script 
e tente novamente.


7. Re: Erro no laço de repetição FOR. ME AJUDEM!!!

Kayo
kayorodrigo

(usa Ubuntu)

Enviado em 27/09/2016 - 17:20h

thinomar escreveu:

Agora está explicado... /bin/sh é um link do DASH e não do BASH. A sintaxe for (( ... )) é do bash, e não do bash. Sendo assim, não adianta colocar o interpretador sendo o bash (#!/bin/bash) e executar o script com o comando sh. Execute o script assim:
/caminho/do/script 
ou
bash /caminho/do/script 
Se não funcionar, dê permissão de execução
chmod +x /caminho/do/script 
e tente novamente.


Amigo, eu não estou usando "#!/bin/sh" eu estou usando "#!/bin/bash" como eu já havia falado eu já tentei usar o seguintes apontadores:
"#!/bin/bash" ;
"#!/bin/sh";
"#!/bin/dash"
.

Nenhum deres me serviu , sempre o erro persiste em aparecer, como eu disse, não sei o que eu faço.
Espero poder resolver o problema hoje pois estou sendo prejudicado por não está acompanhando o conteúdo.

OBS: mesmo usando o "chmod +x /caminho/do/arquivo" o erro ainda persiste. Infelizmente.





8. Re: Erro no laço de repetição for. ME AJUDEM!!! [RESOLVIDO]

thinomar
thinomar

(usa Linux Mint)

Enviado em 27/09/2016 - 17:26h

Veja bem, a questão que estou abordando não é a linha de shebang (interpretador), mas sim como você está executando o script.
Você está usando algo assim:
for (( i=0 ; i <= 5 ; i++))
do
echo $i
done

Essa sintaxe usando "((...))" no for pertence ao BASH e não ao SH. Se você chama o script utilizando o comando do interpretador, a linha de shebang (#!/bin/bash) acaba por ser ignorada, já que o código já está sendo interpretado.

--- RESUMO ---
Não chame o script assim:
sh script.sh 

Chame assim:
bash script.sh 



9. Re: Erro no laço de repetição for. ME AJUDEM!!! [RESOLVIDO]

Kayo
kayorodrigo

(usa Ubuntu)

Enviado em 27/09/2016 - 17:30h

thinomar escreveu:

Veja bem, a questão que estou abordando não é a linha de shebang (interpretador), mas sim como você está executando o script.
Você está usando algo assim:
for (( i=0 ; i <= 5 ; i++))
do
echo $i
done

Essa sintaxe usando "(())" no for pertence ao BASH e não ao SH (dash). Se você chama o script utilizando o comando do interpretador, a linha de shebang (#!/bin/bash) acaba por ser ignorada, já que o código já está sendo interpretado.

--- RESUMO ---
Não chame o script assim:
sh script.sh 

Chame assim:
bash script.sh 


Amigo, acabou de dar certo, muito obrigado pela paciência.
Eu estava tendo exito em todos os programas que estava fazendo, ultilizando o if e o else eu sempre chamava o programa com o sh e sempre dava certo, não sabia que se tivesse o laço for no programa precisaria chamar com o bash e não com o sh.
Muito obrigado mesmo. Me ajudou muito!



10. Re: Erro no laço de repetição for. ME AJUDEM!!! [RESOLVIDO]

thinomar
thinomar

(usa Linux Mint)

Enviado em 27/09/2016 - 17:59h

Eu acabo usando o bash sempre, por hábito, ao invés do sh. A razão é essa da sintaxe do for com "((...))" e a de "[[...]]", que geralmente é usada em condicionais e testes, é do bash apenas, e não do sh, como eu disse anteriormente.

Enfim, que bom que seu problema foi resolvido.


11. Re: Erro no laço de repetição for. ME AJUDEM!!! [RESOLVIDO]

Kayo
kayorodrigo

(usa Ubuntu)

Enviado em 27/09/2016 - 18:01h

thinomar escreveu:

Eu acabo usando o bash sempre, por hábito, ao invés do sh. A razão é essa da sintaxe do for com "((...))" e a de "[[...]]", que geralmente é usada em condicionais e testes, é do bash apenas, e não do sh, como eu disse anteriormente.

Enfim, que bom que seu problema foi resolvido.


Obrigado, mesmo, de verdade.
Agora eu vou poder acompanhar o conteúdo.
Abraço, brohter, tudo de bom pra você!








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts