获取mysql命令的返回码

时间:2015-01-08 15:13:06

标签: mysql database shell csv ubuntu

我正在写一个shell脚本来导入mysql中的csv文件,这是我的代码:

DATABASE=*mydatabase*
USER=*myuser*
PASS=*mypassword*

file0="myfile.csv"
if [ -e "$file0" ]
then
  mysql --user=${USER} --password=${PASS} --database= ${DATABASE} --local-infile=1 < myquery.sql
else
  echo "$file0 does not exist"
fi

要执行的查询位于myquery.sql,这是其内容:

LOAD DATA LOCAL INFILE 'myfile.csv' replace INTO TABLE imported_table
FIELDS TERMINATED BY ';' 
ENCLOSED BY '' 
LINES TERMINATED BY '\n' 
IGNORE 1 LINES 
(Field1, Field2, Field3, Field4, Field5);

此代码工作正常,但如何检查查询是否已执行?我的目标是在导入后删除文件(如果成功),或者在出错时写入自定义日志文件。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

每当您使用mysql(或Unix中的任何其他命令)运行命令时,您将获得一个可以使用$?检查的返回码。如果成功,它将是0。否则,它将是一个不同的数字。

所以你可以这样做:

mysql --user=${USER} --password=${PASS} --database= ${DATABASE} --local-infile=1 < myquery.sql
if [ $? -eq 0 ]; then
   # remove file
else
   # write to log
fi

测试

$ mysql -u me -pXXXX -e "SELECT COUNT(*) FROM YYY.ZZZ;"


+----------+
| COUNT(*) |
+----------+
|   123 |
+----------+
$ echo $?
0
$ mysql -u meASDFASFASD -pXXXX -e "SELECT COUNT(*) FROM YYY.ZZZ;"
ERROR 1045 (28000): Access denied for user 'meASDFASFASD'@'local' (using password: YES)
$ echo $?
1