сравнивая файл в инкрементно пронумерованных каталогах, используя bash - PullRequest
0 голосов
/ 10 ноября 2019

Я создал подкаталог в test dir для каждого из тестовых случаев.

#ls test/
test1   test2   test3   test4   test5

Каждый подкаталог содержит expected.txt & actual.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]];do

/ bin / sh: -c: строка 1: синтаксическая ошибка: неожиданный конец файла

Если есть лучший способ добиться того, что я пытаюсь сделать, это тоже будет обучение.

1 Ответ

0 голосов
/ 10 ноября 2019

Вы получаете синтаксическую ошибку в вашем скрипте, потому что вы используете расширение 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...