예기치 않은 태그 '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복합 명령문의 모든 출력을 파일로 리디렉션하는 방법입니다.

답변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를 사용해야 할 것입니다. 도움이 필요하면 새 질문을 게시해 주세요.

관련 정보