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

如何同时遍历Bash双数组?MongoDB备份脚本变量注入异常排查

MongoDB多库备份脚本变量注入问题排查

以下是常见的几个问题点及解决方式:

1. 数组遍历索引不匹配

如果脚本同时维护了数据库名、备份文件名、Mongo-URI三个数组,普通的for each遍历会导致变量错位,必须按索引对应遍历:

# 正确的索引遍历方式
dbs=("db_shop" "db_log" "db_user")
backup_names=("shop_20240520" "log_20240520" "user_20240520")
mongo_uris=("mongodb://admin:pass@127.0.0.1:27017/db_shop?authSource=admin" 
            "mongodb://admin:pass@127.0.0.1:27017/db_log?authSource=admin" 
            "mongodb://admin:pass@127.0.0.1:27017/db_user?authSource=admin")

# 按数组索引遍历,确保三个数组的元素一一对应
for idx in "${!dbs[@]}"; do
    target_db="${dbs[$idx]}"
    backup_path="./backups/${backup_names[$idx]}"
    target_uri="${mongo_uris[$idx]}"
    
    # 执行备份
    mongodump --uri="$target_uri" --db="$target_db" --out="$backup_path"
done

2. 变量引用未加双引号

如果数据库名、备份路径或URI包含空格、$、&等特殊字符,未加双引号会被Bash拆分解析,导致拼接错误:

# 错误示例:未加引号,特殊字符会被截断或解析
mongodump --uri=$target_uri --db=$target_db --out=$backup_path

# 正确写法:所有变量引用加双引号
mongodump --uri="$target_uri" --db="$target_db" --out="$backup_path"

3. Mongo-URI格式错误

连接超时大概率是URI格式问题,需检查:

  • 是否包含正确的认证信息(用户名、密码)
  • 是否指定了正确的端口与数据库名
  • 若使用管理员账号认证,需添加?authSource=admin参数
  • 避免URI里出现未转义的特殊字符(比如密码里的@、:需要用URL编码转义)

4. 数组定义错误

如果数组元素包含空格或特殊字符,未加双引号会被拆分成多个元素:

# 错误示例:带空格的元素被拆分
dbs=(my shop db log)  # 被解析为4个元素:my、shop、db、log

# 正确写法:带特殊字符的元素用双引号包裹
dbs=("my shop" "db log")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:15:48