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"をキャプチャし、この文字列を3番目のパラメータとして渡す必要があります。

デフォルトでは、私のスクリプトは次のようになります。

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

3番目のパラメータを検証するために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

おすすめ記事