如何在Shell脚本的if条件中排除mov_order,仅处理account实体?
问题描述
我有两个文件entity_list.txt和other_entity_list.txt,其中entity_list.txt包含mov_order和account两个实体。现在需要修改Shell脚本,忽略mov_order实体,只在特定场景下处理account实体,请求协助修复当前的if条件逻辑及rsync同步代码。
相关文件内容
文件1:entity_list.txt
路径:/efs/home/ps604312/testing_vela/entity_list.txt
文件内容:
staging staging-modules mov_order staging staging-modules account
文件2:other_entity_list.txt
路径:/efs/home/ps604312/testing_vela/other_entity_list.txt
原Shell脚本片段
if [[ "${ENTITY_NAME}" != "${OTHER_ENTITY_NAME}" && "${PRODUCT_ENTITY}" == "staging" ]]; then echo "syncing only "${ENTITY_NAME}" entity" echo "folder "${ENTITY_NAME}" is exist" rsync -avzh ${SOURCE_PATH}/"${ENTITY_NAME}" ${DESTINATION_PATH}/"${ENTITY_NAME}" else rsync -avzh ${SOURCE_PATH}/"${ENTITY_NAME}" ${DESTINATION_PATH}/"${ENTITY_NAME}" fi
原脚本问题分析
- 未对
mov_order实体做过滤,无论实体类型都会执行rsync同步 - if与else分支执行完全相同的rsync命令,逻辑完全冗余
- echo命令的字符串拼接存在语法问题,变量未被正确包裹
- 路径变量未加双引号,遇到含空格的路径会报错
修复后的脚本
# 优先过滤mov_order实体,直接跳过处理 if [[ "${ENTITY_NAME}" == "mov_order" ]]; then echo "忽略mov_order实体,跳过同步" exit 0 fi # 仅在指定场景下同步account实体 if [[ "${PRODUCT_ENTITY}" == "staging" && "${ENTITY_NAME}" != "${OTHER_ENTITY_NAME}" ]]; then echo "正在同步指定实体:${ENTITY_NAME}" echo "确认${ENTITY_NAME}文件夹存在" rsync -avzh "${SOURCE_PATH}/${ENTITY_NAME}" "${DESTINATION_PATH}/${ENTITY_NAME}" else echo "不符合同步条件,跳过${ENTITY_NAME}实体同步" # 若不需要非指定场景的同步,可直接注释掉下方rsync命令 # rsync -avzh "${SOURCE_PATH}/${ENTITY_NAME}" "${DESTINATION_PATH}/${ENTITY_NAME}" fi
修复说明
- 新增
mov_order实体过滤逻辑,直接跳过该实体的所有处理 - 修复echo命令的字符串拼接问题,用双引号包裹完整输出内容
- 移除冗余的重复rsync逻辑,明确区分符合/不符合条件的行为
- 给所有路径和变量添加双引号,避免特殊字符导致的语法错误
内容的提问来源于stack exchange,提问作者rakesh ricky
相关产品推荐
相关产品推荐

