发布网友 发布时间:2024-10-23 23:04
共2个回答
热心网友 时间:2024-11-16 04:17
#问题在于对于数组file_list的引用错误,修改如下:
#!/bin/sh
#Get the file list name and the directory to search
listname=$1
pathname=$2
#read the content of the list line to line and put them into an array
k=0
while read LINE
do
file_list[$k]=$LINE
k=$k+1
done < $listname
cd $pathname
i=0
j=0
for LINE in "${file_list[@]}" #问题在于这里对数组的引用
do
FILE=`find . -name $LINE -print -quit`
if [ -n "$FILE" ];
then
a[$i]=$FILE
i=$i+1
else
b[$j]=$LINE
j=$j+1
fi
done
echo "found files:"
for i in "${a[@]}"; do
echo $i
done
echo "missing files:"
for j in "${b[@]}"; do
echo $j
done
另外补充一点:
数组下标:最好不要使用k=$k+1表达,应该使用((k+1))或者 k=`expr $k + 1`。因为,如果列表文件太多,会引起数组越界,超过系统允许数组下标的最大长度。
希望能够帮助到你,你的好评是我前进的动力,谢谢!
热心网友 时间:2024-11-16 04:20
没有文件内容和目录下文件列表,无法验证你的脚本是否有问题
脚本有很多吐嘈的地方:
有必要一个循环读入数组,然后再搞个循环读数组么?
直接在一个循环内操作不就行了?
没必要cd,然后find .;直接find $pathname不简单么
没必要给find的输出赋值,然后判断;直接 [ -f file]不就行了么,file是路径+文件名
10行以内的脚本,写得那么老长...