while 루프에서 여러 파일 읽기

while 루프에서 여러 파일 읽기

.gz 파일 목록이 있습니다. 예를 들면 다음과 같습니다.

abc-1.1.0-abc.tar.gz
abc-1.2.3-hfc.tar.gz
hfg-1.8.9-jdh.tar.gz

파일 이름 내용:

abcd_name_fb
hsgdh_name_cd

내 스크립트에서는 파일 이름에서 "1.1.0,1.2.3,1.8.9" 문자열을 캡처하고 이 문자열을 세 번째 매개변수로 전달해야 합니다.

기본적으로 내 스크립트는 다음과 같습니다.

if [[ "$#" -ne '3' ]]
then
    exit 1
fi

for i in /home/dir/*.gz
do
    n=$( echo $i |sed -E -n 's/.*\-(.*)\-.*/\1/p')
    echo $n
done > /home/dir/n.txt

while read -r name
do
if [[ "$1" == "some_string" ]] && [[ "$name" == "$2" ]] || [[ "$2" == "ALL" ]]
then
mkdir -p /home/ce/pwde/${name}
fi
done < /home/file_name

세 번째 매개변수의 유효성을 검사하기 위해 n.txt 파일을 읽는 동시에 file_name 파일을 읽는 방법을 알 수 없습니다.

터미널에서 스크립트를 실행하고 있습니다.

./script.sh some_string ALL 1.2.3

감사해요.

답변1

아마도 이전에는 내 마음이 다른 곳으로 방황했지만 이제는 다음과 같은 중첩 while 루프를 사용하고 있으며 작동 중입니다.

while read -r n
do
  if [[ "$3" == "$n" ]]
  then
    while read -r name || [[ -n "$name" ]]
    do
      if [[ "$1" == "some_string" ]] && [[ "$name" == "$2" ]] || [[ "$2" == "ALL" ]]
      then
        mkdir -p /home/ce/pwde/${name}
      fi
    done < /home/file_name
  fi
done < /home/dir/n.txt

관련 정보