error de sintaxis cerca del token inesperado 'elif'

error de sintaxis cerca del token inesperado 'elif'

Para el siguiente código, cuando lo ejecuto, recibo el

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

No estoy seguro de cuál es el error que estoy cometiendo aquí.

Respuesta1

El problema principal es la falta de thendespués de la primera prueba. Esto es lo que genera su mensaje de error.

Una vez que haya solucionado eso, notará que sus echodeclaraciones no funcionan como se esperaba. Tomemos un ejemplo:

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

Esta voluntadnogenere las comillas dobles alrededor, por ejemplo centre. No hace eso porque el "carácter justo antes centretermina la cita que comenzó justo antes <td.

Para generar estos datos de la forma que desee, sugeriría utilizar un "documento aquí":

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

El texto debajo <<END_HTMLy antes END_HTML(este últimodebeno debe tener sangría y debe ser el único texto en esa línea) se pasará a catquien lo agregará al checkscript_customtable.htmlarchivo.

El shell también expandirá las variables a sus valores dentro del texto.


Además, para reducir aún más la cantidad de redirecciones de salida que realiza en su código if, puede salirse con la suya haciendo solo una (ya que toda la salida va al mismo archivo):elifelse

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

Esta es una forma de redirigir todos los resultados desde cualquier lugar de la ifdeclaración compuesta a un archivo.

Respuesta2

Además de los problemas ya discutidos, duplicar código siempre es una mala idea; considere completar variables y luego tener un solo bloque donde realice las impresiones, por ejemplo:

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

Sin embargo, lo más probable es que debas hacer lo que estés haciendo usando awk en lugar de Shell de todos modos. Publique una nueva pregunta si desea ayuda con eso.

información relacionada