centos 在线服务器一键IP修改_超终级版本(脚本实战)

脚本功能

1、实现将动态IP修改为静态IP;
2、实现将静态IP修改为其他静态IP;
3、检查IP是否合法
4、检测IP是否冲突
5、检测网关是否畅通
6、IP、子网掩码、网关输入不合法时,要求循环输入
7、实现修改之前确认是否修改,如果不修改需要恢复原IP信息

8、执行IP修改之后,如发现无法上网,IP回滚,恢复之前状态

脚本内容

#!/bin/bash
#auto alter ip
#auth by toyix
#202071810:19:24
#######################
DATE=`date +%Y%m%d%H%M`



#定义函数 - 选择要修改IP的网卡
INTERFACE_CHOOSE () {
        echo -e "\033[32m---------------------------------------------------------\033[0m"
        PS3="请按提示,选择要修改的网卡:"
        select INTERFACE in `ls /sys/class/net/|grep -v 'lo'`
        do
                break
        done
}

#定义函数 - 输入IP地址,如果IP地址不正确,循环输入,直到正确为止
DEFINE_IPADDR_NEW () {
        echo -e "\033[32m----------------------------------------------------------\033[0m"
        echo ""
        read -p "       请正确输入IP地址:  " NEW_IPADDR
        echo ${NEW_IPADDR}|grep -iwE '^[1-2][0-9]{0,2}\.([0-9]{1,3}\.){2}[0-9]{1,3}$' >/dev/null 2>&1
        while [ $? -ne 0 ]
        do
                read -p "   IP定义不正确,请重新输入 :    " NEW_IPADDR
                echo ${NEW_IPADDR}|grep -iwE '^[1-2][0-9]{0,2}\.([0-9]{1,3}\.){2}[0-9]{0,3}$' >/dev/null 2>&1
        done

}

#定义函数 - 检测IP输入后,是否会IP冲突,如果冲突,则重新调用函数DEFINE_IPADDR_NEW,重新输入IP
CHECK_IP_conflict () {
        echo  "         检测IP中,请稍等2秒..."
        ping -c 2 "${NEW_IPADDR}" |grep "ttl" >/dev/null 2>&1
        while [ $? -eq 0 ]
        do
                echo -e "\033[33m       IP冲突,请重新输入\033[0m"
                DEFINE_IPADDR_NEW
                echo  "         检测IP中,请稍等2秒..."
                ping -c 2 "${NEW_IPADDR}" |grep "ttl" >/dev/null 2>&1
        done
        echo -e "\033[32m       IP定义成功!! \033[0m"
}


#定义函数 - 输入子网掩码,如果子网掩码不正确,循环输入,直到正确为止
DEFINE_NETMASK_NEW () {
        echo -e "\033[32m----------------------------------------------------------\033[0m"
        echo ""
        read -p "       请输入子网掩码:" NEW_NETMASK
        echo ${NEW_NETMASK}|grep -iwE '^255\.([0-9]{1,3}\.){2}[0-9]{1,3}$' >/dev/null 2>&1
        while [ $? -ne 0 ]
        do
                read -p "   子网掩码定义不正确,请重新输入 :    " NEW_NETMASK
                echo ""
                echo ${NEW_NETMASK}|grep -iwE '^255\.([0-9]{1,3}\.){2}[0-9]{1,3}$' >/dev/null 2>&1
        done
}

#定义函数 - 输入网关,如果网关不通,循环输入,直到输入后能ping通为止
DEFINE_GATEWAY () {
        echo -e "\033[32m----------------------------------------------------------\033[0m"
        read -p "       请输入网关: " NEW_GATEWAY
        echo  "         检测网关中,请稍等2秒..."
        ping -c 2 "${NEW_GATEWAY}"|grep -iE "ttl" >/dev/null 2>&1
        while [ $? -ne 0 ]
        do
                read -p "   网关不通,请重新输入正确网关 :    " NEW_GATEWAY
                echo  "         检测网关中,请稍等2秒..."
                ping -c 2 "${NEW_GATEWAY}"|grep -iE "ttl" >/dev/null 2>&1
        done
        echo -e "\033[32m------网关定义成功!------\033[0m"
}

ping -c 2 192.168.1.1|grep -iE "ttl" >/dev/null 2>&1

