bash if条件作为循环

bash if条件作为循环,bash,filenames,md5sum,Bash,Filenames,Md5sum,您好,我想创建一个bash文件,在这里我定义了多个文件(数字未设置),脚本检查每个文件是否存在md5哈希,如果不存在,则创建一个? 我被if循环困住了,如何将长度可变的循环定义为if条件 COMPARE_FILES=("/folder/file1" "/folder2/file2" "file3" ... "/folderN/fileN") for i in "${COMPARE_FILES[@]}" do base=${i%%.*} # does no

您好,我想创建一个bash文件,在这里我定义了多个文件(数字未设置),脚本检查每个文件是否存在md5哈希,如果不存在,则创建一个? 我被if循环困住了,如何将长度可变的循环定义为if条件

COMPARE_FILES=("/folder/file1" "/folder2/file2" "file3" ... "/folderN/fileN")

for i in "${COMPARE_FILES[@]}"
do

    base=${i%%.*}                # does not work?
    file=${##*/}                 # works as expected

    if [ ! -f $COMPARE_DIR/compare/$base.md5 ]; then

        rsync $COMPARE_LOC/"$i" $COMPARE_DIR/compare/       #works as expected
        md5sum $COMPARE_LOC/$file > $COMPARE_DIR/$base.md5
        rm $COMPARE_DIR/compare/$file                        #does not work

    fi
done

我无法从循环中的数组中提取文件名和基名称,可能有人能帮我吗?

要从文件路径获取基名称,请使用
basename

$ i="/file/path/filename.ext"
$ base=$(basename $i)
$ echo $base
filename.ext
然后,您可以像以前那样获取文件名,而无需扩展名:

$ fnam=${base%.*}
$ echo $fnam
filename
或扩展:

$ extn=${base#*.}
$ echo $extn
ext

好的,谢谢,我为堆栈溢出写了一篇新文章,忘了一些东西:)但这不是问题,问题在于提取基名称和文件名,我总是把文件夹打开好的,我算出了文件名,但我无法让基工作?请看下面的帖子。已编辑,所以现在显示您应该从文件路径获取basename,然后从该文件路径拆分扩展名。