#!/bin/bash # 确保脚本在错误时停止 # set -e # 获取 Model 名称参数 if [ -z "$1" ]; then echo "用法: $0 " echo "示例: $0 Admin (将查询表 'xhAdmin' 的结构)" echo "提示: 如果表名不遵循 'xh' 前缀规则,请手动修改脚本或传入完整表名逻辑" exit 1 fi MODEL_NAME=$1 # 根据规则:Model名 -> 表名 (添加 xh 前缀) TABLE_NAME="xh${MODEL_NAME}" # 定位 .env 文件 (假设脚本位于 scripts/ 目录,.env 在项目根目录) SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) PROJECT_ROOT=$(dirname "$SCRIPT_DIR") ENV_FILE="$PROJECT_ROOT/.env" if [ ! -f "$ENV_FILE" ]; then echo "错误: 未找到 .env 文件: $ENV_FILE" exit 1 fi # 辅助函数:从 .env 读取变量并去除单引号 get_env_var() { # 1. grep 找到行 # 2. cut 取等号后的部分 # 3. tr 删除回车符 (兼容 Windows 换行) # 4. sed 删除首尾的单引号或双引号 grep "^$1=" "$ENV_FILE" | cut -d'=' -f2- | tr -d '\r' | sed -E "s/^['\"]//;s/['\"]$//" } # 提取数据库配置 DB_DSN=$(get_env_var "DB_DSN") DB_USER=$(get_env_var "DB_USERNAME") DB_PASS=$(get_env_var "DB_PASSWORD") # 从 DSN 解析 HOST 和 DB_NAME # 格式示例: mysql:host=127.0.0.1;dbname=testdb DB_HOST=$(echo "$DB_DSN" | sed -n 's/.*host=\([^;]*\).*/\1/p') DB_NAME=$(echo "$DB_DSN" | sed -n 's/.*dbname=\([^;]*\).*/\1/p') # 检查是否安装了 mysql 客户端 if ! command -v mysql &> /dev/null; then echo "错误: 未找到 'mysql' 命令行工具。请确保已安装 MySQL 客户端。" exit 1 fi echo "正在连接数据库: $DB_NAME ($DB_HOST)..." echo "正在查询表结构: $TABLE_NAME (Model: $MODEL_NAME)..." echo "----------------------------------------" # 执行查询 # -t 以表格形式输出 mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -t -e "SHOW FULL COLUMNS FROM \`$TABLE_NAME\`;" if [ $? -eq 0 ]; then echo "----------------------------------------" echo "查询成功。" else echo "----------------------------------------" echo "查询失败。请检查表名是否存在或数据库连接配置。" fi