從一個host列表或者IP列表中對給定的URL進行遍歷-shell

#! /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變量控制,達到最大失敗次數,腳本終止
相關文章
相關標籤/搜索