구문 오류 'elif'가 예기치 않게 예상된 후 [닫힘]

구문 오류 'elif'가 예기치 않게 예상된 후 [닫힘]

오류를 수정하기 위해 내 코드에 대한 새로운 질문을 게시하고 있습니다.

    if [ -f /etc/centos-release ]; then
        OS="CentOs"
        VERFULL=$(sed 's/^.*release //;s/ (Fin.*$//' /etc/centos-release)
        VER=${VERFULL:0:1} # return 6 or 7
    elif [ -f /etc/lsb-release ]; then
        OS=$(grep DISTRIB_ID /etc/lsb-release | sed 's/^.*=//')
        VER=$(grep DISTRIB_RELEASE /etc/lsb-release | sed 's/^.*=//')
    elif [ -f /etc/os-release ]; then
        OS=$(grep -w ID /etc/os-release | sed 's/^.*=//')
        VER=$(grep VERSION_ID /etc/os-release | sed 's/^.*"\(.*\)"/\1/')
     else
        OS=$(uname -s)
        VER=$(uname -r)
    fi

여기 코드는 elif [ -f /etc/lsb-release ]; then오류를 보여줍니다.

답변1

쉘이 게시한 스크립트의 5행에서 이 오류를 보고하는 경우 then첫 번째 행에 눈에 보이지 않는 오류가 있을 것입니다.

검토 스크립트를 사용하여 cat -A줄에 예기치 않은 ALT 공백 문자나 기타 인쇄할 수 없는 문자가 있는지 확인할 수 있습니다. cat -A각 줄 끝에 개행 문자, 접두사가 붙은 제어 문자, 접두사 세트의 비트 8이 있는 인쇄할 수 없는 문자가 표시됩니다 . 예를 들어 TAB 문자는 로 표시됩니다.$^M-^I

출력이 cat -A약간 왜곡되어 보일 수 있지만 인쇄할 수 없는 문자가 없는지 확인하는 좋은 방법입니다.

답변2

다음 명령을 실행하여 파일을 변경할 수 있습니다.

sed -i 's/\r$//' filename

답변3

이런 종류의 문제가 발생했습니다. 내 해결책은 파일에서 dos2unix를 실행하는 것이었습니다. 그러면 모든 것이 괜찮았습니다.

답변4

이 스크립트 조각은 나에게 잘 작동합니다. @telecoM이 지적했듯이 스크립트에 이상한 문자가 있을 수 있습니다.

$ cat -A x1
#!/bin/bash$
    if [ -f /etc/centos-release ]; then$
        OS="CentOs"$
        VERFULL=$(sed 's/^.*release //;s/ (Fin.*$//' /etc/centos-release)$
        VER=${VERFULL:0:1} # return 6 or 7$
    elif [ -f /etc/lsb-release ]; then$
        OS=$(grep DISTRIB_ID /etc/lsb-release | sed 's/^.*=//')$
        VER=$(grep DISTRIB_RELEASE /etc/lsb-release | sed 's/^.*=//')$
    elif [ -f /etc/os-release ]; then$
        OS=$(grep -w ID /etc/os-release | sed 's/^.*=//')$
        VER=$(grep VERSION_ID /etc/os-release | sed 's/^.*"\(.*\)"/\1/')$
     else$
        OS=$(uname -s)$
        VER=$(uname -r)$
    fi$
$ ./x1
$

관련 정보