Shell脚本: 判断http链接是否有效, 批量检测网址URL是否有效

在* NIX下,您可以使用curl发出一个简单的HEAD请求(HEAD只请求头,而不是页体):

curl --head http://ikeepstudying.com

然后,您可以只获取第一行,其中包含HTTP状态代码(200 OK,404 Not Found等):

curl -s --head http://ikeepstudying.com | head -n 1

然后检查您是否获得了体面的回复(状态代码为200或3 **):

curl -s --head http://ikeepstudying.com | head -n 1 | grep "HTTP/1.[01] [23].."

如果状态代码正常,这将输出第一行,如果没有,则输出第一行。你也可以管道到/ dev / null获得没有输出,并使用$?以确定其是否工作或否:

curl -s --head http://ikeepstudying.com | head -n 1 | grep "HTTP/1.[01] [23].." > /dev/null
# on success (page exists), $? will be 0; on failure (page does not exist or
# is unreachable), $? will be 1

EDIT -s只是告诉curl不显示“进度条”。

 

实例一:批量检测网址是否有效的Shell脚本

这是一个用来批量检测网址是否有效的Shell脚本,在Linux平台下运行。

使用方法:
1、把需要检测的网址放在一个文件名为:url.txt的文本文件中,一行一个网址;
2、把url.txt放在/root目录下
3、把脚本checkurl.sh也放在/root目录下
4、给checkurl.sh添加执行权限
5、#./checkurl.sh 运行 checkurl.sh
6、检测结果保存在 check-result.txt文件中   

checkurl.sh

fileurl='/root/url.txt'
for chkurl in $(cat ${fileurl})  # ${}忽略空格
do
    # -o 输出内容到/dev/null; -s 静默方式 ;-w 定义显示输出格式;"%{http_code}" 在最后被检索的 HTTP(S) 页中被找到的数字的代码
    HTTP_CODE=`curl -o /dev/null -s --head -w "%{http_code}" "${chkurl}"`
    if [ ${HTTP_CODE} -ne 200 ]
    then
        echo -e "error-${HTTP_CODE}:" $chkurl  >>check-result.txt
    else
        echo -e ${HTTP_CODE}: $chkurl  >>check-result.txt
    fi
done

url.txt

http://www.ikeepstudying.com
http://v.ikeepstudying.com
http://justcode.ikeepstudying.com
http://me.ikeepstudying.org
http://tools.ikeepstudying.com
http://services.ikeepstudying.com

 

实例二:批量检测网址是否有效的Shell脚本

#!/bin/bash
source /etc/init.d/functions
##下面的函数实现的是友好型提示,即如果命令输入错误,
##将会提示此命令的正确用法
function usage(){
    echo "usage:$0: url"
    exit 1        
}
##函数实现Url检测,如果正常返回url is ok!否则返回 url is bad
function check_url(){
    wget --spider -q -o /dev/null  --tries=1 -T 5 $1
    if [ $? -eq 0 ]
        then
            action "$1 is ok !" /bin/true
    else
            action "$1 is bad !" /bin/false
    fi
}
#将函数接入方法入口
function main(){
    if [ $# -eq 0 ]
        then
            usage
    fi
    check_url $1
}
#调用执行Main方法
main $*

上面需要注意的是,此脚本是以传参的形式进行url检测,如果需要以自己手动交互式输入的方法实现URL检测,那么只需要将传参的代码改为read -p 的方式即可以。

几个重要参数说明
$# 返回传入命令的参数个数
$1返回传入的第一个参数
$2返回传入的第二个参数
$*返回传入的所有参数

action 系统自带的功能实现,true为OK ,false为failed

 

实例三:添加超时

curlit()
{
    # 下面的15是连接超时时间,若访问localhost的HTTP服务超过15s仍然没有正确响应200头代码,则判断为无法访问。
    curl --connect-timeout 15 --max-time 20 --head --silent "$URL" | grep '200'
}

用法:

if ! curlit; then
// do something 
fi

更多参看:Linux: 智能监测自动重启Apache服务器的Shell脚本, 监控apache2, 监控web服务器

 

本文:Shell脚本: 判断http链接是否有效, 批量检测网址URL是否有效

Leave a Reply