Оператор if / elif и сравнение строк в shell-скрипте - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь скопировать некоторые файлы из исходной папки в папки dest, после чего:

Я получаю имена файлов из папки des.Если файл существует в исходной папке, я копирую его из исходного в dest (сохраняя то же имя).

В противном случае, если файл из папки dest имеет определенное имя, я скопирую конкретный файл из источника в dest, сохранив имя файла dest.

И снова, если у него другое имя, я скопирую другой файл.

Моя проблема, по какой-то причине, во всех файлах, которые не входят в первый ifоператор введите оператор elif, как бы его ни звали.

, поскольку код находится на неподключенном ноутбуке, я просто напишу более важную часть здесь

SRC_FOLDER=/PATH/TO/SRCFOLDER
DST_FOLDER=/PATH/TO/DSTFOLDER

cd ${DST_FOLDER}
FILES=$(find . -maxdepth 1 \( -name "*.txt" -o -name "*.odp" \) -type f | sort)
for NAME in ${FILES}; do
    if [ -e ${SRC_FOLDER}/${NAME} ]; then 
        cp -fu ${SRC_FOLDER}/${NAME} ${NAME}
    elif [ ${NAME}=="SpecificName1.txt" ]; then
        cp -fu ${SRC_FOLDER}/CorrespondingFile1.txt ${NAME}
    elif [ ${NAME}=="SpecificName2.txt" ]; then
        cp -fu ${SRC_FOLDER}/CorrespondingFile2.txt ${NAME}
    fi
done

Я попытался изменить свое утверждение elif с помощью [[ ... ]]вместо [ ... ] или $NAME вместо ${NAME} (кстати, я бы хотел узнать разницу между ними) и даже = вместо ==, и комбинацию всего этого, но это ничего не меняет.Сдается мне, что любые файлы из моего FILES списка, которого нет в SRC_FOLDER, попадут в первый оператор elif.

Я также пытался написать else if вместо elif, но синтаксис, кажется, не принят (скрипт не будет работать вообще, говоря, что есть проблема с done)

Я знаю, что уже есть много вопросов по поводу оператора if, но я не могне могу найти в них ответа на мою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...