Computer >> 컴퓨터 >  >> 문제 해결 >> Windows 오류

해결 방법: 예기치 않은 토큰 '(' 구문 오류 수정하기

syntax error near unexpected token `(' 오류 메시지는 Unix 계열 운영체제, Cygwin, 그리고 Windows의 명령 프롬프트 환경에서 자주 나타나는 문제입니다. 이 오류는 주로 구버전 DOS/Windows 또는 Mac 시스템에서 작성되거나 편집된 셸 스크립트를 실행하려고 할 때 발생합니다.

해결 방법: 예기치 않은 토큰  (  구문 오류 수정하기

또한 파일 복사와 같은 일상적인 작업을 위해 Linux 명령줄에 명령어를 입력하는 도중에도 이 오류가 발생할 수 있습니다. 이 오류의 핵심 원인은 크게 두 가지입니다. 첫째는 잘못된 구문(syntax) 사용이며, 둘째는 운영체제가 다른 시스템의 명령어나 셸을 제대로 해석하지 못하는 문제입니다.

'syntax error near unexpected token' 오류의 원인은 무엇일까요?

이 오류의 원인은 매우 다양합니다. 명령어 실행 시 구문이 잘못될 수 있는 경우의 수가 수천 가지에 달하기 때문에 모든 가능성을 하나의 글에서 다루기는 어렵습니다. 하지만 이 오류를 유발하는 핵심적인 원인은 다음과 같습니다.

  • 명령어 실행 시 구문 오류: 명령어를 올바르게 사용하지 않았거나 잘못된 형식으로 입력한 경우입니다.
  • Unix/DOS 시스템 간 셸 호환성 문제
  • 다른 출처에서 가져온 bash 셸 스크립트 실행 시 발생하는 문제

이 글에서는 독자가 코딩의 기본 개념을 알고 있으며 자신이 수행하는 작업에 대한 이해가 있다고 가정합니다. 초보자라면 실행하려는 언어나 명령어에 대한 심화 튜토리얼을 먼저 학습하는 것이 좋습니다. 대부분의 경우 구문상의 실수가 원인일 가능성이 높습니다.

해결 방법 1: 명령어의 구문과 형식 확인

이 오류 메시지가 나타나는 가장 흔한 이유는 코드의 구문이 잘못되었거나 명령어의 정확한 형식을 따르지 않았기 때문입니다. 각 명령어는 공식 문서에 정의된 형식을 가지고 있으며, 일부 매개변수는 선택 사항이지만 반드시 입력해야 하는 필수 매개변수도 있습니다.

특히 불필요한 공백, 큰따옴표(" ")의 사용 여부, 그리고 필수 매개변수의 누락 여부를 꼼꼼히 확인해야 합니다. 이 중 하나라도 누락되거나 잘못 선언되면 코드를 정상적으로 실행할 수 없습니다.

예를 들어, 아래와 같은 코드 대신에

[mycom7] # ./ctopo.sh um_test1 [(1,2),(2,1)]

다음과 같이 실행해야 합니다.

[mycom7] # ./ctopo.sh um_test1 "[(1,2),(2,1)]"

매개변수의 특성상 위 예시에서는 큰따옴표가 필수적입니다. 불필요한 공백 하나만으로도 코드가 깨져 오류가 발생할 수 있습니다. 실행하려는 명령어의 공식 문서를 반드시 확인하고 형식에 문제가 없는지 점검하세요.

또한 명령어나 셸 스크립트가 여러 줄에 걸쳐 작성된 경우, 올바르게 입력하고 실행하고 있는지도 확인해야 합니다.

해결 방법 2: 셸 스크립트 문제 진단하기

출발 시스템(원본 시스템)에서는 정상적으로 작동하던 셸 스크립트가 대상 시스템에서 오류를 반환한다면, 실행 과정에서 저장되는 변수들을 확인하여 원인을 파악할 수 있습니다. 이는 매우 흔한 원인으로, 많은 경우 셸이 출력할 수 없는(non-printable) 문자를 해석하려다 실패하면서 문제가 발생합니다.

셸을 실행할 때 'vx' 옵션을 추가해 보세요. 이 옵션을 사용하면 어떤 명령어들이 실행되는지, 스크립트 내에 어떤 값들이 저장되어 있는지 확인할 수 있으므로 문제를 진단하고 해결하는 데 큰 도움이 됩니다.

예를 들어, 'vx' 옵션을 포함하여 터미널에서 스크립트를 실행하려면 다음과 같이 입력합니다.

# sh -vx ./test_script5.sh

'cat' 명령어를 사용하면 스크립트의 내용을 직접 확인할 수도 있습니다.

# cat test_script5.sh

해결 방법 3: 'dos2unix.exe' 명령어 활용하기

Windows/DOS 텍스트 파일에서 줄바꿈은 캐리지 리턴(Carriage Return, \r)과 라인 피드(Line Feed, \n)의 조합으로 이루어집니다. 반면 Mac OS X 이전 버전의 Mac에서는 단순히 캐리지 리턴(\r)만 사용했고, Unix/Linux 및 Mac OS X는 라인 피드(\n) 방식을 사용합니다. Cygwin을 사용하는 경우, 추가된 캐리지 리턴(\r) 문자 때문에 DOS/Windows나 구버전 Mac에서 만든 스크립트를 처리하지 못하고 실패할 수 있습니다.

해결 방법: 예기치 않은 토큰  (  구문 오류 수정하기

이런 상황에서는 'dos2unix.exe' 명령어를 활용하면 됩니다. 이 명령어는 스크립트 파일을 올바른 형식으로 변환해 주므로, 변환 후에는 아무 문제 없이 스크립트를 실행할 수 있습니다.

결론적으로, 사용 중인 명령어와 플랫폼의 종류를 충분히 조사하고 서로 간의 차이점이 없는지 확인하는 것이 중요합니다. 모든 가능성을 한 번에 다룰 수는 없지만, 어떤 종류의 오류가 발생할 수 있는지 그리고 이를 어떻게 수정해야 하는지 감을 잡는 데 도움이 되기를 바랍니다.