【发布时间】:2018-09-07 15:21:43
【问题描述】:
我的 bash 脚本的最后一部分有问题。它接收来自 500 个网址的输入,并且应该从每个网址获取服务器信息。它工作了一会儿,然后就像 45 元素一样停止。最后我的循环有什么想法吗?
#initializing variables
timeout=5
headerFile="lab06.output"
dataFile="fortune500.tsv"
dataURL="http://www.tech.mtu.edu/~toarney/sat3310/lab09/"
dataPath="/home/pjvaglic/Documents/labs/lab06/data/"
curlOptions="--fail --connect-timeout $timeout"
#creating the array
declare -a myWebsitearray
#obtaining the data file
wget $dataURL$dataFile -O $dataPath$dataFile
#getting rid of the crap from dos
sed -n "s/^m//" $dataPath$dataFile
readarray -t myWebsitesarray < <(cut -f3 -d$'\t' $dataPath$dataFile)
myWebsitesarray=("${myWebsitesarray[@]:1}")
websitesCount=${#myWebsitesarray[*]}
echo "There are $websitesCount websites in $dataPath$dataFile"
#echo -e ${myWebsitesarray[200]}
#printing each line in the array
for line in ${myWebsitesarray[*]}
do
echo "$line"
done
#run each website URL and gather header information
for line in "${myWebsitearray[@]}"
do
((count++))
echo -e "\\rPlease wait... $count of $websitesCount"
curl --head "$curlOptions" "$line" | awk '/Server: / {print $2 }' >> $dataPath$headerFile
done
#display results
echo "Results: "
sort $dataPath$headerFile | uniq -c | sort -n
【问题讨论】:
-
将您的代码粘贴到shellcheck.net 以获得一些重要反馈
-
首先从您传递给
curl的选项中删除--silent。如果您的curl调用之一失败,可能会导致提前退出,而您不会知道。 -
仅供参考,“摆脱 dos 废话” sed 命令没有任何作用。
-
printf "%s\n" "${myWebsitesarray[@]}"会更简洁更正确。