文档章节

从一个host列表或者IP列表中对给定的URL进行遍历-shell

 跬步
发布于 2013/03/04 18:14
字数 641
阅读 328
收藏 1
#! /bin/sh
# 由于数组在shell函数中传递实在蛋疼,尤其是还包括其他参数时,所以干脆变量全部用全局变量

random_v=$RANDOM
trap "rm -f /tmp/$$.$random_v.http_code.out" EXIT
function curl_url(){
        url_line="http://$url_host/$line"
        /usr/bin/curl -s -o /dev/null --connect-timeout $time_out -m $time_out -w %{http_code} $url_line > /tmp/$$.$random_v.http_code.out
        return $?
}

function deal_url(){
        error_status=7
        n=0
        max_fail=30
        ips_length=${#ips[@]}
        url_host=${ips[$n]}
        cat $urls_txt | while read line;
        do
                curl_url
                if [ $? -eq $error_status ];then
                        echo "当前IP:${url_host}无法连通,尝试下一个IP连接$line"
                        if [ $n -lt $max_fail ];then
                                n=$(( $n+1 ))
                                visit_ip=$(( $n % $ips_length )) #应该使用哪一个ips数组下标
                                url_host=${ips[$visit_ip]}
                                curl_url
                                while [ $? -eq $error_status ]
                                do
                                        echo "当前IP:${url_host}无法连通,尝试下一个IP连接$line"
                                        n=$(( $n+1 ))
                                        visit_ip=$(( $n % $ips_length ))
                                        url_host=${ips[$visit_ip]}
                                        if [ $n -ge $max_fail ];then
                                                echo "尝试次数达到最大值,放弃连接"
                                                exit
                                        fi
                                        curl_url
                                done
                        else
                                echo "尝试次数达到最大值,放弃连接"
                                exit
                        fi
                fi
                echo "通过IP:${url_host}完成对${line}的访问,返回状态为$(cat /tmp/$$.$random_v.http_code.out)"
        done
}

work_dir=''
cd $work_dir
ips=( '10.12.12.11:8090' '10.12.12.12:8080' '10.12.12.13:8080' '10.12.12.14:8080' '10.12.12.15:8080' )
urls_txt="$work_dir/url.list"
time_out=5
deal_url
一次输出可能如下所示:
当前IP:10.120.12.11:8090无法连通,尝试下一个IP连接/
当前IP:10.120.12.12:8080无法连通,尝试下一个IP连接/
当前IP:10.120.12.13:8080无法连通,尝试下一个IP连接/
通过IP:10.120.12.14:8080完成对/的访问,返回状态为200
通过IP:10.120.12.14:8080完成对/a.html的访问,返回状态为200
通过IP:10.120.12.14:8080完成对/b.html的访问,返回状态为200
通过IP:10.120.12.14:8080完成对/c.html的访问,返回状态为200
"""
此时14中断
"""
当前IP:10.120.12.14:8080无法连通,尝试下一个IP连接/
通过IP:10.120.12.15:8080完成对/d.html的访问,返回状态为200
通过IP:10.120.12.15:8080完成对/e.html的访问,返回状态为200
通过IP:10.120.12.15:8080完成对/f.html的访问,返回状态为200
通过IP:10.120.12.15:8080完成对/g.html的访问,返回状态为200
通过IP:10.120.12.15:8080完成对/h.html的访问,返回状态为200
""""
此时15中断,13恢复
"""
当前IP:10.120.12.15:8080无法连通,尝试下一个IP连接/
当前IP:10.120.12.11:8090无法连通,尝试下一个IP连接/
当前IP:10.120.12.12:8080无法连通,尝试下一个IP连接/
通过IP:10.120.12.13:8080完成对/i.html的访问,返回状态为200
通过IP:10.120.12.13:8080完成对/j.html的访问,返回状态为200

最大无法连通次数由max_fail变量控制,达到最大失败次数,脚本终止

© 著作权归作者所有

粉丝 3
博文 15
码字总数 10527
作品 0
朝阳
私信 提问
【Scrapy】 selector 学习记录三(Selector详细介绍)

Selector的详细介绍 selector 是对 response 的封装,用来对选取其中的特定内容。 下面是 Selector 的主要成员变量: response 一个HtmlResponse或者XmlResponse对象 text 一个unicode字符串...

ok绷forever
2017/01/01
0
0
Ansible 之 概念和常用模块介绍

1 概述 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。 ...

ghbSunny
2017/12/04
0
0
expect脚本同步文件、expect脚本指定host和要同步的文件、构建文件分发系统

expect脚本同步文件 更改权限 执行脚本 查看执行结果 expect eof需要加上,作用是等脚本命令执行完再进行退出 expect脚本指定host和要同步的文件 更改权限,执行脚本 构建文件分发系统 需求背...

Zhouliang6
2018/07/21
0
0
我的shell脚本编程

对于shell脚本编程特点来说它是 过程式编程语言、脚本类型语言、解释型语言。 在写脚本的时候总是会遵循三种执行结构:顺序执行结构、选择执行结构、循环执行结构。 顺序执行即:以从左到右,...

XRedm
2017/05/05
0
0
2017 11-17 ansible应用

一.ansible (1) ansible: ansible是一款新出现的自动化运维系统,基于python开发并集合了众多运维工具的优点,实现批量系统配置,具有程序部署,批量运行命令等功能。工作特点是基于模块化工...

楠人帮
2017/11/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

springmvc的return “success”源码解读

qqqq

architect刘源源
今天
4
0
Java程序员五面阿里分享 逆袭成功 太不容易了!

前言 拿到阿里实习offer,经历了5次面试,其中4轮技术面,1轮HR面试。在这里分享一下自己的面试经验和学习心得。希望能够帮助更多的小伙伴。 我本科毕业于中南大学信管专业,真正开始学习Jav...

别打我会飞
昨天
4
0
Android Camera模块解析之视频录制

《Android Camera架构》 《Android Camera进程间通信类总结》 《Android Camera模块解析之拍照》 《Android Camera模块解析之视频录制》 《Android Camera原理之CameraDeviceCallbacks回调模...

天王盖地虎626
昨天
2
0
手把手教你使用issue作为博客评论系统

自从上周在阮一峰的 每周分享第 60 期 看到了可以将 GitHub 的 issue 当作评论系统,插入第三方网页的 JS 库——utterances。我就对此“魂牵梦绕”。个人博客使用的是VuePress。 TLDR (不多废...

jump--jump
昨天
6
0
商业合作模式有几种

公司合作首先要看公司的发展、定位已经公司双方的实力,前期沟通,了解很重要,切不可盲目。一般公司之间合作有以下: 一、六种合作模式 1、资源互换:资源互换是一种双方商定在一段时间内彼此...

吴伟祥
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部