配置变更:
现有某监控策略的配置文件如下
#最大监控项数量
MAX_MONITOR_NUM : 5
#当前监控项数量
CUR_MONITOR_NUM : 3
#监控配置
#配置说明:第一域为IP信息,第二域为服务器名,第三域为监控类型(对于单网卡机器采用0类监控,对于双网卡机器采用1类监控)
IP_ADDRESS0:(1.1.1.0) DOMAIN:(bd-test-machine0.bd) MONITOR_TYPE:(0)
IP_ADDRESS1:(1.1.1.1) DOMAIN:(bd-test-machine1.bd) MONITOR_TYPE:(0)
IP_ADDRESS2:(1.1.1.2,1.2.1.2) DOMAIN:(bd-test-machine2.bd,bd-test-machine2-in.bd) MONITOR_TYPE:(1)
#监控端口
MONITOR_PORT : 1234
现给出一份需要新增到该监控策略下的服务器列表,请根据给出服务器的情况编写脚本更新现有配置,要求
1、当前监控数为添加之后的监控总数,如变更后当前监控数大于最大监控数则需要对最大监控数进行对应调整
2、IP信息中的编号在现有基础上顺序递增
3、判断新增服务器的网卡属性,按注释中的监控类型说明对具体的MONITOR_TYPE赋值(假设脚本运行环境对新增机器已有信任关系,可直接ssh登陆)
 

vi chang_conf.sh

#!/bin/bash
##
## 第二个练习题 最后修改于 4.16 10:30
####文件及目录信息
D=`pwd`
iplist="host.txt"
conf_flie="2.conf"
###找出当前的序号
num=`grep IP_ADDRESS ${conf_flie}|tail -n 1 |awk -F ':' '{print $1}'|cut -c 11-`
###最后一条记录的行号
line=`awk "/IP_ADDRESS$num/{print NR}" ${conf_flie}`
###
cd ${D}
### 最大 当前 以及即将插入的监控数量
MAX_NUM=`awk '/MAX_MONITOR_NUM/{print $NF}' ${conf_flie}`
CUR_NUM=`awk '/CUR_MONITOR_NUM/{print $NF}' ${conf_flie}`
INS_NUM=`wc -l < ${iplist}`
let NEW_NUM=${CUR_NUM}+${INS_NUM}

#####插入当前监控项数量##
if [ "$NEW_NUM" -lt "$MAX_NUM" ]; then
        sed -i "s/CUR_MONITOR_NUM : ${CUR_NUM}/CUR_MONITOR_NUM : ${NEW_NUM}/g" ${conf_flie}
else
        sed -i "s/CUR_MONITOR_NUM : ${CUR_NUM}/CUR_MONITOR_NUM : ${NEW_NUM}/g" ${conf_flie}
        let NEW_MAX_NUM=${MAX_NUM}+2
        sed -i "s/MAX_MONITOR_NUM : ${MAX_NUM}/MAX_MONITOR_NUM : ${NEW_MAX_NUM}/g" ${conf_flie}
fi
###插入配置说明###
for i in $(cat ${iplist})
do
        let line=$line+1
        let num=$num+1
        echo "$i" > tem_file
        IP=`awk -F ',' '{print $1}' tem_file`
        HOSTNAME=`awk -F ',' '{print $2}' tem_file`
        ### 判定网卡的数量
        ETH=`ssh ${HOSTNAME} /sbin/ifconfig |grep HWaddr|wc -l`

        if [ $ETH == "1" ];then
                sed -i "${line}i IP_ADDRESS${num}:($IP) DOMAIN:($HOSTNAME) MONITOR_TYPE:(0)" ${conf_flie}
        else
                sed -i "${line}i IP_ADDRESS${num}:($IP) DOMAIN:($HOSTNAME) MONITOR_TYPE:(1)" ${conf_flie}
        fi
done
####删除临时文件
cd ${D} && rm -rf tem_file