erro de sintaxe no bash [RESOLVIDO]

1. erro de sintaxe no bash [RESOLVIDO]

marli
marlirodrigues

(usa Outra)

Enviado em 09/10/2016 - 11:40h

Bom dia.

Porque ocorre isso:
erro de sintaxe próximo do "token" não esperado 'done'.

Já alterei os comandos várias vezes, porém ocorre isso e não roda. Como faço pra corrigir? Este é o último comando que usei, mas todos acontece o mesmo.

#!/bin/bash
clear
while [ $i<=100]; do
if ($num%2==0)
echo "i ";
echo "\n";
$i-$i+2;
read i
done




  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 09/10/2016 - 14:12h

marlirodrigues escreveu:

Bom dia.

Porque ocorre isso:
erro de sintaxe próximo do "token" não esperado 'done'.

Já alterei os comandos várias vezes, porém ocorre isso e não roda. Como faço pra corrigir? Este é o último comando que usei, mas todos acontece o mesmo.

#!/bin/bash
clear
while [ $i<=100]; do
if ($num%2==0)
echo "i ";
echo "\n";
$i-$i+2;
read i
done



Boa tarde Marli.
Inúmeros erros na sintaxe dos comandos . . .
Tem ERRO em:
Condição do while "[ $i<=100]"
Qual o VALOR de "$i"? (na condição acima)
Sintaxe do "if"
"teste" da expressão: "($num%2==0)" COMPLETAMENTE ERRADO!!!
Qual o VALOR de "$num" ?
echo "\n"; => imprime "n". Faça echo -e "\n"
$i-$i+2 => Qual o objetivo desse comando? Esse comando não EXISTE!!! "i-i=0, 0+2 =2"
Qual LINUX vc utiliza?
Recomendo fortemente que LEIA o man bash!
E também:
https://goo.gl/hGb6DG 


marcelo oliver


3. erro de sintaxe no bash

marli
marlirodrigues

(usa Outra)

Enviado em 09/10/2016 - 15:39h

Marcelo se eu fizesse um script com número de 0 a 100 no while para imprimir os pares, dessa forma então estaria correto? Preciso entender esses detalhes.
#!/bin/bash/
clear
i=0
while [ $i <= 100]; do
if [ $ i %2 ==0];
echo "i"
i= $[$i +2]
done


4. Re: erro de sintaxe no bash

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 09/10/2016 - 16:19h

marlirodrigues escreveu:

Marcelo se eu fizesse um script com número de 0 a 100 no while para imprimir os pares, dessa forma então estaria correto?
Preciso entender esses detalhes.
#!/bin/bash/
clear
i=0
while [ $i <= 100]; do #Use [ $i -le 100 ] Ou ((i<=100))
if [ $ i %2 ==0]; faltou o "then" #Use (((i%2)==0))
echo "i"
Faltou o "fi"
i= $[$i +2] #ERRADO
done


Marli, continua ERRADO.....
O erro começa na 1ª LINHA
#!/bin/bash/
Corrigido:
#!/bin/bash
Errado: [ $i <= 100]
Corrigido: [ $i -le 100 ]
Veja:
 Opções do comando test ou [
Comparação Numérica
-lt É menor que (LessThan)
-gt É maior que (GreaterThan)
-le É menor igual (LessEqual)
-ge É maior igual (GreaterEqual)
-eq É igual (EQual)
-ne É diferente (NotEqual)

Tudo corrigido: Vai de ZERO a CEM e TESTA cada NúMERO
#!/bin/bash
tput clear
i=0
while [ $i -le 100 ];do
sleep 0.25
if (((i%2)==0));then
echo "$i:PAR"
else
echo "$i:IMPAR"
fi
let i++ #Ou i=$((i+1))
done


O "if . . . then ... else"
Pode ser substituído por:
(((i%2)==0)) && echo "$i:PAR" || echo "$i:IMPAR"
Já que " inicia com ZERO e SOMA 2", sempre será PAR, logo, não é necessário testar. . . .
#!/bin/bash
tput clear
i=0
while [ $i -le 100 ];do
sleep 0.25 #Pode tirar esse "sleep"
i=$((i+2))
echo "i:$i"
done

O mesmo resultado, com o "laço" for . . .
for ((x=0;x<=100;x=$((x+2))));do echo $x;done 

Att.:
Marcelo Oliver



5. erro de sintaxe no bash

marli
marlirodrigues

(usa Outra)

Enviado em 09/10/2016 - 18:09h

Marcelo, só pra esclarecer essa parte:
i=$((i+2))
não pode ter espaço?
Só roda se tiver os dois parenteses ?
Com sua explicação pude entender mais.



6. Re: erro de sintaxe no bash

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 09/10/2016 - 22:08h

marlirodrigues escreveu:

Marcelo, só pra esclarecer essa parte:
i=$((i+2))
não pode ter espaço?
Só roda se tiver os dois parenteses ?
Com sua explicação pude entender mais.

----------------------------------------------------
Marli, boa noite.
A expressão matemática, i=$((i+2))
pode ter espaços DENTRO dos PARÊNTESIS, exemplo:
i=$(( i + 2 ))
A SINTAXE é com DOIS PARÊNTESIS, que indica para o BASH que é uma expressão matemática.
Já, dessa forma:
i= $(( i + 2 ))
Acusa erro
Aproveitando. . .
No teste:
[ $i -eq 0 ] && echo "CERTO" || echo "ERRADO"
Se "colar" no(s) colchete(s), acusa ERRO.
Ex:
[$i -eq 0] && echo "CERTO" || echo "ERRADO"

E Não ESQUEÇA:
Se a resposta foi ESCLARECEDORA, MARQUE-A como A MELHOR,
Dessa forma, ganho uns pontos no fórum . . .


É isso....
Qquer duvida, é só perguntar....

Att.:
Marcelo Oliver






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts