标题:[实践OK]shell批量查询URL返回状态码 出处:向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除 时间:Mon, 16 Apr 2018 14:40:58 +0000 作者:jackx 地址:http://jackxiang.com/post/9719/ 内容: 背景:个人博客里的友情链接发现好多链接都404了,要么是域名注册到期没有续费,要么搬家了,根本连接不过去了,影响页面加载速度怎么能快速清理掉?PHP版本的,只获取Header头,不获取Body内容的:http://jackxiang.com/post/6818/ ,尽管PHP比较能写,但是没有Shell更快实现作下简单一行处理。 一)Linux下的一句话脚本: #cat 1.txt|while read line;do curl -I -m 10 -o /dev/null -s -w %{http_code} $line && echo $line;done 404http://man.chinaunix.net/develop/c&c++/linux_c/default.htm 404http://man.chinaunix.net/develop/c&c++/c/c.htm#_Toc520633993 000000000200http://www.cnblogs.com/meil 200http://www.gamutsoft.com/expert/list.aspx?nodeid=207 200http://you.video.sina.com.cn/v/mv/index.html 000000200http://blog.sina.com.cn/s/blog_482611850100xpb1.html 000200http://blog.sina.com.cn/dev 200http://blog.sina.com.cn/kaifulee 301http://v35.blog.sina.com.cn/u/1223842820 200http://blog.sina.com.cn/u/1188223274 二)写成多行: for i in `cat url.txt` do STATUS_CODE=`curl -o /dev/null -s -w %{http_code} $i` echo -e "$i:\t$STATUS_CODE" >>状态码.txt done 三)分割文件,子Shell处理,没实践,代码如下: 觉得数据多了就别直接用bash和curl做,换其他并发和网络编程更方便的语言。 #!/usr/bin/bash # 设置并发数 number_of_process=129 # 设置输入文件 input_file="url.txt" # 处理一个文件的函数 loop_file() { local input_file=$1 local output_file=$2 mapfile urls < $input_file for url in ${urls[@]} ; do STATUS_CODE=`curl -I -o /dev/null -s -w %{http_code} $url` echo -e "$url:\t$STATUS_CODE" >> $output_file done } # 分割文件 total_line=$(wc -l $input_file | awk '{print $1}') line_per_file=$((total_line/number_of_process)) split -l $line_per_file $input_file ${input_file}_sub # 每个文件用一个子shell处理 for f in ${input_file}_sub*; do eval "coproc $f { loop_file $f output-$f; }" done # 等待子全部子shell完成 for f in ${input_file}_sub*; do pid=$f_PID wait ${!pid} done # 合并结果,删除中间文件 for f in ${input_file}_sub* ; do cat output-$f >> 状态码.txt && rm $f output-$f done 来自:http://www.dewen.net.cn/q/15394/%E5%A6%82%E4%BD%95%E5%8A%A0%E5%BF%ABshell%E6%89%B9%E9%87%8F%E8%8E%B7%E5%8F%96url%E7%8A%B6%E6%80%81%E7%A0%81%E7%9A%84%E9%80%9F%E5%BA%A6%EF%BC%9F https://jingyan.baidu.com/article/fdbd4277d59af8b89e3f4895.html Generated by Jackxiang's Bo-blog 2.1.1 Release