#! /bin/bash set -o posix set -o nounset shopt -s extglob # allow extended pattern matching operators # Executables # ~~~~~~~~~~~ # So can change to suit OS variant nslookup='/usr/bin/nslookup' sort='/usr/bin/sort' #-------------------------- # Name: test_servers # Purpose: tests response times of list of servers # $1 - list of servers # $2 - results heading #-------------------------- function test_servers { local oIFS out secs server out='' for server in $1 do echo -n '.' # DEVELOPMENT NOTE: -timeout=5 in command below does not seem to be effective; default 15 timeout operates secs="$(/usr/bin/time -f '%e' $nslookup '-timeout=5' 'www.google.com' $server 2>&1 1>/dev/null)" out="$out $secs $server" done out="$(echo "$out" | $sort --general-numeric-sort)" echo echo "$2" oIFS="$IFS" IFS=' ' for buf in $out do IFS="$oIFS" IP_address="${buf#* }" response_time="${buf% *}" if [[ ${response_time%.*} -lt 5 ]]; then response_time="$response_time seconds" else response_time='Timed out' fi printf '%16s %s\n' "$IP_address" "$response_time" done return 0 } # end of function test_servers BSNL_servers=' 61.1.96.69 61.1.96.71 61.1.96.72 218.248.240.23 218.248.240.135 218.248.240.180 218.248.240.181 218.248.240.208 218.248.255.139 218.248.255.145 218.248.255.146 ' #echo 'DEBUG: setting small BSNL DNS server list' #BSNL_servers=' #218.248.240.23 #218.248.240.208 #' OpenDNS_servers=' 208.67.222.222 208.67.220.220 ' Level3_servers=' 4.2.2.1 4.2.2.2 4.2.2.3 4.2.2.4 ' test_servers "$BSNL_servers" 'Known BSNL DNS servers with query response times' test_servers "$OpenDNS_servers" 'Known OpenDNS servers with query response times' test_servers "$Level3_servers" 'Known Level3 servers with query response times' echo ' Here'"'"'s the current /etc/resolv.conf:' cat '/etc/resolv.conf' \exit 0