KSH脚本语法错误求助:文件附件逻辑实现问题
KSH脚本语法错误修正及逻辑优化
原脚本存在语法解析错误,同时通配符匹配文件的判断逻辑有隐患,以下是具体修正方案:
核心问题点及修正
if语句中,]与then之间必须用分号;或换行分隔,KSH要求关键字then必须和条件表达式明确区分开for循环里,循环列表与do之间同样需要分号;或换行分隔,否则会触发语法报错- 用
[ -f ]判断带通配符的文件时,若匹配到多个文件会因参数过多报错,改用compgen -G检查是否存在匹配文件更可靠
修正后的完整脚本
# 检查当前目录是否存在当日目标文件 if compgen -G "${CLAIM_FILE_PREFIX}"*$(date +"%Y%m%d")*.html > /dev/null; then for FILE in "${CLAIM_FILE_PREFIX}"*$(date +"%Y%m%d")*.html; do ATTACHMENT_ARGS="$ATTACHMENT_ARGS $FILE" echo "$ATTACHMENT_ARGS" done else # 切换至归档目录,若切换失败直接退出避免后续错误 cd "$ARCHIVE_DIR" || exit 1 for FILE in "${CLAIM_FILE_PREFIX}"*.html; do ATTACHMENT_ARGS="$ATTACHMENT_ARGS $FILE" echo "$ATTACHMENT_ARGS" done fi
额外优化说明
- 给
ARCHIVE_DIR变量添加双引号,避免目录名含空格时出现异常 - 循环列表中的变量也添加双引号,兼容文件名包含空格的场景
- 增加
cd命令失败后的退出逻辑,防止后续在错误目录执行操作
内容的提问来源于stack exchange,提问作者khalaid mohammed
相关产品推荐
相关产品推荐

