一键修改ip脚本
###环境
centos 7.6
需求
1. 配置静态ip
2.配置dhcp模式
3.修改之前确认是否修改,如果不修改需要恢复原IP信息
4.判断用户输入的IP是否正确,如果不正确,让其循环输入,直到正确为止
###脚本
#!/bin/bash
# 2020-07-18-15:47:18
# ipaddr change v2
# by bubble_xu
################################
NETWORK_PATH="/etc/sysconfig/network-scripts"
#if execute user root
if [ ! $UID -eq 0 ];then
echo -e "\033[31muser must be root!\033[0m"
exit
fi
#choose one network device
DEVICE_LIST=`ifconfig|grep flags|grep -v lo|cut -d":" -f1`
PS3=`echo -e "\033[32mplease choose one network device:\033[0m"`
select device in $DEVICE_LIST
do
if [ ! -z $device ];then
echo -e "\033[33m-----you choose to config $device-------\033[0m"
break
fi
echo -e "\033[31minvalid option\033[0m"
done
#create network file
function config_network(){
mode=$1
cat>$NETWORK_PATH/ifcfg-${device}<<-EOF
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="$mode"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="$device"
UUID="$uuid"
DEVICE="$device"
ONBOOT="yes"
EOF
if [ $mode == "static" ];then
cat>>$NETWORK_PATH/ifcfg-${device}<<-EOF
IPADDR=$ipaddr
NETMASK=$netmask
GATEWAY=$gateway
DNS1=114.114.114.114
DNS2=8.8.8.8
EOF
fi
}
#backup network device file
if [ -f /$NETWORK_PATH/ifcfg-$device ];then
uuid=`grep UUID $NETWORK_PATH/ifcfg-${device} |sed 's/UUID=//g;s/"//g'`
mv $NETWORK_PATH/ifcfg-$device $NETWORK_PATH/ifcfg-${device}.bak
elif [ -f /$NETWORK_PATH/ifcfg-${device} ];then
uuid=`grep UUID $NETWORK_PATH/ifcfg-${device}.bak |sed 's/UUID=//g;s/"//g'`
fi
#choose mode,ipaddr,netmask,gateway
while true
do
read -p "please input network mode(static|dhcp):" mode
if [ $mode == "static" ];then
while true
do
read -p "please input ip addr:" ipaddr
echo $ipaddr|grep "^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$" >/dev/null 2>&1
if [ $? -eq 0 ];then
break
fi
echo -e "\033[31minvalid ipaddr\033[0m"
done
read -p "please input netmask:" netmask
read -p "please input gateway:" gateway
config_network $mode
break
elif [ $mode == "dhcp" ];then
config_network $mode
break
fi
echo -e "\033[31minvalid mode option\033[0m"
done
#confirm network config info
echo -e "\033[32m-------confirm network configuration info-------\033[0m"
cat $NETWORK_PATH/ifcfg-$device
while true
do
read -p "yes to change,no to recovery!please input(yes|no):" option
if [ $option == "no" ];then
mv $NETWORK_PATH/ifcfg-${device}.bak $NETWORK_PATH/ifcfg-${device}
echo -e "\033[33m----end ip change configuration---\033[0m"
exit
elif [ $option == "yes" ];then
echo -e "\033[33m----start ip change configuration---\033[0m"
break
fi
echo -e "\033[31minvalid option\033[0m"
done
#restart network
systemctl restart network
ping -c 2 www.baidu.com
if [ $? -eq 0 ];then
echo -e "\033[32mip addr change success!\033[0m"
rm -rf $NETWORK_PATH/ifcfg-${device}.bak
exit 0
fi
mv $NETWORK_PATH/ifcfg-${device}.bak $NETWORK_PATH/ifcfg-${device}
systemctl restart network
echo "ip addr change falied,restore configuration!"