使用curl使用列表文件从网页获取http代码

时间:2018-04-24 10:13:49

标签: arrays bash shell curl

我正在使用脚本,并且是shell脚本的新手。

我正在尝试从源文件创建一个将在多个网站上运行curl的脚本。

    arr_values=()
#Getting list of domains/websites to check, into array. 
read -ra arr_values <<< $(head -n 999 web.csv)

for s in "${arr_values[@]}"; do
#Running curl on each websites from list.
  res=$(curl -s -o /dev/null -w "%{http_code}" $s)

if [ $res == "200" ]; then 
    echo "OK"; 
elif
    [ $res == "302" ]; then
    echo "OK";
else
    echo "Error";
fi
done

但是当我在没有if语句的情况下运行时,我得到了代码000。 如果我手动运行它,一切正常。 结果是200或302.

2 个答案:

答案 0 :(得分:0)

你可以在表达式周围使用单括号,即[和],而不是[[和]]。您也可以从要检查的值中删除星号,即"200",而不是*"200"*

答案 1 :(得分:0)

假设CSV文件是:

www.yahoo.com
www.google.ca

即。每行一个站点。同时在文件上运行dos2unix,以确保每行末尾没有“\ r \ n”字符。

然后,运行以下代码:

#!/bin/bash

arr_values=()
#Getting list of domains/websites to check, into array.
read -ra arr_values <<< $(head -n 999 web.csv)

for s in "${arr_values[@]}"
do
    #Running curl on each websites from list.
    res=$(curl -s -o /dev/null -w "%{http_code}" $s)

    if [ $res == "200" ]
    then
        echo "OK $s $res";
    elif [ $res == "302" ]
    then
        echo "OK $s $res";
    else
        echo "Error $s $res";
    fi
done

得到了这个输出:

./t.bash 
Error www.yahoo.com 301
OK www.google.ca 200

修改内容:

  • 如果使用'=='
  • 验证条件
  • 稍微修改了echo语句以便于调试