使用bash比较编号递增目录中的文件

我在test目录中为每个测试用例创建了一个子目录。

#ls test/
test1   test2   test3   test4   test5

每个子目录包含expected.txtactual.txt文件。我正在尝试使用bash diff命令验证两个文件中的内容是否相同。 由于会有数十个这样的测试用例,因此我要遍历子目录,因为子目录的后缀名越来越多。 但是,在while语句中出现以下错误:

num=1
while [[ -f ./test/test${num} ]] ; do
    DIFF=$(diff test/test${num}/actual.txt test/test${num}/expected.txt)

    if [ "$DIFF" != "" ]
    then
        echo "Test Case ${num} ...Failed"
    else
        echo "Test Case ${num} ...Passed"
    fi

    num++
done

错误

while [[--f ./test/test]];做

/ bin / sh:-c:第1行:语法错误:文件意外结束

如果有更好的方法来实现我的目标,那也是一种学习。

liutihj456 回答:使用bash比较编号递增目录中的文件

由于使用bash扩展名[[并使用/bin/sh运行脚本,因此脚本中出现语法错误。可以在bash下运行脚本,也可以将[[替换为单个[

您的脚本毫无意义:

  • [[ -f-检查./test/test${num}是否为文件。因此,如果是文件,则将执行while主体。然后,您比较./test/test${num}/actual.txt文件。但是,如果./test/test${num}是文件,则它不是目录,因此不会有任何./test/test${num}/anything,因为它是文件。您最有可能打算使用-d
  • diff用于在终端中提供美观的输出。使用cmp比较脚本中的文件。

我想您的脚本可能如下所示:

find . -mindepth 2 -maxdepth 2 -type d -regex './test/test[0-9]+' |
while read -r dir; do
   if cmp "$dir"/actual.txt "$dir"/expected.txt; then
       echo "Test case $dir Failed"
   else
       echo "Test case $dir Passed"
   fi
done
本文链接:https://www.f2er.com/3130495.html

大家都在问