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 then
después de la primera prueba. Esto es lo que genera su mensaje de error.
Una vez que haya solucionado eso, notará que sus echo
declaraciones 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 centre
termina 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_HTML
y antes END_HTML
(este últimodebeno debe tener sangría y debe ser el único texto en esa línea) se pasará a cat
quien lo agregará al checkscript_customtable.html
archivo.
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):elif
else
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 if
declaració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.