如何将从index / item 0开始的数组中的单个项值传递给function并循环遍历数组,直到所有项都被传递?
此脚本的目的是从名为array_list的文本文件中提取行并将它们传递给数组,然后在循环中对每个数组项执行一个函数,直到所有项都已通过,并将结果回显到一个名为results.txt显示HTTP状态代码到关联的URL&#39>
#!/bin/bash
#
#Script to lookup URL address and capture associated HTTP Status Code (EG: 200, 301, 400, 404,500, 503)
#
#
declare -a array
array=()
getArray()
{
i=0
while read line
do
array[i]=$line
i=$(($i + 1))
done < $1
}
getArray "array_list"
for url in ${array[@]}
do
function call()
{
curl -s -o /dev/null -w "%{http_code}" $url
}
done
response=$(call)
echo $url $response >> result.txt
答案 0 :(得分:1)
这是一个循环,它多次定义函数curl
,但从不调用它:
for url in ${array[@]}
do
function call()
{
curl -s -o /dev/null -w "%{http_code}" $url
}
done
为什么你想要一个功能并不明显。你可以这样做:
for url in ${array[@]}; do
printf "%s " "$url" >> results.txt
curl -s -o /dev/null -w "%{http_code}" "$url" >> results.txt
done
当然,你可以定义函数(带参数):
function getfile() {
curl -s -o /dev/null -w "%{http_code}" "$1"
}
然后循环调用它:
for url in ${array[@]}; do
result=$(getfile "$url")
printf "%s %s\n" "$url" "$result" >> results.txt
done
与您的问题没有直接关系,但是:
您的整个getArray
函数已经作为内置的bash存在,所以您不妨使用它:
mapfiles -t array < array_list
有关更多选项,请参阅help mapfiles
。
答案 1 :(得分:0)
以下是我为使其发挥作用所做的更改。我会尝试rici建议的方式。
#!/bin/bash
#Script to lookup URL address and capture associated HTTP Status Code (EG: 200, 301, 400, 404,500, 503)
#
declare -a array
array=()
getArray()
{
i=0
while read line
do
array[i]=$line
i=$(($i + 1))
done < $1
}
getArray "array_list"
count=${#array[@]}
index=0
while [ "$index" -lt "$count" ]
do
#echo -e "index: $index\tvalue: ${array[$index]}"
for url in ${array[$index]}
do
function call()
{
curl -s -o /dev/null -w "%{http_code}" $url
}
done
response=$(call)
echo $url $response >> result
let "index++"
done