오류를 수정하기 위해 내 코드에 대한 새로운 질문을 게시하고 있습니다.
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
$