实现配置静态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
发表评论