Не переопределяйте систему PATH
(или теперь SQLPATH
) и не помещайте команды в одинарные кавычки.Используйте строчные буквы для своих личных переменных, и вы не можете иметь пробелы вокруг знака равенства в присваивании;но переменная, которую вы используете только один раз, в любом случае бесполезна, поэтому я вынул ее и жестко закодировал аргумент cd
.
Я предполагаю, что вы хотите что-то вроде
#!/usr/bin/ksh
# No spaces around equals sign, and don't use uppercase for private variables
# But why use a variable at all anyway
#sqlpath=/usr/sql
cd /usr/sql # is this really necessary and useful??
sqlplus usr/password@sid <<____EOF &&
spool <db_file>.log
@<db_name>.sql
set echo off
set heading off
spool off
____EOF
sqlplus usr/password@sid <<____EOF &&
spool <db_file2>.log
@<db_name2>.sql
set echo off
set heading off
spool off
____EOF
sqlplus usr/password@sid <<____EOF
spool <db_file3>.log
@<db_name3>.sql
set echo off
set heading off
spool off
____EOF
# exit 0 # Not necessary or useful
Еслинесколько команд sqlplus
могут быть выполнены за один сеанс, что было бы очевидным улучшением;но я предполагаю, что sqlplus
не имеет возможности выразить то, что вы, по-видимому, имеете в виду с &&
(этот синтаксис имеет совершенно отличное значение в sqlplus
).