如何在Bash脚本中循环检查命令行传入的四个文件是否存在,不存在则退出?
用循环优化Bash脚本的输入文件检查
没问题!把逐个if判断改成循环不仅更简洁,还能让脚本更容易扩展。这里给你一个优化后的实现,附带详细说明:
完整脚本示例
#!/bin/bash # 首先检查命令行参数数量是否为4 if [[ $# -ne 4 ]]; then echo "错误:请提供恰好4个输入文件路径作为参数" echo "用法:$0 INF1 INF2 INF3 INF4" exit 1 fi # 将所有输入参数存入数组,方便循环遍历 input_files=("$@") # 循环检查每个文件是否存在 for file in "${input_files[@]}"; do # 检查文件是否为普通文件(存在且是常规文件) if [[ ! -f "$file" ]]; then echo "错误:输入文件 '$file' 不存在或不是常规文件" exit 1 fi done # 如果所有文件都存在,继续执行后续逻辑 echo "所有输入文件均存在,开始执行脚本..." # 这里添加你的脚本核心逻辑
关键细节解释
- 参数数量检查:先判断
$#(命令行参数的总数)是否等于4,避免用户传错参数数量,同时给出清晰的用法提示。 - 数组存储参数:用
input_files=("$@")把所有命令行参数存入数组,"$@"会保留每个参数的原始格式(包括带空格的文件名)。 - 循环遍历检查:通过
for file in "${input_files[@]}"遍历数组中的每个文件路径,确保每个文件都被检查到。 - 文件存在性判断:
[[ ! -f "$file" ]]用于判断文件是否不存在或者不是常规文件(比如是目录的情况),如果触发这个条件,立刻输出错误信息并以exit 1退出脚本(非0退出码表示执行出错)。 - 双引号的重要性:所有变量都用双引号包裹,防止文件名包含空格、特殊字符时被错误拆分,保证脚本的健壮性。
对比原写法的优势
原来的逐个if判断写法虽然能实现功能,但当需要检查的文件数量增加时,你需要重复写大量相似的代码。而循环写法只需要修改参数数量检查的数字,就能轻松适配更多输入文件,维护成本更低。
内容的提问来源于stack exchange,提问作者Michael Gruenstaeudl
相关产品推荐
相关产品推荐