INTERFACE_CHOOSE
DEFINE_IPADDR_NEW
CHECK_IP_conflict
DEFINE_NETMASK_NEW
DEFINE_GATEWAY
echo $INTERFACE
echo ${NEW_IPADDR}
echo ${NEW_NETMASK}
echo ${NEW_GATEWAY}


INTERFACE_DIR="/etc/sysconfig/network-scripts"
DHCP_OR_STATIC=`cat ${INTERFACE_DIR}/ifcfg-${INTERFACE} |sed '/^BOOTPROTO/p' -n|awk -F"=" '{print $2}'`
echo $DHCP_OR_STATIC

#备份网卡文件
\cp ${INTERFACE_DIR}/ifcfg-${INTERFACE}{,${DATE}.bak}
#备份DNS配置文件
\cp /etc/resolv.conf{,.bak}

if [[ ${DHCP_OR_STATIC} == "dhcp" ]];then
        sed -i '/^BOOTPROTO/cBOOTPROTO=static' ${INTERFACE_DIR}/ifcfg-${INTERFACE}
        sed -i "/^BOOTPROTO/aGATEWAY=${NEW_GATEWAY}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
        sed -i "/^BOOTPROTO/aNETMASK=${NEW_NETMASK}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
        sed -i "/^BOOTPROTO/aIPADDR=${NEW_IPADDR}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
        echo -e "\033[32m       已生成网卡${INTERFACE}配置文件,见下: \033[0m"
        echo -e "\033[32m#################################################################\033[0m"
        cat ${INTERFACE_DIR}/ifcfg-${INTERFACE}

elif [[ ${DHCP_OR_STATIC} == "static" ]];then
        sed -i "/^GATEWAY/cGATEWAY=${NEW_GATEWAY}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
        sed -i "/^NETMASK/cNETMASK=${NEW_NETMASK}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
        sed -i "/^IPADDR/cIPADDR=${NEW_IPADDR}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
        echo -e "\033[32m       已生成网卡${INTERFACE}配置文件,见下\033[0m"
        echo -e "\033[32m#################################################################\033[0m"
        cat ${INTERFACE_DIR}/ifcfg-${INTERFACE}
fi

echo -e "\033[32m#################################################################\033[0m"
echo ""
while true
do
        read -p "请检查网卡${INTERFACE}配置文件,确认是否执行修改IP操作,YES or NO :  " ALTER_Y_N
        case $ALTER_Y_N in
                YES|Y|yes|y)
                echo -e "\033[32m       网卡${INTERFACE}IP修改成功,网络重启中,请使用新IP链接服务器................the end !\033[0m"
                #重启网卡
                systemctl restart network.service
                #恢复dns配置文件
                \cp /etc/resolv.conf.bak /etc/resolv.conf
                ifconfig ${INTERFACE}
                ping -c 5 www.baidu.com
                if [ $? -ne 0 ];then
                        echo -e "\033[33m      -----------------------\033[0m"
                        echo -e "\033[33m       无法上网,IP回滚!!\033[0m"
                        echo -e "\033[33m      -----------------------\033[0m"
                        \mv ${INTERFACE_DIR}/ifcfg-${INTERFACE}${DATE}.bak ${INTERFACE_DIR}/ifcfg-${INTERFACE}
                        systemctl restart network.service
                        \cp /etc/resolv.conf.bak /etc/resolv.conf
                        ping -c 2 www.baidu.com
                        if [ $? -eq 0 ];then
                                echo -e "\033[32m   -----------------------!\033[0m"
                                echo -e "\033[32m       回滚成功!!\033[0m"
                                echo -e "\033[32m   -----------------------!\033[0m"
                                ifconfig ${INTERFACE}
                        else
                                echo -e "\033[33m       回滚失败,请检查!!\033[0m"
                        fi
                fi
                exit 0
                ;;
                NO|no|N|n)
                \mv ${INTERFACE_DIR}/ifcfg-${INTERFACE}${DATE}.bak ${INTERFACE_DIR}/ifcfg-${INTERFACE}
                echo -e "\033[33m       网卡${INTERFACE}IP未修改,退出操作!!\033[0m"
                exit 1
                ;;
        esac


done


执行结果

在这里插入图片描述

修改后,如无法上网,IP回滚

在这里插入图片描述

--------------------end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值