내가 실행할 때 아래 코드의 경우
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
.
이 데이터를 원하는 방식으로 출력하려면 "여기 문서"를 사용하는 것이 좋습니다.
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
실제로 하나만 수행하면 됩니다(모든 출력이 동일한 파일로 이동하므로).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를 사용하여 무엇이든 해야 할 가능성이 있습니다. 도움이 필요하면 새 질문을 게시하세요.