LINUX 脚本无法得到正确的结果 已经验证过文件读取到数组没有问题_百度...

发布网友 发布时间: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行以内的脚本,写得那么老长...

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com