Bash脚本开发:检查多目录存在性并按需输出指定内容
修正Bash脚本:逐个检查目录及文件存在性
嘿,你的原始脚本逻辑确实有不少问题——它把所有目录的存在性判断放在了最前面,而且文件检查也没有针对每个单独的目录,这就导致要么全输出目录名,要么全输出"no directory exists",完全不符合你“逐个目录检查,对应输出或显示missing”的需求。
我帮你重新写了脚本,完全贴合你的需求:
#!/bin/bash # 定义要检查的文件和目录基础路径 target_file="file.txt" base_dir="/folders" # 若目录是相对路径可改成"./folders"或其他实际路径 # 遍历folder1到folder11 for dir_name in folder{1..11}; do # 拼接完整的目录路径 full_dir="${base_dir}/${dir_name}" # 拼接目录下目标文件的完整路径 full_file="${full_dir}/${target_file}" # 检查目录是否存在,且目录下的目标文件也存在 if [[ -d "${full_dir}" && -f "${full_file}" ]]; then # 符合条件,输出目录名并调用你的函数 echo "${dir_name}" # 替换成你的实际函数调用,比如:your_custom_function else # 目录不存在,或目录存在但文件缺失,输出missing echo "${dir_name}: missing" fi done
关键修正点说明:
- 逐个遍历处理:不再提前批量判断所有目录,而是循环每个目录单独检查,完美匹配你“每个目录对应输出一行”的要求
- 精准的路径拼接:把基础目录和目录名拼接成完整路径,避免路径错误导致的判断失误
- 更严谨的存在性判断:用
-d确保是有效目录,用-f确保是普通文件(比-e更精准,-e会匹配链接、设备文件等非普通文件的条目) - 直观的错误提示:输出
目录名: missing能让你清楚知道哪个目录出了问题,如果你只需要纯"missing",把else分支改成echo "missing"即可
内容的提问来源于stack exchange,提问作者Prins
相关产品推荐
相关产品推荐

