centos shell脚本设置IP地址

centos shell脚本设置IP地址

实现配置静态ip和恢复动态ip及静态IP的合法性,说下思路。

***因为牵涉到有的主机有多虚拟网卡的情况做的这个脚本***

***多网卡多IP、单网卡多IP?留到后期再考虑吧***

1.先要过滤出网卡名称(从/sys/class/net下,可以查看到多个网卡名;或者可以通过ip a ,配合 grep、awk或者cut获取,自己选择)

2.过滤出的网卡名要和网卡配置文件”ifcfg-网卡名”,做匹配

3.对匹配的网卡名配置文件进行修改

4.ip地址合法性(我用了4个while,也可以合并为一个for循环,但是缺点是不能进行单项实时修改)

#!/bin/bash

echo "1.设置静态IP"
echo "2.恢复动态IP"
echo "按任意键退出"
read -p "输入对应数字:" NUM


###过滤网卡名称
WC=$(ls /sys/class/net |wc -l)
i=1
while [ $i -lt $WC ]
do
#获取网卡名
NET=$(ls /sys/class/net|grep -v lo |head -n$i|tail -n1)
#过滤是否有网卡名结尾的配置文件
ls /etc/sysconfig/network-scripts/ |grep ifcfg-$NET$ > /dev/null
if [ $? -eq 0 ]
then 
#echo "本机网卡为 $NET"
break
fi
done
###过滤网卡名称end

#网卡文件路径
NETPWD='/etc/sysconfig/network-scripts/ifcfg-'

case $NUM in
	"1")
echo "-----------设置静态IP-----------"


#设置IP,并严重合法性
while true 
do
read -p "输入IP地址:" IPADDR

    if [[ $IPADDR =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
        FIELD1=$(echo $IPADDR|cut -d. -f1)
        FIELD2=$(echo $IPADDR|cut -d. -f2)
        FIELD3=$(echo $IPADDR|cut -d. -f3)
        FIELD4=$(echo $IPADDR|cut -d. -f4)
        if [ $FIELD1 -le 255 -a $FIELD2 -le 255 -a $FIELD3 -le 255 -a $FIELD4 -le 255 ]; then
            #echo "$IPADDR OK."
            break
        else
            echo "不合法,请重新输入!"
        fi
    else
        echo "格式错误,请重新输入!"
    fi
done


#设置掩码,并验证合法性
while true 
do
read -p "输入掩码:" NETMASK

    if [[ $NETMASK =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
        FIELD1=$(echo $NETMASK|cut -d. -f1)
        FIELD2=$(echo $NETMASK|cut -d. -f2)
        FIELD3=$(echo $NETMASK|cut -d. -f3)
        FIELD4=$(echo $NETMASK|cut -d. -f4)
        if [ $FIELD1 -le 255 -a $FIELD2 -le 255 -a $FIELD3 -le 255 -a $FIELD4 -le 255 ]; then
            #echo "$NETMASK OK."
            break
        else
            echo "不合法,请重新输入!"
        fi
    else
        echo "格式错误,请重新输入!"
    fi
done



#设置网关,并验证合法性
while true 
do
read -p "输入网关:" GATEWAY

    if [[ $GATEWAY =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
        FIELD1=$(echo $GATEWAY|cut -d. -f1)
        FIELD2=$(echo $GATEWAY|cut -d. -f2)
        FIELD3=$(echo $GATEWAY|cut -d. -f3)
        FIELD4=$(echo $GATEWAY|cut -d. -f4)
        if [ $FIELD1 -le 255 -a $FIELD2 -le 255 -a $FIELD3 -le 255 -a $FIELD4 -le 255 ]; then
            #echo "$GATEWAY OK."
            break
        else
            echo "不合法,请重新输入!"
        fi
    else
        echo "格式错误,请重新输入!"
    fi
done



#设置dns,并验证合法性
while true 
do
read -p "输入DNS:" DNS

    if [[ $DNS =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
        FIELD1=$(echo $DNS|cut -d. -f1)
        FIELD2=$(echo $DNS|cut -d. -f2)
        FIELD3=$(echo $DNS|cut -d. -f3)
        FIELD4=$(echo $DNS|cut -d. -f4)
        if [ $FIELD1 -le 255 -a $FIELD2 -le 255 -a $FIELD3 -le 255 -a $FIELD4 -le 255 ]; then
            #echo "$DNS OK."
            break
        else
            echo "不合法,请重新输入!"
        fi
    else
        echo "格式错误,请重新输入!"
    fi
done




#备份网卡配置
cp $NETPWD$NET{,`date '+%F_%T'`}
#
cat $NETPWD$NET |grep static
#static、dhcp进行判断
	if [ $? -eq 0 ]
	then
	#echo "static状态"
	sed -i "s/IPADDR=.*/IPADDR=$IPADDR/g"  $NETPWD$NET
	sed -i "s/NETMASK=.*/NETMASK=$NETMASK/g"  $NETPWD$NET
	sed -i "s/GATEWAY=.*/GATEWAY=$GATEWAY/g"  $NETPWD$NET
	sed -i "s/DNS.*/DNS=$DNS/g"  $NETPWD$NET
	else
	#echo "dhcp状态"	
	sed -i  's/dhcp/static/g' $NETPWD$NET
	echo "IPADDR=$IPADDR" >> $NETPWD$NET
	echo "NETMASK=$NETMASK" >> $NETPWD$NET
	echo "GATEWAY=$GATEWAY" >> $NETPWD$NET
	echo "DNS=$DNS" >> $NETPWD$NET
	fi
#显示配置信息
echo "静态IP设置完成,重启网卡"
systemctl restart network
	
	;;



	"2")
echo "恢复动态IP"
#备份网卡配置
cp $NETPWD$NET{,`date '+%F_%T'`}
#修改配置
sed -i  's/static/dhcp/g' $NETPWD$NET
sed -i  '/IPADDR/d' $NETPWD$NET
sed -i  '/NETMASK/d' $NETPWD$NET
sed -i  '/GATEWAY/d' $NETPWD$NET
sed -i  '/DNS/d' $NETPWD$NET
echo "动态IP恢复完成,重启网卡"
systemctl restart network
	;;



	"*")
	exit
	
	;;
esac
https://qnimg.ffing.cn/wp-content/uploads/2021/11/image-6.png?imageView2/0/q/75|watermark/1/image/aHR0cHM6Ly9xbmltZy5mZmluZy5jbi9mbl9sb2dvLnBuZw==/dissolve/55/gravity/SouthEast/dx/0/dy/0
good good study, day day up!

发表评论

textsms
account_circle
email

centos shell脚本设置IP地址
实现配置静态ip和恢复动态ip及静态IP的合法性,说下思路。 ***因为牵涉到有的主机有多虚拟网卡的情况做的这个脚本*** ***多网卡多IP、单网卡多IP?留到后期再考虑吧*** 1.先要过…
扫描二维码继续阅读
2021-11-04