Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash检查是否存在循环内具有变量名的文件_Bash_Loops_Conditional Statements - Fatal编程技术网

Bash检查是否存在循环内具有变量名的文件

Bash检查是否存在循环内具有变量名的文件,bash,loops,conditional-statements,Bash,Loops,Conditional Statements,我想检查文件是否存在。当然,这在很多地方都有解释。现在我在一个循环中,就像: for ((l=0;l<5;l+=1)); do if -a FILENAMEl #FILENAME contains l!!!!!!!!! then "FILENAMEl exists" else do ............. fi done for((l=0;l假设您正在尝试查找文件名格式为file1.csv、file2.csv等的文件 for i in {1..5};

我想检查文件是否存在。当然,这在很多地方都有解释。现在我在一个循环中,就像:

for ((l=0;l<5;l+=1));

do

if -a FILENAMEl #FILENAME contains l!!!!!!!!!

then "FILENAMEl exists"

else

do

.............

fi

done

for((l=0;l假设您正在尝试查找文件名格式为file1.csv、file2.csv等的文件

 for i in {1..5}; 
      do f="file$i.csv"; 
         if test -e $f; 
            then echo "$f exists"; 
            else echo "$f does not exist"; 
         fi 
      done
也许你需要的只是一个
查找

 find . -name "file?.csv" -size +10k
您可以将文件名限制为后缀1..5,并对查找结果执行操作(检查find的-exec或更一般的xargs,如下所示)


主要问题是,您将变量名
l
的语法与文件名的语法混合在一起。如果您希望将它们一起使用,以形成带有变量的文件名的一部分,则需要语法中断(由
“$”
)或使用大括号(
{}

如果文件名中间有一个变量,则括号工作得最好。例如:<代码>“MyoFiele$$L}头。TXT”< /C> >将创建文件,如“代码> MyAuthFiele1Health.TXT ,<代码> MyOxFiele2DHead。TXT 等

以下是更正的原始示例:

for ((l=0;l<5;l+=1))
do
    if test -a FILENAME$l 
    then echo "FILENAME$l exists"
    else echo "FILENAME$l doesn't exist"
    fi
done
如果你想要更多的极简主义,这里还有另一种方法:

for l in {1..5}; do
  file="filename$l"
  if [[ -a "$file" ]]; then
    echo "$file exists"
  else
    echo "$file does not exist"
  fi
done
for l in {1..5}; do f="filename$l"
  [[ -a "$f" ]] && echo "$f exists" || echo "$f does not exist"
done
现在,如果您不只是需要打印状态,还需要执行其他操作,请使用函数调用使额外的工作模块正常工作:

for l in {1..5} ; do f="$filename$l"
  [[ -a "$f" ] && process_file $f || non_existant_file $f
done
然后,在其他地方,您应该定义
过程文件
非存在文件

process_file() {
   local file="$1"
   # do whatever is needed for an existing file
}

non_existant_file() {
   local file="$1"
   # do whatever is needed for a non-existant file
}

你到底想在这里做什么?那里的
-a
是什么?你想构造一个带有后缀的文件名并检查它(所以
file1
file2
,等等)?你想检查一个完全按数字命名的文件,还是将数字作为子字符串?还有,“子字符串”这种方法可能无法按您所希望的方式工作。“file102”毕竟包含“2”。除了“102”之外,您是否希望“file102”为“2”返回true?更好的问题是提供文件名的示例(如果不是规范)。(另外,
-a
不是bash命令;它可能是
test
命令的一个参数,也可以写成
[
,但它本身不做任何事情)。啊,非常感谢!它可以工作!还有一个问题:如何插入文件(它是.txt)的附加条件有条目或大于10kB?如果是文本文件,最简单的方法是使用
size=$(wc-c
我找到了$f-ge 9,其中f是文件名,9是9kB。因此,这里我检查文件是否大于或等于9kB。但如果我想检查这两种情况(文件存在且大于…),我不确定语法[[-e$f]]&&[$f-ge 9]]?
process_file() {
   local file="$1"
   # do whatever is needed for an existing file
}

non_existant_file() {
   local file="$1"
   # do whatever is needed for a non-existant file
}