Ошибка недействительного идентификатора при выполнении сценария оболочки

У меня есть следующий сценарий оболочки для подключения к базе данных и выполнения некоторых задач.

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 

Однако, когда я выполню, я получаю ошибки

 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' 

Если вы используете Indention, вам нужно добавить дефис - как <<-EOF , тогда он будет работать, так что просто выполните следующие изменения:

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

Я бы предложил вам какой-нибудь редактор, например VIM или Notepad ++, которые выделяют синтаксическую ошибку в цветах, если они неверны.

Пример блокнота ++:

введите описание изображения здесь