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

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

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

curl --head https://blog.okdays.cn

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

curl -s --head https://blog.okdays.cn | head -n 1

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

curl -s --head https://blog.okdays.cn | head -n 1 | grep "HTTP/1.[01] [23].."

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

curl -s --head https://blog.okdays.cn | 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

https://blog.okdays.cn
https://m.blog.okdays.cn
https://v.blog.okdays.cn

 


实例二:批量检测网址是否有效的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
}


上面需要注意的是,此脚本是以传参的形式进行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


猜你喜欢