最近在看关于 linux 的书,跟着书学习用 shell 脚本向 MySQL 服务器发送命令,入了个很隐蔽的坑,以此记录。
原文是这样的:
$ cat mtest3 #!/bin/bash
# send data to the table in the MySQL database
MYSQL=$(which mysql)
if [ $# -ne 4 ]
then
echo "Usage: mtest3 empid lastname firstname salary"
else
statement="INSERT INTO employees VALUES ($1, '$2', '$3', $4)"
$MYSQL mytest -u test << EOF
$statement
EOF
if [ $? -eq 0 ]
then
echo Data successfully added
else
echo Problem adding data
fi
fi
看了觉得能看懂,又懒,直接复制到了脚本中,一运行报了如下错误:
./mtest3:行18: 警告:立即文档在第 9 行被文件结束符分隔 (需要 `EOF')
./mtest3:行19: 语法错误: 未预期的文件结尾
为了排查这个错误总之是费了很多时间,最后找到的问题在这里:第二个文件结束符 **EOF**
后面多了一个空格。
根本看不出来,算是非常隐蔽了。