Shell script - Não foi possível encontrar 'fi' para este 'if'

3

Encontrei esse erro ao lado de mais alguns. Acredito que o aninhamento não está bem ou não está corretamente recuado ou sem algum ponto-e-vírgula. De qualquer forma eu tentei por algum tempo para descobrir, mas sem sucesso. Aqui está o código:

if [ "${runcmd}" != "echo" ]; then
statusmsg "Kernels built from ${kernelconf}:"
kernlist=$(awk '$1 == "config" { print $2 }' ${kernelconfpath}) for kern in ${kernlist:-netbsd}; do
[ -f "${kernelbuildpath}/${kern}" ] && \
echo " ${kernelbuildpath}/${kern}"
done | tee -a "${results}"
fi

É parte de um arquivo build.sh.

    
por Highlights Factory 25.10.2015 / 20:41

1 resposta

3

O

var=value cmd ar1

A sintaxe

não parece funcionar se cmd for um loop for (nem em bash nem sh ).

Tanto sh como bash geram erros de sintaxe para:

foo=bar for f in ${foo:-BAR}; do echo $f; done

que é o que você está fazendo.

(

  • sh: 1: para: não encontrado
  • bash: erro de sintaxe próximo do token inesperado 'do'

Esse erro parece resultar em um erro couldn't find fi no seu caso;

Definir a variável em uma linha separada corrige o erro de sintaxe:

kernlist=$(awk '$1 == "config" { print $2 }' ${kernelconfpath})
for kern in ${kernlist:-netbsd}; do #...

Nota:

Gostaria apenas de escrever "$kernelbuildpath/$kern" em vez de "${kernelbuildpath}/${kern}" se eu fosse você. Não há razão técnica para os curlies.

    
por 25.10.2015 / 21:19