我有一个bash脚本,它从不同的.txt文件中读取url(ven数组定义了txt文件)并且我卷曲它们,如果响应代码不是200,它会在error.txt中写入错误
可悲的是,它总是在最后完成,即使任何链接都没有错误,任何想法为什么?
for i in "${ven[@]}"; do
while IFS='' read -r line || [[ -n "$line" ]]; do
IP=$(curl --write-out '%{http_code}' --silent --output /dev/null $line?upstream=$1)
if [ $IP != 200 ]
then
counter=$((counter + 1))
echo $(date +"%d.%m.%y %T") : $line >> error.txt
fi
done < $i
done
答案 0 :(得分:1)
您的脚本有一些引用问题,但主要问题是测试表达式括号的使用不一致(双重与单一)以及您如何检查数字。
if [[ "$IP" -ne 200 ]]
-ne
表示“不相等”,因为您已使用双括号保持一致。
其他内容在引用变量的方式上更具预防性:
for i in "${ven[@]}"; do
while IFS='' read -r line || [[ -n "$line" ]]; do
IP=$(curl --write-out '%{http_code}' --silent --output /dev/null "$line?upstream=$1")
if [[ "$IP" -ne 200 ]]; then
counter=$((counter + 1))
echo "$(date +'%d.%m.%y %T')" : "$line" >> error.txt
fi
done < "$i"
done
注意:如果网站正在重定向(301),那么它将显示错误 - 可以考虑的事情。