Além de perder #!/bin/bash
na primeira linha, a única coisa que eu posso encontrar neste script que valeria a pena ser corrigida é a substituição de comando com dialog
no topo:
clear
menu_inicial=$(dialog --stdout --title 'Menu inicial' --menu 'Escolha uma opção:' 0 0 0
Cadastrar 'Cria um novo usuário'
Entrar 'Fazer login com sua conta'
Sair 'Encerra o SEPA')
Isso provavelmente deve ser
clear
menu_inicial=$(dialog --stdout --title 'Menu inicial' --menu 'Escolha uma opção:' 0 0 0 \
Cadastrar 'Cria um novo usuário' \
Entrar 'Fazer login com sua conta' \
Sair 'Encerra o SEPA')
Observe as novas linhas com escape. Sem fazer isso, a substituição do comando envolverá a chamada de dialog
, em seguida, Cadastrar
, Entrar
e Sair
como se fossem utilitários.
Se eu adicioná-los ao seu script, parece funcionar para mim usando bash
4.4 no OpenBSD.
Nem eu nem o ShellCheck podem detectar um erro de sintaxe que acionaria o erro que você está vendo.
A única coisa que o ShellCheck descobre que perdi na primeira vista no código é que
echo $cadastrar_usuario","$cadastrar_senha",cadastro"
provavelmente seria melhor escrito como
printf '%s,%s,cadastro\n' "$cadastrar_usuario" "$cadastrar_senha"
E, da mesma forma, em outro lugar no código.
Se o arquivo de script foi editado em uma máquina Windows, pode ser que seja um arquivo de texto do DOS. Nesse caso, ele tem um retorno de carro extra no final de cada linha, o que poderia muito bem fazer com que o intérprete se queixasse dos erros de sintaxe. Transformar seu script em um arquivo de texto do DOS e executá-lo com bash
faz provocar alguns erros de sintaxe, no entanto, eles não são exatamente iguais aos que você está relatando.
Você pode converter o arquivo em um arquivo de texto Unix usando o utilitário dos2unix
. Veja também as perguntas Como testar se um arquivo usa CRLF ou LF sem modificá-lo? e Remover o caractere ^ M dos arquivos de log
Em relação à #!
-line ausente, veja a pergunta Qual interpretador de shell executa um script sem shebang?