bash if 条件为循环
bash if conditions as loop
您好,我想创建一个 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
您好,我想创建一个 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