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"
原脚本的问题分析
咱们来拆解下你原来写法里的几个关键错误:
- while循环语法完全错误:bash的while循环必须有
do和done包裹代码块,而且你用[ count1 > 0 ]的写法里,>是重定向符号,不是比较运算符,正确的数值比较应该用[ "$count1" -gt 0 ]——不过其实咱们根本不需要count这个变量。 - 错误的文件检查逻辑:你用
$file1 2> error1然后统计错误行数的方式太绕了,bash本身就有文件检查的条件判断:-f "$file"可以直接判断文件是否存在且是普通文件,简单直接。 - 冗余的临时文件:
touch error1和touch error2完全没必要,既占磁盘空间又容易留下垃圾文件,直接用条件判断就行。 - 变量赋值错误:
count1=wc<error1这种写法完全不符合bash的变量赋值规则,正确的命令替换应该用count1=$(wc -l < error1)——但还是那句话,这个步骤根本不需要。
脚本的优势
- 用函数复用了文件检查的逻辑,避免重复写两次相同的循环,代码更简洁易维护。
- 用
read -r避免了输入包含特殊字符时的解析错误。 - 明确的提示信息,用户体验更好。
内容的提问来源于stack exchange,提问作者florian de wulf
相关产品推荐
相关产品推荐

