意外標記“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

這會不是輸出 eg 周圍的雙引號centre。它不會這樣做,因為"先前的字元centre正在結束之前開始的引用<td

要以您想要的方式輸出此數據,我建議使用“此處文件”:

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文件中。

shell 也將變數擴展為其文字內的值。


if順便說一句,為了進一步減少在--程式碼中執行的輸出重定向數量,您實際上可以只執行elif一次else(因為所有輸出都轉到同一個檔案):

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

這是一種將if複合語句中任何位置的所有輸出重新導向到檔案的方法。

答案2

除了已經討論過的問題之外,重複程式碼始終是一個壞主意,請考慮填充變量,然後使用一個區塊來列印,例如:

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

不管怎樣,你應該使用 awk 而不是 shell 來完成你正在做的任何事情。如果您需要協助,請發布新問題。

相關內容