You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

读取CSV批量创建MariaDB用户的Shell脚本运行异常排查

故障原因

你的脚本存在以下几个直接导致运行失败的问题:

  • 分隔符配置错误:CSV默认用逗号分隔字段,你在读取时把IFS设置为冒号:,根本无法正确拆分每一列的内容
  • 比较语法错误:(( ))是Shell专门做算术运算的语法,不能用来做字符串相等判断,判断性别字段值用这个语法会直接报错
  • 逻辑不全:你只写了男性用户的处理分支,完全没实现女性用户用continent字段作为密码的需求
  • MySQL语句语法风险:SQL语句里的用户名、密码、字符串值都没有加引号,只要字段值带空格、特殊字符就会执行失败
  • 基础逻辑疏漏:定义了FILENAME变量但没有把文件传入读取循环,也没有跳过CSV第一行的表头,会把表头行当成用户数据执行
  • 版本兼容性问题:MariaDB 10.4及以上版本不再支持直接在GRANT语句里用IDENTIFIED BY创建用户,必须先创建用户再单独授权
修复后的完整脚本
#!/bin/bash
# 填写有CREATE USER、GRANT权限的数据库管理员账号信息
DB_ADMIN="root"
DB_ADMIN_PWD="你的数据库管理员密码"
CSV_FILE="mgarr048.csv"

# 跳过CSV第一行表头,逐行读取用户数据
tail -n +2 "$CSV_FILE" | while IFS=',' read -r username first last gender dob state municipality season continent elective f1 airline
do
    # 跳过空行
    [ -z "$username" ] && { echo "检测到空行,跳过"; continue; }
    # 按规则匹配用户密码
    case "$gender" in
        "m") user_pwd="$airline" ;;
        "f") user_pwd="$continent" ;;
        *) echo "用户 $username 性别字段值无效,跳过创建"; continue ;;
    esac
    # 执行用户创建和授权操作
    mysql -u"$DB_ADMIN" -p"$DB_ADMIN_PWD" -e "
        CREATE USER IF NOT EXISTS '$username'@'%' IDENTIFIED BY '$user_pwd';
        GRANT INSERT ON *.* TO '$username'@'%';
        FLUSH PRIVILEGES;
    "
    [ $? -eq 0 ] && echo "用户 $username 创建成功,密码已按规则设置" || echo "用户 $username 创建失败"
done
使用前注意事项
  • 先把脚本里的DB_ADMIN、DB_ADMIN_PWD替换为你实际的数据库管理员账号和密码
  • 给脚本添加执行权限:chmod +x create_users.sh(替换成你实际的脚本文件名)
  • 如果CSV文件是在Windows下编辑生成的,先执行sed -i 's/\r$//' mgarr048.csv去除Windows换行符,否则会出现字段读取带多余字符的问题
  • 如果数据库开启了密码强度校验,请提前确认生成的密码符合复杂度要求,否则会创建用户失败

内容的提问来源于stack exchange,提问作者Michael Garrido

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 21:12:19