Erro não é um identificador válido ao executar o shell script [duplicado]

1

Eu tenho o seguinte shell script para conectar ao banco de dados e fazer algumas tarefas.

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

No entanto, quando executo, estou recebendo erros

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'

Como posso resolver este problema

Modo de depuração

$ 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'
    
por Jåcob 22.08.2013 / 12:35

1 resposta

1

Se você estiver usando o Indention, será necessário adicionar o hífen - , como <<-EOF , e ele funcionará, então faça o seguinte:

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

Gostaria de sugerir-lhe alguns editores como o VIM ou o Notepad ++, que realce o erro de sintaxe em cores, se eles estiverem errados.

Exemplo do notepad ++:

    
por 22.08.2013 / 13:39