要识别链接并从中找出无效链接,我们使用lynx和curl命令。其中lynx有一个选项-traversal,能够以递归方式访问网站页面并建立网站中所有超链接的列表。用curl验证每一个链接的有效性。
脚本如下:
#! /bin/bash
#文件名:find_broken.sh
#用途:查找网站中的无效连接
if [ $# -ne 1 ]
then
echo -e "Usage:$0 URL "
exit 1
fi
echo Broken links
mkdir /tmp/$$.lynx #$$:表示当前脚本运行的进程号
cd /tmp/$$.lynx
lynx -traversal $1 > /dev/null
count=0
sort -u reject.data > links.txt
#sort -u 与uniq命令基本相似,区别参考 https://blog.csdn.net/yilovexing/article/details/79237214
while read link
do
output=`curl -I $link -s | grep "HTTP/.*OK"`
if [[ -z $output ]]
then
echo $link
let count++
fi
done < links.txt
[ $count -eq 0 ] && echo echo No broken links found
工作原理:lynx -traversal URL会在工作目录下生成数个文件,其中包括reject.date,该文件包含网站中的所有链接。sort -u 用来建立一个不包含重复项的列表。然后我们迭代每一个链接,并通过curl -I检验接受到的响应头部。如果响应头部的第一行包含HTTP/1.0 200 OK,就表示该链接正常。
lynx命令
作用:终端上的纯文本模式的网页浏览器,没有JS引擎,不支持CSS排版、图形、音视频等多媒体信息。
格式:lynx [参数]
参数:
-case:搜索字符串时区分大小写
-ftp:关闭ftp功能
--color:激活彩色模式
--reload:更新首页代理服务器的缓存
--help:显示帮助
-traversal:以递归方式访问网站页面并建立网站中所有超链接列表。