首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何验证test.sql文件中的所有查询是否通过shell脚本成功执行?

如何验证test.sql文件中的所有查询是否通过shell脚本成功执行?
EN

Stack Overflow用户
提问于 2019-08-23 06:58:19
回答 2查看 986关注 0票数 0

我有一个q.sql文件,它的查询如下

代码语言:javascript
复制
SET SQL_SAFE_UPDATES = 0;
UPDATE student SET gender = 'f' WHERE gender = 'm';

.
.
UPDATE student SET rollno = '03' WHERE rollno = '003';

这个.sql文件是通过shellscript脚本执行的:

代码语言:javascript
复制
mysql -uuser -ppass DB < q.sql

即使q.sql文件中的查询之一失败,也会执行该命令。现在,我要验证是否所有查询都已成功更新。

我尝试过echo $?,但是它总是打印0,即命令成功,即使q.sql中的查询失败了。

代码语言:javascript
复制
mysql -uuser -ppass DB < q.sql
echo $?

如果查询失败,我希望它打印“失败”或停止stop脚本的进一步执行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-23 07:53:47

如果使用bash,可以在脚本中使用set -e,并使用-e选项执行mysql脚本的每一行。

代码语言:javascript
复制
#!/bin/bash
set -e
while read line; do
   mysql -uuser -ppass DB -e "$line"
done < q.sql

有关信息,set --help显示:

如果命令以非零状态退出,-e立即退出。

man mysql页面:

-execute=语句,-e语句 执行语句并退出。默认输出格式与-批处理生成的输出格式类似.有关一些示例,请参阅4.2.3.1节“在命令行上使用选项”。使用此选项,mysql不使用历史文件。

票数 0
EN

Stack Overflow用户

发布于 2019-08-23 08:32:15

您可以在文件中捕获输出以进行进一步处理:

代码语言:javascript
复制
mysql -uuser -ppass DB < q.sql > mysql.out

如果您有一个产生大量输出的查询,则可以通过寻呼机运行输出,而不是看着它从屏幕顶部滚动:

代码语言:javascript
复制
mysql -uuser -ppass DB < q.sql | more

如果要以批处理模式获取交互式输出格式,请使用mysql -t。若要将执行的语句回显到输出,请使用mysql -v

https://dev.mysql.com/doc/refman/8.0/en/batch-mode.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57621255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档