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