Shell脚本:好主意,写得不好

Shell脚本:好主意,写得不好,shell,scripting,Shell,Scripting,我必须制作一个shell脚本,返回一个列表,其中包含3行或更多行上有单词“hello”的所有文件 我知道这个想法,但我觉得我的剧本写得不好 nr=$(ls | wc -l ) for ((i = 0; i < nr ; i++));do fis[$i]=$(ls | sed -n '$i p') done for ((i = 0; i < nr ; i++));do if [$(cat $(fis[$i]) | grep 'hello' | wc -l) -

我必须制作一个shell脚本,返回一个列表,其中包含3行或更多行上有单词“hello”的所有文件

我知道这个想法,但我觉得我的剧本写得不好

nr=$(ls | wc -l )

for ((i = 0; i < nr ; i++));do

    fis[$i]=$(ls | sed -n '$i p')

done

for ((i = 0; i < nr ; i++));do

    if [$(cat $(fis[$i]) | grep 'hello' | wc -l) -gt 2 ];

    then

        echo $( fis[$i])

    fi

done
nr=$(ls | wc-l)
对于((i=0;i

首先,我取一个返回文件数的数字“nr”,而不是一个从0到nr的数字,并将所有文件放入一个数组fis[I],用sed选择每一行。然后,如果fis[i]至少在3行上包含“hello”,我会显示它。

我认为您编写的代码太多了

您可以将此
用于循环

files=()
for f in *; do
   [[ $(grep -c "hello" "$f") -gt 2 ]] && files+=("$f")
done

printf "List of files with more than 2 occurrences of 'hello' is:\n"
printf "%s\n" "${files[@]}"

我知道你的代码很好,但我更想知道我的代码有什么问题。像使用ls、wc、2 for循环、sed和cat这样的东西其实并不需要。它可以在一个
for循环中完成,如我上面所示。