bash for循环有错误

时间:2017-07-29 06:49:36

标签: bash for-loop curl while-loop

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

1 个答案:

答案 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),那么它将显示错误 - 可以考虑的事情。