Shell函数怎么封装针对MySQL数据库的查询命令并返回格式化结果集

冬婷小哥_6212

冬婷小哥_6212

2026-09-09

383人浏览

原创

核心是将连接参数、sql语句、格式化输出封装为可复用的shell函数,需兼顾参数校验、安全(如mysql_config_editor隐藏密码)、默认值、表格/制表符输出切换及awk美化等,确保干净、安全、易读、可维护。

shell函数怎么封装针对mysql数据库的查询命令并返回格式化结果集

直接用函数封装 MySQL 查询,核心是把连接参数、SQL 语句、格式化输出三者打包成可复用的 shell 函数,避免每次重复写长命令。关键不在“能不能”,而在“怎么封装得干净、安全、易读、好维护”。

基础封装:带参数校验和默认值

定义一个函数,接受数据库名、表名(或 SQL)、是否启用表格格式等参数:

mysql_query() {
    local db="test"
    local user="root"
    local pass=""
    local host="localhost"
    local sql=""
    local use_table=0
<pre class="brush:php;toolbar:false;">while [[ $# -gt 0 ]]; do
    case $1 in
        -d|--database) db="$2"; shift 2 ;;
        -u|--user)     user="$2"; shift 2 ;;
        -p|--pass)     pass="$2"; shift 2 ;;
        -h|--host)     host="$2"; shift 2 ;;
        -e|--exec)     sql="$2"; shift 2 ;;
        --table)       use_table=1; shift ;;
        *) echo "Unknown option: $1"; return 1 ;;
    esac
done

if [[ -z "$sql" ]]; then
    echo "Error: SQL query required (-e 'SELECT ...')" >&2
    return 1
fi

local cmd="mysql -u$user -p$pass -h$host -D$db -N -s"
[[ $use_table -eq 1 ]] && cmd="$cmd --table"

# 执行并去除首尾空行,避免空结果干扰后续处理
eval "$cmd -e \"$sql\"" | sed '/^$/d'

}

说明:
• -N 去掉列名
• -s 精简模式(禁用表格边框、对齐等)
• --table 启用后返回对齐表格(适合人工查看)
• 使用 eval 是因 SQL 含空格/引号,但注意:仅用于可信输入,生产环境建议改用 Here Document 或临时文件防注入

结构化结果处理:按字段分割并遍历

若需逐行解析字段(比如取第2列做判断),推荐用制表符分隔 + while read:

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载
mysql_query "SELECT id, name, status FROM users WHERE active=1;" | \
while IFS=$'\t' read -r id name status; do
    [[ -n "$id" ]] || continue
    echo "User $id: $name → $status"
done

要点:
• IFS=$'\t' 显式设字段分隔符为 tab(MySQL 默认分隔符)
• read -r 防止反斜杠被转义
• 第一行常为空或含列名(加 -N 后已去除),但仍建议加 [[ -n "$id" ]] 安全校验

安全增强:避免密码明文出现在进程列表

用 mysql_config_editor 预存登录配置,彻底隐藏密码:

# 一次性配置(密码交互输入,不落盘明文)
mysql_config_editor set --login-path=local --user=root --password --host=localhost
<h1>封装函数中改用:</h1><p>mysql --login-path=local -D"$db" -N -s -e "$sql"</p>

好处:
• 进程里看不到 -proot123 类敏感参数
• 多环境可建不同 login-path(如 prod/stage)
• 不依赖环境变量,更可控

结果格式化增强:用 awk 对齐或转 CSV

纯文本结果不够直观?加一层 awk 快速美化:

# 左对齐 ID(10宽),居中 Name(20宽),右对齐 Status(12宽)
mysql_query -e "SELECT id, name, status FROM users;" | \
awk -F'\t' 'BEGIN { OFS="\t" } 
             { printf "%-10s %-20s %12s\n", $1, $2, $3 }'
<h1>转 CSV(自动加双引号、转义逗号)</h1><p>mysql_query -e "SELECT * FROM logs LIMIT 5;" | \
awk -F'\t' 'BEGIN{OFS=","} {for(i=1;i</p>

提示:
• MySQL 输出默认用 tab 分隔,awk -F'\t' 比空格更可靠
• 若字段含换行或引号,shell 层面处理较难,建议导出为 JSON(用 --json 选项,MySQL 5.7+ 支持)

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

shell脚本 mysql

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

417

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

840

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

2432

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

816

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

729

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

374

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2196

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

4032

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

647

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
尚观shell视频教程
尚观shell视频教程

共8课时 | 1.9万人学习

Linux开发视频教程
Linux开发视频教程

共18课时 | 4.6万人学习

Perl 入门教程
Perl 入门教程

共29课时 | 31.1万人学习