我有一个 .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