我正在使用Linux和MySQL 5.6
我以这种方式运行 mysql:
mysql --user=XXX --password=XXX < myfile.sql
以下是我的文件的内容.sql
select * from account where balance < 0
我想做的是:
当至少有一个账户余额为负时,请给出非零返回代码。
然后我的脚本可以像这样检查这种情况:
mysql --user=XXX --password=XXX < myfile.sql
if [[ $? -gt 0 ]]
then
echo ERROR: Negative balance
fi
我能做到这一点吗?
或者,有没有其他方法?
2016-05-28 更新:
实际上,我现实生活中的案例很复杂。 我使用这个简单的例子是为了便于表达我的问题。
实际上,shell脚本函数中是否有类似[ return ]语句的内容,以便我可以根据不同的情况给出不同的返回码?
对于下面的接受答案,看起来MySQL无法生成自定义返回代码。 将 count(*) 作为输出显示的最后一行似乎是一种替代方法。
更改 SQL 以计算行数,而不是返回数据:
select COUNT(*) as total from account where balance < 0
然后捕获输出,这是生成的行数据(而不是返回的结果代码 $?,这只是查询执行的成功),使用 sed 跳过第一行(列别名"total"),然后第二行是您的行数。
out=$(/opt/local/lib/mysql5/bin/mysql --user=XXX --password=XXX < myfile.sql | sed -n 2p)
if [[ $out -gt 0 ]]
then
echo ERROR: Negative balance
fi
我已经在MacOSX而不是Linux上测试过这个,但原理应该是相同的。
(当然 - 你不会在源代码中嵌入你的数据库密码,是吗!