데이터베이스에 연결하고 일부 작업을 수행하는 다음 쉘 스크립트가 있습니다.
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++와 같은 편집기를 사용하는 것이 좋습니다.
메모장++ 예: