/shell-script: 예상치 못한 '완료' 표시 근처에서 구문 오류가 발생했습니다.

/shell-script: 예상치 못한 '완료' 표시 근처에서 구문 오류가 발생했습니다.

syntax error near unexpected token done쉘 스크립트를 실행하면 다음과 같은 결과가 나타납니다.

while read filename
do
  echo "$filename"
  if [ -s $filename ]; then
    tail -10 $filename | grep `date '+%Y-%m-%d'` >> $lastlines1
    echo "- Next Error File - " >> $lastlines1
  done
  else
  echo " no errrors"
fi

내가 잘못 가고있는 아이디어가 있습니까?

답변1

if 전에 while을 닫고 있습니다.

while read filename 
do 
    echo "$filename" 
    if [ -s $filename ]
    then 
        tail -10 $filename | grep date '+%Y-%m-%d' >> $lastlines1 
        echo "- Next Error File - " >> $lastlines1 
    else 
        echo " no errrors" 
    fi
done

답변2

몇 가지 새로운 줄과 들여쓰기를 추가해 보겠습니다.

1 while read filename; do
2     echo "$filename"
3     if [ -s $filename ]; then
4         tail -10 $filename | grep date '+%Y-%m-%d' >> $lastlines1
5         echo "- Next Error File - " >> $lastlines1
6     done
7 else
8     echo " no errrors"
9 fi

6호선과 9호선이 서로 바뀌는 것 같습니다. 즉, while-do-doneif-then-else-fi절이 겹칩니다. 이는 셸(및 대부분의 다른 컴퓨터 언어)에서 잘못된 것입니다.

답변3

스크립트를 작성하려면 편집기를 사용해야 하며 vim구문 오류가 있는 경우 텍스트가 빨간색으로 표시됩니다.

while read FileName 
do 
        echo "${FileName}" 

        if [ -s "${FileName}" ]; then 
            tail -10 $FileName | grep "date '+%Y-%m-%d'" >> "${lastlines1}"
            echo "- Next Error File - " >> "${lastlines1}"
        else 
            echo " no errrors" 
        fi      
done

답변4

때때로 이 오류는 파일의 예기치 않은 CR 문자로 인해 발생합니다. 일반적으로 파일이 CR 줄 끝을 사용하는 Windows 시스템에서 생성되었기 때문입니다. 예를 들어, dos2unix또는 를 실행하여 이 문제를 해결할 수 있습니다 .tr

tr -d '\015' < yourscript.sh > newscript.sh

이렇게 하면 파일에서 모든 CR 문자가 제거되고 새 쉘 스크립트 파일에서는 오류가 발생하지 않습니다.

관련 정보