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 then
após o primeiro teste. Isto é o que dá origem à sua mensagem de erro.
Depois de corrigir isso, você notará que suas echo
declaraçõ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 centre
está 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_HTML
e antes END_HTML
(este últimodevenão deve ser recuado e deve ser o único texto nessa linha) será passado para cat
o qual o anexará ao checkscript_customtable.html
arquivo.
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
- else
có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 if
instruçã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.