синтаксическая ошибка около неожиданного токена `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.

Чтобы вывести эти данные нужным вам способом, я бы предложил использовать «here-document»:

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, вы можете обойтись только одним (поскольку весь вывод направляется в один и тот же файл):elifelse

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. Задайте новый вопрос, если вам нужна помощь с этим.

Связанный контент