从文本文件加载列表到Bash脚本

4
我有一个包含数据的.txt文件。
abc.com
google.com
....
....
yahoo.com

我希望将其作为列表加载到bash脚本中(即Domain_List=(“abc.com”“google.com”….“yahoo.com”))。这可行吗?

额外的信息,一旦获取了列表,它将在for循环和if语句中使用。

 for i in "${Domain_list[@]}
 do
     if grep -q "${Domain_list[counter]}" domains.log
   ....
   ....
     fi
 ....
     let counter=counter+1
 done

感谢您的来信,
更新: 我已经把格式更改为Domain_list=("google.com .... "yahoo.com"),并使用"source Doamin.txt"可以让我在Bash脚本中使用Domain_list作为列表。
#!/bin/bash

counter=0
source domain.txt
for i in "${domain_list[@]}"
do
   echo "${domain_list[counter]}"
   let counter=counter+1
done
echo "$counter"

3
你的问题之前已经有人提出过了:https://dev59.com/Q3I-5IYBdhLWcg3wwbZL - Bill
4个回答

5
假设你的数据文件名为web.txt。使用命令替换(反引号)和cat命令,可以构建数组。请参见以下代码:
myarray=(`cat web.txt`)
noofelements=${#myarray[*]}
#now traverse the array
counter=0
while [ $counter -lt $noofelements ]
do
    echo " Element $counter is  ${myarray[$counter]}"
    counter=$(( $counter + 1 ))

done

2

我使用了source命令,它正常工作。

 #!/bin/bash

 counter=0
 source domain.txt
 for i in "${domain_list[@]}"
 do
    echo "${domain_list[counter]}"
    let counter=counter+1
 done
 echo "$counter"

这个很简单,可以用于其他类型的文件,如.properties 文件。 - Pinaki Mukherjee

1
Domain_list=()
while read addr
do
    Domain_list+=($addr)
done < addresses.txt

那应该将文本文件的每一行存储到数组中。

谢谢您的回答,但我有一个快速问题,我实现的方式和您的方式之间(脚本存储方式)是否有区别? - Simply_me

1
如果我们从文件中获取列表,则不需要计数器。你可以简单地遍历列表并输出值。
#!/bin/bash

source domain.txt
for i in ${domain_list[@]}
do
   echo $i
done

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接