shel脚本-更新hosts

更新hosts,将无效地址注释,地址恢复有效后再打开

#!/bin/bash
######################################
#功能说明:当域名失效时自动注释掉。可用之后自动打开
#
#使用说明:请把本脚本放在定时任务中执行。
#####################################
IPS=$(cat /etc/hosts|awk '{print$1}')
for IP in $IPS;
do
 if [ "$(echo $IP|awk -F '.' '{print$1}'|sed 's#[0-9]##g')" = "#" ];then
   EIP=$(echo $IP|sed '/#/ s/#//g')
   
   ping $EIP -c1 >>/dev/null
   if [ $? -eq 0 ];then
    sed -i "/$EIP/ s/#//g" /etc/hosts 
   fi
else
   ping $IP -c1 >>/dev/null
   if [ $? -gt 0 ];then
   sed -i "s/$IP/#$IP/g" /etc/hosts
   fi
fi
done

更新hosts中指定域名

#!/bin/bash
url=https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID
url_name=qyapi.weixin.qq.com

IPS=$(cat /etc/hosts|grep ${url_name}|awk '{print$1}')
for IP in $IPS;
do
 echo "当前映射,${url_name} 的公网ip地址:$IP"
		#resolve需要libcurl版本7.21.3才支持
		status_code=$(curl --resolve $url_name:443:$IP -m 5 -s -o /dev/null -w %{http_code} $url)	
        echo "$url服务器,状态码为${status_code}"
		#指定测试服务器状态的函数,并根据返回码决定是发送邮件报警还是将正常信息写入日志
 if [ "$status_code" != "200" ];then
	#删除/etc/hosts里面的qyapi.weixin.qq.com对应的第一个IP的行
	#如果要使用shell变量,就需要使用双引号
	sed -i "/$IP/d" /etc/hosts
	echo "成功删除无效IP映射,IP:$IP"		
else
	echo "$url测试正常"
fi
done

使用ping判断域名是否访问成功

#!/bin/bash
url=https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID
url_name=qyapi.weixin.qq.com

check_http(){
    status_code=$(curl -m 5 -s -o /dev/null -w %{http_code} $url)
}

url_ip=`ping ${url_name} -c 1 | sed '1{s/[^(]*(//;s/).*//;q}'`
echo "${url_name} 的公网ip地址:${url_ip}"
echo "$url_ip  $url_name" >> /etc/hosts

update_host(){
	if [ $url_ip != "" ];then
		#删除/etc/hosts里面的qyapi.weixin.qq.com的行
		sed '/$url_name/'d /etc/hosts
		#新增host
		echo "$url_ip  $url_name" >> /etc/hosts
	fi
}
while :
do
       check_http
       date=$(date +%Y%m%d-%H:%M:%S) 
       echo "当前时间为:$date"
       echo "$url服务器,状态码为${status_code}"
       
	   #指定测试服务器状态的函数,并根据返回码决定是发送邮件报警还是将正常信息写入日志
       if [ "$status_code" != "200" ];then
 			  update_host             
       else
              echo "$url测试正常"
       fi
       sleep 5
done

你可能感兴趣的:(SHELL)