shell脚本中如何在if语句内跳过当前文件并处理同目录下的下一个文件
调整后的Shell脚本实现方案
# 替换为你实际的文件目录路径 test_path="/target/dir/*" # 初始化数组存储处理失败的文件名 failed_files=() for test_file in $test_path do # 跳过非普通文件(目录、软链接等),避免逻辑异常 if [ ! -f "$test_file" ]; then continue fi # 用子shell包裹文件处理逻辑,统一捕获错误 ( # 原有空文件判断逻辑,保留 if [ ! -s "$test_file" ]; then echo "$test_file 为空文件,处理失败" exit 1 fi # 你原有其他的文件处理代码写在这里 # 只要处理逻辑返回非0状态码,都会判定为处理失败 echo "正在处理 $test_file" ) # 捕获子shell执行结果,非0代表处理出错 if [ $? -ne 0 ]; then # 记录失败文件名 failed_files+=("$test_file") # 跳过当前文件,直接处理下一个 continue fi done # 所有文件处理完成后,存在失败文件就触发邮件通知 if [ ${#failed_files[@]} -gt 0 ]; then echo "本次处理失败的文件列表:${failed_files[*]}" | mail -s "文件处理失败告警" 你的邮箱地址@xxx.com fi
- 所有变量加了双引号包裹,避免文件名带空格时脚本执行异常
- 新增普通文件校验逻辑,排除目录、软链接等非目标处理对象
- 用子shell包裹所有处理逻辑,不管是空文件判断还是后续业务逻辑出错,都能统一捕获
- 失败文件名统一存在数组中,所有文件处理完成后一次性发邮件,避免重复发送多封告警
- 处理失败后自动执行continue跳过当前文件,不会中断后续文件的处理流程
内容的提问来源于stack exchange,提问作者christy
相关产品推荐
相关产品推荐

