중첩된 For 루프의 무한 루프

중첩된 For 루프의 무한 루프

일부 파일을 구문 분석하기 위해 다음 스크립트를 작성 중입니다. 스크립트는 실제로 내가 원하는 것을 수행합니다. 올바른 파일에서 올바른 정보를 얻습니다. 가장 바깥쪽 for 루프가 올바른 횟수만큼 실행되는 것으로 보입니다. 아래의 중첩 루프는 필요한 것보다 더 많이 실행되며 가장 안쪽 루프는 무한히 실행됩니다.

#!/bin/bash
for f in $HOME/configtool/interfaces/*
do
     for d in $(cat $HOME/configtool/asrlist);
     do
          for n in $(cat $HOME/configtool/nodes);
          do
               grep $d $f | grep 'up\|down' >> $HOME/configtool/distill/$n
          done
     done
done

확장성 때문에 가능하면 루프를 종료하기 위해 매직 넘버를 사용하는 것을 피하고 싶습니다.

누구든지 어떤 아이디어가 있습니까?

답변1

실제로 루프가 전혀 필요하지 않습니다. grep -f정규식 검색을 위해 파일을 읽을 수 있습니다. 가장 안쪽 루프는 원래 grep을 반복해서 반복하지만 동일한 출력을 다른 파일에 씁니다. 왜 안 돼,

out=$(mktemp)
grep --no-filename --file="$HOME"/configtool/asrlist -- "$HOME"/configtool/interfaces/* | grep 'up\|down' > "$out"
for n in $(cat "$HOME"/configtool/nodes)
do
  cp "$out" "$HOME"/configtool/distill/"$n"
done

관련 정보