问题描述:
目前公司项目现场使用的Centos7服务器越来越多,有的时候更改ip地址很麻烦,nmcli和nmtui命令对linux的新手来说很麻烦,所以写一个简单的shell脚本,让新人可以独立的更改网卡信息

解决方案:
首先我写的这个脚本的逻辑是通过echo向Centos7的网卡配置文件进行替换,将原来网卡的参数进行覆写,然后重启网卡让配置文件生效,这样就完成了更改网卡IP、子网掩码、网关、DNS等参数的配置

步骤:

(1)创建一个sh结尾的文件

centos7一键脚本还原初始化 centos7脚本编写_重启


(2)使用vim命令对ip.sh进行编辑

centos7一键脚本还原初始化 centos7脚本编写_linux_02


(3)指定解释器

centos7一键脚本还原初始化 centos7脚本编写_linux_03


(4)首先我们先确定我们修改的哪些参数是可以不用改变的,哪些参数是我们需要修改的,哪些参数是必须和每个不同现场的服务器的参数一致的

TYPE=Ethernet

#网卡类型:以太网

PROXY_METHOD=none

#代理的方式:关闭

BROWSER_ONLY=no

#只是浏览器:否

BOOTPROTO=dhcp

#网卡的引导:dhcp

DEFROUTE=yes

#默认的路由:是

IPV4_FAILURE_FATAL=no

#开启IPV4致命错误检测:否

IPV6INIT=yes

#IPV6自动初始化: 是

IPV6_AUTOCONF=yes

#IPV6自动配置:是

IPV6_DEFROUTE=yes

#IPV6可以为默认路由:是

IPV6_FAILURE_FATAL=no

#开启IPV6致命错误检测:否

IPV6_ADDR_GEN_MODE=stable-privacy

#IPV6地址生成模型:stable-privacy

NAME=enp3s0

#网卡的物理设备名称

UUID=1daf82da-91fd-4c1a-9422-e36988082611

#通用的识别码,每一个网卡都会有不能重复,如果重复两台linux只能有其中一个服务器可以使用该网卡

DEVICE=enp3s0

#网卡的设备名称, 必须和 NAME 值一样

ONBOOT=no

#是否开机自启,网卡开机启动或通过systemctl restart network来进行控制网卡需要设置为 yes

IPADDR=192.168.99.251

#网卡的IP地址

NETMASK=255.255.255.0

#网卡的子网掩码

GATEWAY=192.168.99.1

#网卡的网关地址

DNS1=8.8.8.8

#网卡的DNS地址

(5)根据上面参数解释我们可以列出来下面几个参数为手动进行修改
IPADDR=192.168.99.251
NETMASK=255.255.255.0
GATEWAY=192.168.99.1
DNS1=8.8.8.8

(6)由于每个网卡的UUID是独立不能重复的所以我们需要根据每一个现场不同的UUID进行填写
UUID=1daf82da-91fd-4c1a-9422-e36988082611

(7)我们将UUID作为一个固定的变量来写入到我们的shell脚本中我们可以使用nmcli con来查看每一张网卡的UUID的值

centos7一键脚本还原初始化 centos7脚本编写_bash_04


(8)获取到UUID的值我们需要过滤一下,只需要UUID的值

centos7一键脚本还原初始化 centos7脚本编写_重启_05


(9)命令成功之后我们写入到脚本内

centos7一键脚本还原初始化 centos7脚本编写_IPV6_06


(10)判断nmcli命令是否正常,如果正常向下一步运行,防止命令出错导致脚本没有监测继续运行

centos7一键脚本还原初始化 centos7脚本编写_bash_07

(11)将用户需要改的IP地址等参数作为变量来进行传输,放到if判断里面

centos7一键脚本还原初始化 centos7脚本编写_bash_08


(12)变量设置完成了,我们使用echo向CentOS7的网卡配置文件进行覆写,将变量作为参数传到echo内如下图,在进行echo前为了以防万一我们先将CentOS7的源网卡配置文件进行复制备份,防止覆写的时候出错导致服务器出现网卡的问题,比较麻烦

centos7一键脚本还原初始化 centos7脚本编写_bash_09


(13)设置完成后我们需要的是重启网卡,因为更改了网卡,会导致当前的ssh退出,所以我们在重启网卡前先询问用户是否在当前环境进行重启网卡,所以我下面写了一个简单的判断,如果回答的是yes那么就重启网卡,如果回答的是no那么就不重启网卡,让用户手动重启。

centos7一键脚本还原初始化 centos7脚本编写_重启_10

(14) 脚本写完之后保存退出,然后我们运行就可以进行修改网卡的ip地址了

centos7一键脚本还原初始化 centos7脚本编写_linux_11

shell脚本代码(建议自己书写比较好):

#!/bin/bash
nmcli con | sed -n '2,2p' | awk '{print $2}'
if [ $? -eq 0 ];then
	uuid=$(nmcli con | sed -n '2p' | awk '{print $2}')
	read -p 'NAME:' net
	read -p 'IP:' ip
	read -p 'NETMASK:' mask
	read -p 'GATEWAY:' gateway
	read -p 'DNS1:' dns
	read -p 'BOOTPROTO(dhcp/none):' proto
	read -p 'ONBOOT(no/yes):' onboot
	cp /etc/sysconfig/network-scripts/ifcfg-$net /etc/sysconfig/network-scripts/bak_ifcfg-$net
	echo "TYPE=Ethernet
BOOTPROTO=$proto
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=$net
UUID=$uuid
DEVICE=$net
ONBOOT=$onboot
IPADDR=$ip
NETMASK=$mask
GATEWAY=$gateway
DNS1=$dns" > /etc/sysconfig/network-scripts/ifcfg-$net
	read -p 'Restart the network? (yes/no)' a
	if [ $a == 'yes' ];then
		systemctl restart network
		exit
	elif [ $a == 'no' ];then
		echo 'exit>>>>>restart network take effect<<<<<'
	else
		echo 'ERROR'
		exit
	fi
else
	echo 'Please install nmcli(yum -y install NetworkManager)'
	exit
fi