erro de sintaxe próximo ao token inesperado `elif'

erro de sintaxe próximo ao token inesperado `elif'

Para o código abaixo, quando executo, estou recebendo o

checkscript_2.sh: line 43: syntax error near unexpected token `elif'
checkscript_2.sh: line 43: `elif [[ $fdr_count = "0" ]]'
if [[ $output_count_fdr = "0" ]]

echo "<td align="centre" valign="middle"><font color="red">FDR CUSTOM</td>">>checkscript_customtable.html

echo "<td align="centre" valign="middle"><font color="red">fdr_cust$todays_date</td>">>checkscript_customtable.html

echo "<td align="centre" valign="middle"><font color="red">The table for today has not been created</td>">>checkscript_customtable.html

elif [[ $fdr_count = "0" ]]

then

echo "<td align="centre" valign="middle"><font color="red">FDR CUSTOM</td>">>checkscript_customtable.html

echo "<td align="centre" valign="middle"><font color="red">fdr_cust$todays_date</td>">>checkscript_customtable.html

echo "<td align="centre" valign="middle"><font color="red">$fdr_count</td>">>checkscript_customtable.html


else
echo "<td align="centre" valign="middle"><font color="green">FDR CUSTOM</td>">>checkscript_customtable.html

echo "<td align="centre" valign="middle"><font color="green">fdr_cust$todays_date</td>">>checkscript_customtable.html

echo "<td align="centre" valign="middle"><font color="green">$fdr_count</td>">>checkscript_customtable.html

fi

Não tenho certeza de qual é o erro que estou cometendo aqui

Responder1

O principal problema é a falta de thenapós o primeiro teste. Isto é o que dá origem à sua mensagem de erro.

Depois de corrigir isso, você notará que suas echodeclarações não funcionam conforme o esperado. Vejamos um exemplo:

echo "<td align="centre" valign="middle"><font color="green">fdr_cust$todays_date</td>">>checkscript_customtable.html

Isso vainãoproduza as aspas duplas, por exemplo centre. Isso não acontece porque o "caractere anterior centreestá encerrando a citação que começou logo antes <td.

Para gerar esses dados da maneira que você deseja, sugiro usar um "documento aqui":

cat <<END_HTML >>checkscript_customtable.html
<td align="centre" valign="middle"><font color="green">FDR CUSTOM</td>
<td align="centre" valign="middle"><font color="green">fdr_cust$todays_date</td>
<td align="centre" valign="middle"><font color="green">$fdr_count</td>
END_HTML

O texto abaixo <<END_HTMLe antes END_HTML(este últimodevenão deve ser recuado e deve ser o único texto nessa linha) será passado para cato qual o anexará ao checkscript_customtable.htmlarquivo.

O shell também expandirá as variáveis ​​para seus valores dentro do texto.


Além disso, para reduzir ainda mais o número de redirecionamentos de saída que você faz em seu if- elif- elsecódigo, você pode realmente fazer apenas um (já que toda a saída vai para o mesmo arquivo):

if [[ $output_count_fdr -eq 0 ]]; then
   # code here
elif ...; then
   # code here
else
   # code here
fi >checkscript_customtable.html

Esta é uma maneira de redirecionar toda a saída de qualquer lugar da ifinstrução composta para um arquivo.

Responder2

Além dos problemas já discutidos, duplicar código é sempre uma má ideia, considere preencher variáveis ​​e depois ter um único bloco onde você faz os prints, por exemplo:

if [[ $output_count_fdr = "0" ]]; then
    color='red'
    msg='The table for today has not been created'
elif [[ $fdr_count = "0" ]]; then
    color='red'
    msg="$fdr_count"
else
    color='green'
    msg="$fdr_count"
fi

fmt='<td align="centre" valign="middle"><font color="%s">%s</td>\n'
{
    printf "$fmt" "$color" 'FDR CUSTOM'
    printf "$fmt" "$color" "fdr_cust${todays_date}"
    printf "$fmt" "$color" "$msg"
} > checkscript_customtable.html

Provavelmente, você deveria estar fazendo tudo o que está fazendo usando awk em vez de shell de qualquer maneira. Poste uma nova pergunta se desejar ajuda com isso.

informação relacionada