Não foi possível descobrir o erro “Erro de sintaxe próximo ao token inesperado 'concluído'”

0

Estou com o erro "Erro de sintaxe perto do token inesperado 'concluído'" e simplesmente não consigo descobrir o script. Meu código está abaixo:

trap "rm ~/tmp/* 2> /dev/null; exit" 0 1 2 3
phonefile=~/sournce/corp_phones
looptest=y
while [ $looptest" = y ]
do
   clear
   cursor 1 4; echo "Corporate Phone List Additions"
   cursor 2 4; echo "=============================="
   cursor 4 4; echo "Phone Number: "
   cursor 5 4; echo "Last Name   : "
   cursor 6 4; echo "First Name  : "
   cursor 7 4; echo "Middle Init : "
   cursor 8 4; echo "Dept #      : "
   cursor 9 4; echo "Job Title   : "
   cursor 10 4; echo "Date Hired  :"
   cursor 12 4; echo "Add Another? (Y)es or (Q)uit "
   cursor 4 18; read phonenum
   if [ "$phonenum" = 'q' ]
      then
         clear; exit
   fi
   cursor 5 18; read lname
   cursor 6 18; read fname
   cursor 7 18; read midinit
   cursor 8 18; read deptno
   cursor 9 18; read jobtitle
   cursor 10 18; read datehired
#check to see if last name is not a blank before write to disk
   if [ "$lname" >  "        "]
      then
         echo $phonenum:$lname:$fname:$midinit:$deptno:$jobtitle:$datehired >> $phonefile
   fi
   cursor 12 33; read looptest
   if [ "$looptest" = 'q' ]
      then
        clear; exit
   fi
done
    
por keeperkell13 18.10.2018 / 03:01

2 respostas

1

Você tem 3 barreiras no momento:

  1. falta de cotação em torno de $looptest" - deve ser "$looptest"
  2. usando > para comparar strings em "$lname" > ... - deve ser if [ "$lname" != ...
  3. defina uma linha she-bang específica para que o script seja analisado com o shell que você está esperando - seja bash, zsh, dash ou sh simples.

Vou reservar um momento para chamar o serviço shellcheck.net; você pode colar seu código na caixa e ele lhe dará sugestões e avisos.

    
por 18.10.2018 / 03:13
0

A sintaxe destacando aqui no SE revela o problema (como seria o mesmo em qualquer editor adequado), mas você precisa ler a coloração com cuidado e esperar que as cores sejam distintas o suficiente para diferenciar.

while [ $looptest" = y ]
do
   cursor 7 4; echo "Middle Init : "
   cursor 8 4; echo "Dept #      : "
   cursor 9 4; echo "Job Title   : "
   ...
done

Tudo que começa na cotação em $looptest" é exibido em vermelho, já que é usado como uma string entre aspas. O próximo " para de citar, e o próximo começa de novo, então as partes citadas e não citadas do script são invertidas. Isso continua até a linha com o # , que, quando agora sem aspas, inicia um comentário no final da linha, removendo o efeito do " após ele, e restaurando as citações no restante do script. / p>

O shell continua analisando e vê a palavra-chave done enquanto estava realmente esperando do antes disso, daí o erro. ( do não foi reconhecido enquanto foi citado, é claro).

Sem o # , você receberia um erro para os parênteses três linhas abaixo (eles são tokens de sintaxe especiais) e, sem eles, um erro de mais para atingir o EOF ao procurar a citação final.

    
por 19.10.2018 / 00:53