유효한 식별자가 아닌 쉘 스크립트를 실행하는 중 오류가 발생했습니다.

유효한 식별자가 아닌 쉘 스크립트를 실행하는 중 오류가 발생했습니다.

데이터베이스에 연결하고 일부 작업을 수행하는 다음 쉘 스크립트가 있습니다.

echo Please enter userid:
read USER_NAME

echo "Please enter password:"
read -s PASS   

SID=${ORACLE_SID}

if [ "${ORACLE_SID}" != 'TEST'  ]
then
    sqlplus -s -l $USER_NAME/$PASS@$SID  << EOF
    copy from scott/tiger@orcl insert emp using select * from emp
    exit
EOF

else
    echo  "Cannot copy"
fi

하지만 1을 실행하면 오류가 발생합니다.

Please enter local Username:
scott
': not a valid identifierd: `USER_NAME
copy_data.sh: line 3: $'\r': command not found
Please enter local Password:
': not a valid identifierd: `
copy_data.sh: line 6: $'\r': command not found
copy_data.sh: line 8: $'\r': command not found
copy_data.sh: line 18: syntax error near unexpected token `fi'
copy_data.sh: line 18: `fi'

이 문제를 어떻게 해결할 수 있나요?

디버그 모드

$ bash -x test.sh
+ echo 'please enter username'
please enter username
+ read user_name
vbx
+ echo 'please enter password'
please enter password
+ read -s pass
+ echo
test.sh: line 12: syntax error near unexpected token `else'
test.sh: line 12: `else'

답변1

-들여쓰기를 사용하는 경우 하이픈( 예: ) 을 추가해야 <<-EOF작동하므로 다음과 같이 변경하면 됩니다.

sqlplus -s -l $USER_NAME/$PASS@$SID  <<-EOF
copy from scott/tiger@orcl insert emp using select * from emp
exit
EOF

구문 오류가 잘못된 경우 색상으로 강조 표시할 수 있는 VIM 또는 Notepad++와 같은 편집기를 사용하는 것이 좋습니다.

메모장++ 예:

여기에 이미지 설명을 입력하세요.

관련 정보