意外标记“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 来完成你正在做的任何事情。如果您需要帮助,请发布一个新问题。

相关内容