Shell脚本如何提取竖线分隔的数据库名并批量执行导出操作
实现代码
直接复制以下脚本修改对应配置即可使用:
#!/bin/bash # 自定义配置项,按实际情况修改 login_account="abc" login_pwd="你的实际密码" log_path="./export_database.log" export_sh_path="./export.sh" vql_file_path="export_delta.vql" server_addr="localhost:9999" # 清空历史日志(可选) > "$log_path" # 替换下方「你的Java查询数据库列表命令」为实际执行的java CLI命令 你的Java查询数据库列表命令 | awk -F '|' 'NR>1 && $2!="" {gsub(/^[[:space:]]+|[[:space:]]+$/, "", $2); print $2}' | while read -r db_name do echo "=== 开始导出数据库:$db_name ===" >> "$log_path" "$export_sh_path" --login "$login_account" --password "$login_pwd" --file "$vql_file_path" --server "$server_addr/$db_name" 2>&1 >> "$log_path" # 导出结果校验(可选,不需要可以删掉) if [ $? -eq 0 ]; then echo "✅ 数据库 $db_name 导出完成" >> "$log_path" else echo "❌ 数据库 $db_name 导出失败,请检查错误日志" >> "$log_path" fi done
关键逻辑说明
- 用
awk处理竖线分隔的输出:指定|为分隔符,NR>1跳过第一行表头,过滤空行后提取第二列的数据库名,同时自动去掉字段前后的多余空格 - 采用
while read循环而非for循环,避免数据库名存在特殊字符时循环出错 - 所有变量用双引号包裹,避免路径、名称带空格时执行报错
可选调整方案
如果你需要先把Java命令输出的数据库列表存到本地文件再处理,只需要把管道前的Java命令替换为cat 你的列表文件路径即可。
内容的提问来源于stack exchange,提问作者Manju
相关产品推荐
相关产品推荐

