Este não é um problema de script de shell, mas um problema com a sintaxe do seu SQL.
Da saída de erro:
1> use db
1> if exists (select 1 from syscolumns where id = object_id('Main_table') and name = 'Stamm')
2> begin
Parece que as duas primeiras linhas são consideradas como um único comando e pode ser por isso que o mecanismo de banco de dados detecta um erro de sintaxe. Pode precisar ser delimitado em dois comandos. Eu não conheço o Sybase, mas tento usar use $db;
como a primeira linha do documento here.
Além disso, não há nada terrivelmente errado com o seu script de shell. A única coisa que gostaria de comentar é a falta de aspas duplas das expansões dos parâmetros $DBLogin
e $DBName
, e o muito não convencional (embora legal) delimitador para o documento here que você redireciona para o comando isql
( Eu teria usado END_SQL
ou similar).