Wenn ich den folgenden Code ausführe, erhalte ich die
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
Ich bin nicht sicher, welchen Fehler ich hier mache
Antwort1
Das Hauptproblem ist das Fehlen then
nach dem ersten Test. Dies ist der Grund für Ihre Fehlermeldung.
Sobald Sie das behoben haben, werden Sie feststellen, dass Ihre echo
Anweisungen nicht wie erwartet funktionieren. Nehmen wir ein Beispiel:
echo "<td align="centre" valign="middle"><font color="green">fdr_cust$todays_date</td>">>checkscript_customtable.html
Dieser Willenichtgibt die doppelten Anführungszeichen um zB aus centre
. Dies geschieht nicht, da das "
Zeichen direkt davor centre
das Anführungszeichen beendet, das unmittelbar davor begann <td
.
Um diese Daten in der gewünschten Weise auszugeben, würde ich die Verwendung eines „Here-Dokuments“ vorschlagen:
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
Der Text darunter <<END_HTML
und davor END_HTML
(letzterermussnicht eingerückt sein und muss der einzige Text in dieser Zeile sein) wird an übergeben, cat
das ihn an die Datei anfügt checkscript_customtable.html
.
Die Shell erweitert die Variablen außerdem zu ihren Werten im Text.
Nebenbei bemerkt: Um die Anzahl der Ausgabeumleitungen in Ihrem Code weiter zu reduzieren , if
können Sie tatsächlich mit nur einer auskommen (da die gesamte Ausgabe in dieselbe Datei geht):elif
else
if [[ $output_count_fdr -eq 0 ]]; then
# code here
elif ...; then
# code here
else
# code here
fi >checkscript_customtable.html
Auf diese Weise können Sie die gesamte Ausgabe von überall in der if
zusammengesetzten Anweisung in eine Datei umleiten.
Antwort2
Abgesehen von den bereits besprochenen Problemen ist das Duplizieren von Code immer eine schlechte Idee. Erwägen Sie, Variablen zu füllen und dann einen einzelnen Block zu haben, in dem Sie stattdessen die Ausdrucke durchführen, z. B.:
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
Wahrscheinlich sollten Sie alles, was Sie tun, sowieso mit awk statt mit der Shell tun. Stellen Sie eine neue Frage, wenn Sie dabei Hilfe benötigen.