‘while read line do’ 导致:Linux bash 脚本中出现“意外标记‘done’附近的语法错误”

‘while read line do’ 导致:Linux bash 脚本中出现“意外标记‘done’附近的语法错误”

我有一个 shell 脚本,它在 Solaris 平台上运行良好,但在 Linux 平台上无法运行。失败的代码片段如下:

[...]
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
[...]

当我在调试模式下运行脚本时:

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

我尝试了dos2unix命令,但没有帮助。
您知道为什么我在 while 循环中收到此错误吗?

答案1

这是问题的线索:

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

第二行通常会这样读

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

正如您所看到的,错误消息中的尾部引号位于行的开头。这是文本文件中出现意外 CR 字符的症状。我看到您已经运行了该文件dos2unix,但我仍然建议您再次运行类似的内容:

tr -d '\015' < src.sh > dst.sh

相关内容