我有一个mysql数据库列表,我希望从名称以" _abc"使用linux脚本。但是,我一直收到错误"意外的文件结束"。
这是我的脚本,其中DB_FILE
是一个文本文件,其中包含以" _abc"结尾的数据库名称。
while read db_name;
do
OUT_FILENAME="${db_name}_table.csv"
mysql -u$MYSQLUSER -p$MYSQLPASS -h $MYSQLHOST $db_name << EOFMYSQL
SELECT * FROM table_abc INTO OUTFILE '$OUT_FILENAME' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
EOFMYSQL
done < $DB_FILE
rm -f $DB_FILE
如果删除3条MYSQL行,则脚本运行时没有错误。
另一个问题,如果我有2个SELECT
个查询,我是否必须单独运行每个查询,即每个查询都包含在EOFMYSQL
语句中,或者我可以在一个EOFMYSQL
内查询这两个查询阻止?
答案 0 :(得分:2)
$OUT_FILENAME
不会在单引号内展开。
我猜您可以将查询放在如下所示的数组中:
MYQUERY=( SELECT \* FROM table_abc INTO OUTFILE "$OUT_FILENAME" FIELDS TERMINATED BY \",\" LINES TERMINATED BY \"\\n\"\; )
然后将mysql
命令更改为:
mysql -u"$MYSQLUSER" -p"$MYSQLPASS" -h "$MYSQLHOST" -e "${MYQUERY[@]}" "$db_name"
<强>图片的标题说明强>
\*
,\"
等。答案 1 :(得分:2)
我认为你必须在EOFMYSQL
之前没有空格:不要只缩进那个。
while read db_name;
do
OUT_FILENAME="${db_name}_table.csv"
mysql -u$MYSQLUSER -p$MYSQLPASS -h $MYSQLHOST $db_name << EOFMYSQL
SELECT * FROM table_abc INTO OUTFILE '$OUT_FILENAME' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
EOFMYSQL
done < $DB_FILE
rm -f $DB_FILE
在一些合适的文本编辑器中,它会很容易显示,这里是notepad ++: