Centos7 一键改IP_最终版(脚本实战)
案例要求:
1、支持动、静态IP修改 2、支持IP检测 3、支持IP冲突检查 4、IP回滚
内容
#!/bin/bash #auto alter IP #by author toyix #2020年7月15日 10:26:39 ######################## netdir=/etc/sysconfig/network-scripts INTERFACES=`ls /sys/class/net/ |grep -v ^lo` #定义函数-选择网卡 CHOOSE_INTERFACE (){ PS3="请根据上面提示,输入数字,选择对应的网卡: " select INTERFACE in ${ INTERFACES} do break done } #定义输入IP的函数,如果不正确会要求重新输入 IPADDR_YES_NO (){ #输入IP read -p "请输入新IP地址:" IP_ADDR #检查IP是否输入正确,不对则重新输入 echo ${ IP_ADDR}|grep -Ew "^[1-2][0-9]{1,2}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$">/dev/null while [ $? -ne 0 ] do read -p "IP输入不正确,请重新输入:" IP_ADDR echo ${ IP_ADDR}|grep -Ew "^[1-2][0-9]{1,2}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$">/dev/null done } if [ $UID -eq 0 ];then echo ---------------------------------------------- else echo "请用root用户执行本脚本,谢谢" exit 1 fi #调用函数-选择网卡 CHOOSE_INTERFACE #调用函数-输入IP IPADDR_YES_NO echo -e " 33[33m 检测IP是否正确及冲突.... 33[0m" ping -c 2 ${ IP_ADDR}|grep "time=">/dev/null while [ $? -eq 0 ] do echo -e " 33[33m IP冲突,请重新输入新的IP地址 33[0m" IPADDR_YES_NO echo -e " 33[33m 检测IP是否正确及冲突.... 33[0m" ping -c 2 ${ IP_ADDR}|grep "time=">/dev/null done read -p "请输入子网掩码:" IP_NETMASK #检查子网掩码是否输入正确,不正确则重新输入 echo ${ IP_NETMASK}|grep -Ew "^[1-2][0-9]{1,2}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$" >/dev/null while [ $? -ne 0 ] do read -p "子网掩码输入不正确,请重新输入:" IP_NETMASK echo ${ IP_NETMASK}|grep -Ew "^[1-2][0-9]{1,2}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$">/dev/null done read -p "请输入网关地址:" IP_GATEWAY #检查网关是否输入正确,不正确则重新输入 echo ${ IP_GATEWAY}|grep -Ew "^[1-2][0-9]{1,2}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$" >/dev/null while [ $? -ne 0 ] do read -p "网关输入不正确,请重新输入:" IP_GATEWAY echo ${ IP_GATEWAY}|grep -Ew "^[1-2][0-9]{1,2}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$">/dev/null done #备份网卡文件 cp ${ netdir}/ifcfg-${ INTERFACE}{ ,`date +%Y%m%d`.bak} cat>${ netdir}/ifcfg-${ INTERFACE}<<EOF TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static IPADDR=${ IP_ADDR} NETMASK=${ IP_NETMASK} GATEWAY=${ IP_GATEWAY} DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy ONBOOT=yes EOF #备份DNS文件 cp /etc/resolv.conf{ ,.bak} #重启服务 echo -e " 33[32m 重启网络服务中,请使用新IP重新连接,如更改后无法上网,30秒内IP回滚!! 33[0m" systemctl restart network.service #改回DNS文件 cp /etc/resolv.conf.bak /etc/resolv.conf #测试网络 echo -e " 33[32m 测试网络是否正常 33[0m" ping -c 3 www.baidu.com if [ $? -eq 0 ];then echo -e " 33[32m IP更改成功,网络正常 33[0m" else #网络不通,则恢复之前状态 echo -e " 33[33m 无法上网,IP回滚。。。。 33[0m" mv ${ netdir}/ifcfg-${ INTERFACE}`date +%Y%m%d`.bak ${ netdir}/ifcfg-${ INTERFACE} systemctl restart network.service cp /etc/resolv.conf.bak /etc/resolv.conf ping -c 5 www.baidu.com if [ $? -ne 0 ];then echo -e " 33[33m 回滚失败,请检查 33[0m" else echo -e " 33[32m 回滚成功,网络正常!! 33[0m" fi fi
执行结果
更改成功
更改失败-回滚
------------------end