mysql返回0时应该在BASH脚本中返回1

时间:2015-12-05 23:01:57

标签: mysql bash

我正在使用bash脚本将数据库转储到要通过FTP上传的文件中。它将由cron作业启动,而sql server不是localhost。

我的脚本正常运行但遇到了错误检查的路障。如果脚本无法连接到sql server(在不太可能的情况下它会关闭)我希望它停止并输出错误日志中的任何问题。输出到错误日志工作正常,但脚本仍然运行并创建一个空白文件。我想用$?检查mysql连接是否失败,即使我正在使用关闭的测试服务器,也会返回0而不是1.我在墙上戴了一个洞,我正在抨击我的头,我是什么意思我做错了吗?

如果之前有人询问过,请指出我正确的方向,但在搜查时我找不到任何答案。

bash脚本的内容:

{  
mysql -h $HOST -u $USERNAME -p$PASSWORD < dump.sql | sed "s/\t/\",\"/g;s/^/\"/;s/$/\"/" > test.csv  
} 2>error.log  
if [ $? -ne 0 ]; then { echo "SQL Server connection failed. Aborting" ; exit 1; } fi

1 个答案:

答案 0 :(得分:1)

在这种情况下,

$?返回sed命令的结果,而不是mysql命令。由于sed命令总是成功(你传递了有效的输入和一组有效的替换),你总是会在$?得到0。

在bash脚本中使用一个或多个管道命令时,您希望使用内置的PIPESTATUS变量,它可以让您检查一系列管道命令中每个命令的返回值,无论如何很多你在一起管道。