db_struct.sh 2.1 KB

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