아래 코드의 경우 실행하면 다음과 같은 메시지가 나타납니다.
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를 사용해야 할 것입니다. 도움이 필요하면 새 질문을 게시해 주세요.