从AWS S3获取文件并对比:脚本运行输出异常求助
脚本问题排查与解决方案
原脚本核心问题
- 语法错误:if语句块末尾多了一个多余的
},直接导致脚本执行时抛出语法错误。 - 逻辑混乱:参数不足时错误输出"File $1 does not exist",此时$1并未传入,逻辑完全错误。
- 缺失关键定义:调用了未声明的
check_if_file_exists函数,且变量path_to_regional_config未赋值。 - 无核心功能代码:完全没有实现从AWS S3获取文件、文件对比的逻辑,未满足需求。
修复后完整实现脚本
以下是修正语法问题、补充S3文件获取与对比功能的完整脚本:
#!/bin/bash # 开启调试模式(方便排查问题,不需要可注释) set -x # 校验参数数量 if [[ $# -lt 3 ]]; then echo "ERROR: 需要传入3个参数" echo "用法: $0 <环境名> <S3源文件路径> <本地对比文件路径>" exit 1 fi env=$1 s3_src_path=$2 local_compare_file=$3 # 定义文件存在检查函数 check_if_file_exists() { local file_path=$1 if [[ ! -f "$file_path" ]]; then echo "错误: 文件 $file_path 不存在" exit 1 fi } # 从S3下载文件到本地临时文件 local_temp_file="/tmp/s3_download_${env}_$(date +%Y%m%d%H%M%S)" aws s3 cp "$s3_src_path" "$local_temp_file" if [[ $? -ne 0 ]]; then echo "错误: 从S3下载文件失败" exit 1 fi # 检查本地对比文件是否存在 check_if_file_exists "$local_compare_file" # 对比两个文件内容 echo "开始对比文件: $local_temp_file 和 $local_compare_file" diff_result=$(diff "$local_temp_file" "$local_compare_file") if [[ $? -eq 0 ]]; then echo "两个文件内容完全一致" else echo "文件内容存在差异:" echo "$diff_result" fi # 清理临时文件 rm -f "$local_temp_file"
脚本说明
- 参数要求:需传入环境名、目标S3文件路径、本地待对比文件路径三个参数。
- 核心流程:
- 校验参数合法性
- 从指定S3路径下载文件到本地临时文件
- 检查本地对比文件是否存在
- 使用
diff命令对比两个文件内容并输出结果 - 自动清理临时文件
原输出说明
原输出@ []和build 21-Jan-2024 20:00:40 + {"ApiUrl":"/api/v1"}并非当前错误脚本的正常输出,大概率是其他脚本或进程的输出混入——当前错误脚本因语法问题根本无法执行到功能逻辑部分。
内容的提问来源于stack exchange,提问作者user22667148
相关产品推荐
相关产品推荐

