Erro ao executar comando dentro de um shell script. " [RESOLVIDO]

1. Erro ao executar comando dentro de um shell script. " [RESOLVIDO]

Edson Da Silva Guedes
Pallas

(usa Debian)

Enviado em 01/10/2022 - 21:13h

Oi, eu estou criando um script para automatizar a criação de um léxico compatível com festival para fins de experimentos. Que o script pegar linha por linha usado um loop para processar as palavras usado um programa escrito em java para transformar elas em fonemas, e escrevendo um arquivo com formato compatível para ser usado como léxico para festival usado a palavra e o resultado dele no arquivo. Mas ao executar o script, ocorre o erro "erro de sintaxe próximo ao token inesperado `echo'", estranhamente ao executar no terminal ocorreu normalmente sem erros.


#!/bin/bash
#Processar arquivo txt. (Pode demorar).
echo "Isso vai demorar bastante"

for i in $(seq $(wc --line < br-utf8.txt));
#Escrever a paravra no lexico.
echo "( "$(cat br-utf8.txt | grep -n ^ | grep ^$i: | cut -d: -f2)" n ((( $(java -jar fb_nlplib.jar $(cat br-utf8.txt | grep -n ^ | grep ^$i: | cut -d: -f2) --g2p-s --cross)) 1)) )" >> lexicon.scm
echo "$i de $(wc --line < br-utf8.txt)"
done


Resultado esperado:
( palavras n ((( resultado ) 1)) )

Eu sou um iniciante no shell script, eu não achei o erro que tem no meu shell.


  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 03/10/2022 - 17:35h

Faz assim, copia e cola esse script no

https://www.shellcheck.net/

Lá apareceu o seguinte, o `for loop' precisa da palavra `do', que não existe. Então você deve colocar o `do' na linha seguinte ao `for' e veja se ele roda.

3. Re: Erro ao executar comando dentro de um shell script. " [RESOLVIDO]

Edson Da Silva Guedes
Pallas

(usa Debian)

Enviado em 04/10/2022 - 12:01h


stormer escreveu:

Faz assim, copia e cola esse script no

https://www.shellcheck.net/

Lá apareceu o seguinte, o `for loop' precisa da palavra `do', que não existe. Então você deve colocar o `do' na linha seguinte ao `for' e veja se ele roda.


Muito obrigado! Eu tinha esquisito o "do" no loop, eu Desconhecia essa ferramenta. Eu irei usar no meus scripts futuros.


4. Re: Erro ao executar comando dentro de um shell script.

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 04/10/2022 - 16:13h

Pallas escreveu:

Oi, eu estou criando um script para automatizar a criação de um léxico compatível com festival para fins de experimentos. Que o script pegar linha por linha usado um loop para processar as palavras usado um programa escrito em java para transformar elas em fonemas, e escrevendo um arquivo com formato compatível para ser usado como léxico para festival usado a palavra e o resultado dele no arquivo. Mas ao executar o script, ocorre o erro "erro de sintaxe próximo ao token inesperado `echo'", estranhamente ao executar no terminal ocorreu normalmente sem erros.


#!/bin/bash
#Processar arquivo txt. (Pode demorar).
echo "Isso vai demorar bastante"

for i in $(seq $(wc --line < br-utf8.txt));
#Escrever a paravra no lexico.
echo "( "$(cat br-utf8.txt | grep -n ^ | grep ^$i: | cut -d: -f2)" n ((( $(java -jar fb_nlplib.jar $(cat br-utf8.txt | grep -n ^ | grep ^$i: | cut -d: -f2) --g2p-s --cross)) 1)) )" >> lexicon.scm
echo "$i de $(wc --line < br-utf8.txt)"
done


Resultado esperado:
( palavras n ((( resultado ) 1)) )

Eu sou um iniciante no shell script, eu não achei o erro que tem no meu shell.

Boa tarde Pallas, vi que já está resolvido, mas,
segue a sintaxe para ler "linha a linha de um arquivo".
cat linhas.txt
Linha_01
Linha_02
Linha_03
Linha_04
Linha_05
Linha_06
Linha_07
Linha_08
Linha_09
Linha_10
Linha_11
Linha_12
Linha_13

i=0; #Numerador da linha
while read line;do #"pega" linha alinha do arquivo
let i++; #Incrementa numerador
echo "$i:$line"; #Ecoa Numerador e a linha
done<linhas.txt #Arquivo de origem

---------------------------------------------------------------------------------------------------------------
Uma outra forma de "pegar" determinada linha:
awk 'NR==8 {print $0}' linhas.txt
Linha_08


Seu Script:
nlin=$(wc -l < br-utf8.txt)
i=1;
while read line;do
echo "( "${line}" n ((( $(java -jar fb_nlplib.jar ${line} --g2p-s --cross)) 1)) )" >> lexicon.scm
echo "$i de ${nlin}"
let i++;
done<br-utf8.txt

É isso.
______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts