Shell retorna erro de substituição incorreta

1. Shell retorna erro de substituição incorreta

Danúbio Lima
danubio

(usa Debian)

Enviado em 08/02/2021 - 09:45h

Galera, estou aprendendo Shell Script e fiz um programa simples para dizer se um número é par ou não. O usuário vai dizer se quer participar do programa, e caso a resposta seja sim, ele informa um número aleatório. Mas toda vez que executo retorna o erro "linha 7: ${RESṔOSTA}==${SIM}: substituição incorreta"

O código está dessa forma:
#!/bin/bash

echo "Quer sair do programa ou continuar?(s/n)"
read RESPOSTA
SIM="s"
NAO="n"
if [[ ${RESṔOSTA}==${SIM} ]]
then
echo "Diga um numero:"
read NUMERO
RESULTADO=$((${NUMERO}%2))
if [[ ${RESULTADO} -eq 0 ]]
then
echo "Numero par"
elif [[ ${RESULTADO} -eq 1 ]]
then
echo "Numero impar"
fi
else
echo "Obrigado por participar"
fi

echo "Ate mais"


Alguém sabe o que pode estar errado?


  


2. Re: Shell retorna erro de substituição incorreta

aguamole
aguamole

(usa KUbuntu)

Enviado em 08/02/2021 - 10:32h

A correção é assim:
#!/bin/bash

echo "Quer sair do programa ou continuar?(s/n)"
read RESPOSTA
SIM="s"
NAO="n"
if [[ $RESPOSTA == $SIM ]]
then
echo "Diga um numero:"
read NUMERO
RESULTADO=$(( $NUMERO % 2 ))
if [[ $RESULTADO -eq 0 ]]
then
echo "Numero par"
elif [[ $RESULTADO -eq 1 ]]
then
echo "Numero impar"
fi
else
echo "Obrigado por participar"
fi

echo "Ate mais"

Mas eu sugiro fazer assim:
#!/usr/bin/env bash

echo "Quer sair do programa ou continuar?(s/n)"
read RESPOSTA
SIM="s"
NAO="n"

if [[ $RESPOSTA == $SIM ]]
then
read -p "Diga um numero:" NUMERO
RESULTADO=$(( $NUMERO % 2 ))

if [[ $RESULTADO -eq 0 ]]
then
echo "Numero par"
else
echo "Numero impar"
fi
else
echo "Opção invalida!"
fi

echo "Obrigado por participar
Ate mais"
O codigo fica muito mas limpo.

CPU i5-8400 GTX 750 SofRaid 4xSSD 16GB DDR4 mesmo assim uso Lubuntu.


3. Re: Shell retorna erro de substituição incorreta

Matheus
pylm

(usa Gentoo)

Enviado em 08/02/2021 - 10:44h

Shell check é muito bom pra esse tipo de problema de sintaxe, olha o que ele diz do teu código:



Line 7:
if [[ ${RESṔOSTA}==${SIM} ]]
^-- SC2077: You need spaces around the comparison operator.




4. Re: Shell retorna erro de substituição incorreta

aguamole
aguamole

(usa KUbuntu)

Enviado em 08/02/2021 - 10:55h

pylm escreveu:

Shell check é muito bom pra esse tipo de problema de sintaxe, olha o que ele diz do teu código:



Line 7:
if [[ ${RESṔOSTA}==${SIM} ]]
^-- SC2077: You need spaces around the comparison operator.



Sim ele não separo o operador == das variáveis.

CPU i5-8400 GTX 750 SofRaid 4xSSD 16GB DDR4 mesmo assim uso Lubuntu.


5. Re: Shell retorna erro de substituição incorreta

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 08/02/2021 - 18:48h

danubio escreveu:

Galera, estou aprendendo Shell Script e fiz um programa simples para dizer se um número é par ou não.
O usuário vai dizer se quer participar do programa, e caso a resposta seja sim, ele informa um número aleatório. Mas toda vez que executo retorna o erro "linha 7: ${RESPOSTA}==${SIM}: substituição incorreta"

O código está dessa forma:
#!/bin/bash

echo "Quer sair do programa ou continuar?(s/n)"
read RESPOSTA
SIM="s"
NAO="n"
if [[ ${RESṔOSTA}==${SIM} ]]
then
echo "Diga um numero:"
read NUMERO
RESULTADO=$((${NUMERO}%2))
if [[ ${RESULTADO} -eq 0 ]]; then
echo "Numero par"
elif [[ ${RESULTADO} -eq 1 ]]
then
echo "Numero impar"
fi
else
echo "Obrigado por participar"
fi

echo "Ate mais"


Alguém sabe o que pode estar errado?

Boa noite Danubio, o erro está no acento no "P" de RESPOSTA
segue, simplificado.

#!/bin/bash

read -p "Quer continuar? ([Ss]|[Nn]): " resp
[[ "$resp" =~ ^[Ss]$ ]] && echo -e "Continuando...\n" || { echo -e "Bye...\n";exit;}
read -p "Digite um numero: " num
((${num}%2==0)) && echo "Numero: $num, é par" || echo "Numero: $num, é impar"

Veja que avaliei o "s" e o "S".
Checagem Par/Impar: ((${num}%2==0))
-------------------------------------------------------
O sed avaliando se é par ou impar:
sed 's/[02468]$/& => Par/;s/[0-9]$/& => Impar/' <<< "$num"



______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________
Nota de esclarecimento:
O comando: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p',
faz parte da minha assinatura.
O qual, "filtra" a página: "https://www.vivaolinux.com.br/termos-de-uso/",
Mostrando o seguinte:

Se você sanou sua dúvida ou resolveu um problema a partir de um
tópico criado, é extremamente recomendável que acesse o tópico e
marque-o como "RESOLVIDO". E mais recomendável ainda que você eleja
como melhor resposta a que mais lhe ajudou.


______________________________________________________________________







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts