Resolvendo Erro de Sintaxe Bash: Guia Completo para Iniciantes

A programação no terminal Bash do Linux tornou-se uma prática comum no mundo da codificação. Tanto engenheiros de software quanto estudantes que estão aprendendo linguagens de programação frequentemente se deparam com diversos erros. Se você tem visto repetidamente mensagens de erro como “erro de sintaxe próximo ao token inesperado ‘(‘” ou “erro de sintaxe Bash próximo ao token inesperado”, pode ser útil seguir os métodos descritos neste artigo para melhorar suas habilidades de programação. Leia os métodos na ordem em que são apresentados e corrija os erros em seu arquivo de linha de comando.

Como Corrigir o Erro de Sintaxe Bash Próximo a um Token Inesperado

O Linux Bash é um interpretador de linha de comando para sistemas baseados em Linux, servindo como um substituto para o Bourne Shell (sh). Arquivos de script Bash no Linux utilizam a extensão .sh. Problemas de formatação no código de um script podem gerar um erro de sintaxe. Quando o erro ocorre próximo a um caractere como ‘(’, o shell o identifica, exibindo a linha com o erro no Terminal e interrompendo a verificação do restante do script. Portanto, é necessário corrigir o erro na linha de comando específica e prosseguir para as próximas linhas para corrigir outros erros de token inesperado no script. As causas para um erro de sintaxe próximo a um token inesperado no Linux Bash são detalhadas abaixo:

  • Codificação com Sequências de Escape: Sequências de escape ou aspas mal utilizadas em scripts Bash podem levar a erros. É crucial que essas sequências e aspas sejam usadas corretamente para evitar esses erros.

  • Sintaxe Incorreta no Arquivo de Codificação: Erros de sintaxe podem surgir quando os comandos são escritos de forma inadequada, como ao alterar a ordem dos loops.

  • Uso Incorreto de Comandos: Atribuições de valores incorretas ou outros usos impróprios de comandos podem resultar em erros de sintaxe.

  • Incompatibilidade de SO: Incompatibilidades de shell entre sistemas Unix e DOS podem levar a erros inesperados.

  • Problemas em Scripts Shell Bash: Scripts de shell Bash copiados de outros sistemas podem gerar erros de token inesperado devido a problemas de formatação ou incompatibilidade.

Para fins ilustrativos, considere um arquivo chamado `exemplo.sh` criado em um script Linux Bash, que inclui linhas de comando com possíveis erros de sintaxe e comandos comuns que podem ser usados em um script de shell:

str= ‘Primeira linha de comando de ‘(arquivo de exemplo)’ no script’
str= [(1,2),(3,4)]
if[ $dia == “seg” ] then
 echo “seg”
else
 echo “não seg”
fi
for VARIAVEL in {0..2}; then
do echo comando1; echo comando2; echo comando3; echo comando4; done
while true; do if [ $dia == “seg” ]; then echo “seg”; else echo “não seg”; done; fi

Método 1: Correção Manual de Erros em Cada Linha de Comando

A primeira abordagem para corrigir erros envolve a revisão manual de cada linha de comando no script. Este método detalha as etapas para resolver erros de sintaxe próximos a tokens inesperados em scripts de linha de comando. O processo para corrigir o erro de token inesperado no Terminal é descrito a seguir:

  1. Execute o arquivo no Terminal digitando o comando `./exemplo.sh` e pressionando Enter.
  2. Observe as linhas que geram erros de token inesperado no resultado.
  3. Corrija cada erro seguindo os métodos discutidos abaixo e salve o arquivo.
  4. Execute o arquivo novamente para verificar se os erros foram corrigidos.

Etapa I: Visualizar o Conteúdo do Arquivo

O primeiro passo para resolver erros de sintaxe é visualizar o conteúdo do arquivo no Terminal. Caso existam problemas com o arquivo, você poderá ter dificuldades em visualizá-lo. A prática comum é executar o arquivo usando o comando `./exemplo.sh`, mas isso não permite a edição do conteúdo. Abaixo estão as opções para visualizar e modificar o arquivo, permitindo a correção de erros de sintaxe próximos a um token inesperado ‘(‘:

Opção 1: Comando CAT

Use o comando `cat` para exibir o conteúdo do script. Digite `cat -v exemplo.sh` no Terminal para ver o arquivo com o erro de token inesperado.

Nota 1: `exemplo.sh` é usado como exemplo, você deve usar o nome do seu arquivo.

Nota 2: O comando `cat -v` é usado para exibir todos os caracteres invisíveis, como retornos de carro ou espaços sem quebra.

Opção 2: Comando VX

Se o comando `cat` não funcionar, tente `vx` para visualizar e alterar o conteúdo do arquivo. Digite `sh -vx ./exemplo.sh` no Terminal para abrir o arquivo.

Opção 3: Comando od -a

Se houver caracteres invisíveis nas linhas de comando, use `od -a` para visualizá-los. Digite `od -a exemplo.sh` para ler o arquivo e modificar o código.

Etapa II: Remover Quebras de Linha do Windows

Se o script de shell contiver quebras de linha do Windows, use comandos do console para removê-las, e copie o código para um novo arquivo para corrigir os erros.

Digite o seguinte comando no Terminal para salvar o conteúdo do arquivo em outro chamado `corrigidoexemplo.sh`, removendo as quebras de linha do Windows:

tr -d 'r' < exemplo.sh > corrigidoexemplo.sh

Etapa III: Definir Permissões para o Novo Arquivo

Você precisa definir permissões para editar e executar o novo arquivo. Use o comando `chmod 755 corrigidoexemplo.sh` no Terminal para dar as permissões necessárias e executar o arquivo. Agora você pode visualizar o arquivo corrigido e ajustar a formatação para corrigir os erros de sintaxe.

Etapa IV: Formatar o Código no Arquivo

O próximo passo é ajustar a formatação de cada linha de comando manualmente. Abaixo estão as opções para formatar o arquivo para corrigir o erro de sintaxe próximo ao token inesperado ‘(’:

Opção 1: Substituir Aspas Simples por Aspas Duplas

Se estiver usando aspas simples, substitua-as por aspas duplas para corrigir o erro de sintaxe. No arquivo `exemplo.sh`, remova as linhas que têm aspas simples e substitua-as por aspas duplas. Por exemplo, altere o código para `str= “Primeira linha de comando de “(arquivo de exemplo)” no script”`.

Nota: Aspas duplas são necessárias para comandos com parâmetros como `str= “[(1,2),(3,4)]”`.

Opção 2: Adicionar $ a Strings

Ao adicionar valores de string ao script, use `$` para evitar erros de sintaxe. Modifique as linhas de comando com valores de string, como em `str= $ ‘Primeira linha de comando de ‘(arquivo de exemplo)’ no script’`.

Observação: Se usar `$` em um valor de string, você pode evitar a sequência de escape de barra invertida, pois as linhas de comando são decodificadas pelo padrão ANSI C. Isso também permite usar aspas simples em vez de duplas.

Opção 3: Converter Tabulações em Espaços

Certifique-se de que os espaços entre instruções sejam espaços, não tabulações. Se você está recebendo erros no Cygwin, converta as tabulações em espaços para corrigir os erros. Por exemplo:

do echo comando1;   echo comando2;         echo comando3;          echo comando4;         done

Deve ser reescrito como:

do echo comando1; echo comando2; echo comando3; echo comando4; done

Opção 4: Usar Caracteres de Escape

Se você estiver utilizando um caractere especial do bash, use um caractere de escape (barra invertida) para evitar erros. Parênteses `()` são caracteres especiais no bash, e precisam de um caractere de escape. Por exemplo, `str= ‘Primeira linha de comando de ‘(arquivo de exemplo)’ no script’` não geraria erro se o caractere de escape fosse usado.

Opção 5: Usar Espaços entre Caracteres

O script de shell identifica comandos e instruções pelos seus valores padrão. Assegure-se de que há espaço adequado entre os caracteres para que o shell possa identificar o comando corretamente. No código, a falta de um espaço entre `if` e `[` causa um erro, pois o shell não reconhece `if[`. Modifique para `if [ $dia == “seg” ]` para resolver o erro.

Opção 6: Separar Instruções com Delimitadores

Comandos separados precisam ser delimitados para que o Terminal identifique comandos individuais. Use um delimitador, como um ponto e vírgula (`;`) ou uma nova linha, para corrigir erros de sintaxe. Por exemplo, mude `if [ $dia == “seg” ] then` para `if [ $dia == “seg” ]; then` para corrigir o erro.

Opção 7: Remover Instruções Adicionais

Verifique se não há instruções adicionais ou se os códigos não estão misturados em loops aninhados. Os loops `for…done` e construções condicionais `if…fi` devem seguir a sintaxe correta. Por exemplo, o arquivo de exemplo tem a palavra-chave `then` dentro de um loop `for`, o que está errado. Remova `then` do loop `for` para corrigir o erro, como em:

for VARIAVEL in {0..2}; do echo comando1; echo comando2; echo comando3; echo comando4; done 

Opção 8: Garantir a Ordem de Fechamento das Instruções

Em scripts com muitas instruções aninhadas ou condicionais, certifique-se de que os loops são fechados na ordem correta em que foram abertos. Use separadores de nova linha para evitar conflitos com os loops. Por exemplo, em:

while true; do if [ $dia == “seg” ]; então echo “seg”; senão echo “não seg”; feito; fi

a ordem de fechamento está incorreta. Ajuste o código para:

while true; do if [ $dia == “seg” ]; then echo “seg”; else echo “não seg”; fi; done

para corrigir o erro.

Método 2: Reescrever o Código

Se você copiou e colou o código em um novo arquivo, tente reescrevê-lo manualmente para corrigir erros de formatação ou caracteres invisíveis que podem ter sido introduzidos pelo editor de texto usado para copiar o código.

Método 3: Usar o Comando dos2unix.exe

Em sistemas Unix, o caractere de nova linha `\n` é usado para avançar para a próxima linha, enquanto em sistemas Windows, `\r\n` (retorno de carro e nova linha) é usado. Se você executar um script escrito no Windows no Cygwin, você pode receber o erro de sintaxe próximo ao token inesperado ‘(‘.

Para corrigir esse erro, remova os caracteres de retorno de carro usando a ferramenta de linha de comando `dos2unix.exe`. Digite `dos2unix.exe exemplo.sh` no Terminal para converter o arquivo para o formato Unix.

***

Este artigo abordou métodos básicos para corrigir o erro de sintaxe Bash próximo ao token inesperado ‘(‘. Se você está usando o Linux Bash, esses métodos podem ser úteis para corrigir esses tipos de erros. Se você achou este artigo útil, por favor, compartilhe suas sugestões e dúvidas nos comentários.