shell脚本中的if / elif语句和字符串比较

时间:2019-07-04 08:21:45

标签: bash if-statement compare

我正在尝试按照以下步骤将某些文件从源文件夹复制到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

我尝试通过使用[[ ... ]]代替[ ... ]$NAME代替${NAME}来更改elif语句(我想知道两者之间的区别顺便说一句),甚至是=而不是==,以及所有这些的结合,但这并没有改变。在我看来,我的FILES列表中不在SRC_FOLDER中的所有文件都将进入第一个elif语句。

我也尝试过写else if而不是elif,但是语法似乎没有被接受(脚本根本无法使用,说明{{1 }})

我知道关于if语句已经存在很多问题,但是我在其中找不到解决我问题的答案。

0 个答案:

没有答案