我有一个 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