You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本获取两个有效文件失败求助:文件存在判断逻辑问题

简化你的文件检查脚本

你确实把问题复杂化啦!原脚本里有好几个语法错误和逻辑冗余的地方,咱们直接用更简洁的方式实现需求——循环获取用户输入,直到拿到存在的文件,根本不需要临时错误文件那一套。

先看修正后的完整脚本

#!/bin/bash

# 定义一个复用的函数:获取一个存在的文件
get_existing_file() {
    local prompt="$1"
    local file
    while true; do
        echo "$prompt"
        read -r file
        # 检查文件是否存在且是普通文件
        if [ -f "$file" ]; then
            echo "$file"
            return
        else
            echo "⚠️  文件 '$file' 不存在,请重新输入!"
        fi
    done
}

# 获取第一个存在的文件
file1=$(get_existing_file "请输入第一个文件的路径:")
# 获取第二个存在的文件
file2=$(get_existing_file "请输入第二个文件的路径:")

# 确认结果
echo "✅  成功获取两个存在的文件:"
echo "文件1:$file1"
echo "文件2:$file2"

原脚本的问题分析

咱们来拆解下你原来写法里的几个关键错误:

  1. while循环语法完全错误:bash的while循环必须有do和done包裹代码块,而且你用[ count1 > 0 ]的写法里,>是重定向符号,不是比较运算符,正确的数值比较应该用[ "$count1" -gt 0 ]——不过其实咱们根本不需要count这个变量。
  2. 错误的文件检查逻辑:你用$file1 2> error1然后统计错误行数的方式太绕了,bash本身就有文件检查的条件判断:-f "$file"可以直接判断文件是否存在且是普通文件,简单直接。
  3. 冗余的临时文件:touch error1和touch error2完全没必要,既占磁盘空间又容易留下垃圾文件,直接用条件判断就行。
  4. 变量赋值错误:count1=wc<error1这种写法完全不符合bash的变量赋值规则,正确的命令替换应该用count1=$(wc -l < error1)——但还是那句话,这个步骤根本不需要。

脚本的优势

  • 用函数复用了文件检查的逻辑,避免重复写两次相同的循环,代码更简洁易维护。
  • 用read -r避免了输入包含特殊字符时的解析错误。
  • 明确的提示信息,用户体验更好。

内容的提问来源于stack exchange,提问作者florian de wulf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:57:42