| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #!/bin/bash
- # 确保脚本在错误时停止
- # set -e
- # 获取 Model 名称参数
- if [ -z "$1" ]; then
- echo "用法: $0 <ModelName>"
- 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
|