'while read line do' causa: “erro de sintaxe perto do token inesperado 'done'” no script bash do Linux

1

Eu tenho um shell script que está funcionando bem na plataforma Solaris, mas não funciona na plataforma Linux. O fragmento de código com falha é o seguinte:

[...]
while read line
do
insert_into_table="insert into isam_subrack_tbl (select neId, friendlyName, eqptHolderActualType from $line)"
$MYSQL_HOME/bin/mysql --socket=/tmp/mysql.sock -u$MYSQL_USER -p$MYSQL_PWD  --host $MYSQL_HOST -Demlplatform -e "$insert_into_table"
done  < isam_subrack2.txt 2> /dev/null
[...]

Quando executo o script no modo de depuração:

bash-4.1$ sh -vvx test.sh
[...]
while read line
do
insert_into_table="insert into isam_subrack_tbl (select neId, friendlyName, eqptHolderActualType from $line)"
$MYSQL_HOME/bin/mysql --socket=/tmp/mysql.sock -u$MYSQL_USER -p$MYSQL_PWD  --host $MYSQL_HOST -Demlplatform -e "$insert_into_table"
done  < isam_subrack2.txt 2> /dev/null
test.sh: line 98: syntax error near unexpected token 'done'
'est.sh: line 98: 'done  < isam_subrack2.txt 2> /dev/null

Eu tentei o comando dos2unix , mas isso não ajudou.
Você tem alguma idéia sobre por que estou recebendo este erro neste loop while?

    
por Murat 24.08.2015 / 08:58

1 resposta

2

Esta é uma pista para o problema:

test.sh: line 98: syntax error near unexpected token 'done'
'est.sh: line 98: 'done  < isam_subrack2.txt 2> /dev/null

Essa segunda linha normalmente seria lida como esta

test.sh: line 98: 'done  < isam_subrack2.txt 2> /dev/null'

Como você pode ver, a marca de aspas à direita da mensagem de erro está no início da linha. Isso é sintomático de caracteres CR inesperados no arquivo de texto. Vejo que você executou o arquivo por meio de dos2unix , mas ainda assim recomendaria executá-lo por meio de algo semelhante mais uma vez:

tr -d '5' < src.sh > dst.sh
    
por 24.08.2015 / 11:07