予期しないタグ「elif」の近くに構文エラーがあります。

予期しないタグ「elif」の近くに構文エラーがあります。

以下のコードの場合、実行すると次のメッセージが表示されます。

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

私がここで何が間違っているのかわかりません。

ベストアンサー1

then最大の問題は、最初のテスト以来の欠如です。これがエラーメッセージの原因です。

echoこの問題を解決すると、ステートメントが期待どおりに機能しないことがわかります。例を挙げましょう。

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

これはいいえたとえば、周囲に二重引用符を出力しますcentre"前の文字がcentre以前に開始された参照を終了するため、これは行われません<td

このデータを希望の方法で出力するには、Document Hereを使用することをお勧めします。

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

<<END_HTML下と前のテキストEND_HTML(後者〜しなければならないインデントされておらず、行の唯一のテキストである必要があります)がファイルcatに追加されるように渡されます。checkscript_customtable.html

シェルは変数をリテラル値に拡張します。


ifところで、 --code で実行される出力リダイレクトの数をさらに減らすには、実際にelif一度だけ行うだけですelse(すべての出力が同じファイルに移動するため)。

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

これはif、複合ステートメントのすべての出力をファイルにリダイレクトする方法です。

おすすめ記事