在Bash脚本中执行MySQL查询报错,寻求技术解决方案
Bash脚本执行MySQL SELECT命令报错的解决方法
问题根源分析
你的脚本存在几个关键错误:
- 数据库参数错误:
-D test DB是无效写法,-D选项后直接跟数据库名,多余的DB会被当作额外参数干扰命令执行 - SQL语法错误:
module=cloud和option=prefix中的cloud、prefix是字符串常量,MySQL要求字符串必须用单/双引号包裹,否则会被识别为列名,触发语法错误 - Bash解析冲突:脚本中
option的反引号会被Bash解析为命令执行,同时外层的转义双引号处理不当,导致SQL语句被错误截断
修正后的脚本方案
方案1:命令行直接执行(适合短SQL)
#!/bin/bash mysql -utesting -pMypass -hlocalhost -D test -e ' SELECT value FROM h6_options WHERE module = "cloud" AND `option` = "prefix"; '
方案2:使用Here Document(适合复杂SQL)
#!/bin/bash mysql -utesting -pMypass -hlocalhost -D test <<QUERY SELECT value FROM h6_options WHERE module = 'cloud' AND `option` = 'prefix'; QUERY
关键修正说明
- 移除了多余的
DB参数,-D test正确指定目标数据库 - 给字符串常量
cloud和prefix添加引号,符合MySQL语法规范 - 用单引号包裹SQL语句(或Here Document方式),避免Bash解析内部的反引号、换行等特殊字符,保证SQL语句完整传递给MySQL
- 保留
option的反引号,因为它是MySQL关键字,作为列名必须用反引号(或双引号,需开启ANSI_QUOTESsql_mode)
内容的提问来源于stack exchange,提问作者zeid10
相关产品推荐
相关产品推荐

