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
doneurl.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