"else" 뒤의 "fi"에 구문 오류가 있습니다.

"else" 뒤의 "fi"에 구문 오류가 있습니다.

쉘 스크립트를 실행하려고 하면 다음 오류가 발생합니다.

오류: 13행: 예상치 못한 토큰 'fi' 근처에 구문 오류가 있습니다.

스크립트는 다음과 같습니다

case $# in
0) echo Usage is: $0 filename [filename]
  exit;;
*);;
esac

for i in $*
do
   if test -f $i;
   then
      echo $i
      cat $i
   else
fi
done

왜 오류가 발생하나요?

답변1

Healy가 이미 언급했듯이, bash 쉘 스크립트(매우 유사함)는 and if, else또는 elif, 또는 및 해당하는 를 허용하지 않습니다 . (이것은 다음과 같이 요약됩니다. 각 조건은 다음과 같습니다.fielseeliffi하다무엇. )

명령문 을 삭제하거나 else나중에 필요한 경우 else블록 내부에 더미 명령을 배치할 수 있습니다.예를 들어 스크립트를 다음과 같이 다시 작성할 수 있습니다.

case $# in
0) echo Usage is: $0 filename [filename]
  exit;;
*);;
esac

for i in $*
do
   if test -f $i;
   then
      echo $i
      cat $i
   else
      true
   fi
done

(나도 에 맞게 들여쓰기했습니다 fi. if스타일의 문제이지만 개인적으로는 이렇게 읽는 것이 더 쉽다고 생각합니다.)

true유일한 목적은 성공적인 종료 상태를 반환하는 것이지만 명령이므로 의 이름이 $i단순 파일( test -f)을 참조하지 않으면 이 스크립트는 아무 작업도 수행하지 않습니다.

답변2

빈 명령은 허용되지 않으므로 해당 else줄을 삭제하세요.

관련 정보