CentOS7 静态IP设置脚本
#!/bin/bash
NET_DIR="/etc/sysconfig/network-scripts"
INTERFACES=$(ls /sys/class/net/ | grep -v '^lo')
choose_interface() {
PS3="请根据上面提示,输入数字,选择对应的网卡: "
select INTERFACE in ${INTERFACES}; do
break
done
}
get_ip_address() {
read -p "请输入新IP地址:" IP_ADDR
while ! [[ ${IP_ADDR} =~ ^[1-2]?[0-9]{1,2}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; do
read -p "IP输入不正确,请重新输入:" IP_ADDR
done
}
get_subnet_mask() {
read -p "请输入子网掩码:" IP_NETMASK
while ! [[ ${IP_NETMASK} =~ ^[1-2]?[0-9]{1,2}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; do
read -p "子网掩码输入不正确,请重新输入:" IP_NETMASK
done
}
get_gateway() {
read -p "请输入网关地址:" IP_GATEWAY
while ! [[ ${IP_GATEWAY} =~ ^[1-2]?[0-9]{1,2}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; do
read -p "网关输入不正确,请重新输入:" IP_GATEWAY
done
}
if [ $UID -ne 0 ]; then
echo "请用root用户执行本脚本,谢谢"
exit 1
fi
choose_interface
get_ip_address
echo -e "\033[33m 检测IP是否正确及冲突.... \033[0m"
ping -c 2 ${IP_ADDR} | grep "time=" >/dev/null
while [ $? -eq 0 ]; do
echo -e "\033[33m IP冲突,请重新输入新的IP地址 \033[0m"
get_ip_address
echo -e "\033[33m 检测IP是否正确及冲突.... \033[0m"
ping -c 2 ${IP_ADDR} | grep "time=" >/dev/null
done
get_subnet_mask
get_gateway
\cp ${NET_DIR}/ifcfg-${INTERFACE}{,`date +%Y%m%d`.bak}
cat >${NET_DIR}/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
cp /etc/resolv.conf{,.bak}
echo -e "\033[32m 重启网络服务中,请使用新IP重新连接,如更改后无法上网,30秒内IP回滚!! \033[0m"
systemctl restart network.service
\cp /etc/resolv.conf.bak /etc/resolv.conf
echo -e "\033[32m 测试网络是否正常 \033[0m"
ping -c 3 www.baidu.com
if [ $? -eq 0 ]; then
echo -e "\033[32m IP更改成功,网络正常 \033[0m"
else
echo -e "\033[33m 无法上网,IP回滚。。。。 \033[0m"
\mv ${NET_DIR}/ifcfg-${INTERFACE}`date +%Y%m%d`.bak ${NET_DIR}/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 "\033[33m 回滚失败,请检查 \033[0m"
else
echo -e "\033[32m 回滚成功,网络正常!! \033[0m"
fi
fi
Ubuntu22.04 静态IP设置脚本
#!/bin/bash
echo "此脚本将帮助您设置静态 IP 地址。请提供所需的信息。"
read -p "请输入网络接口名(例如,ens32): " INTERFACE
read -p "请输入静态 IP 地址: " STATIC_IP
read -p "请输入网关地址: " GATEWAY
read -p "请输入 DNS 服务器地址列表(逗号分隔,例如,8.8.8.8,8.8.4.4): " DNS_SERVERS
IFS=',' read -ra DNS_ARRAY <<< "$DNS_SERVERS"
cp "/etc/netplan/00-installer-config.yaml" "/etc/netplan/00-installer-config.yaml.bak.$(date +"%Y%m%d%H%M%S")"
echo "编辑 /etc/netplan/00-installer-config.yaml ..."
cat <<EOL | sudo tee /etc/netplan/00-installer-config.yaml > /dev/null
network:
version: 2
renderer: networkd
ethernets:
$INTERFACE:
addresses: [$STATIC_IP/24]
gateway4: $GATEWAY
nameservers:
addresses: [$(IFS=, ; echo "${DNS_ARRAY[*]}")]
version: 2
EOL
sudo ifconfig $INTERFACE down
sudo macchanger -r $INTERFACE
sudo ifconfig $INTERFACE up
echo "应用网络配置..."
sudo netplan apply
echo "新的网络配置:"
ip addr show $INTERFACE
ip route
echo "静态 IP 配置完成。"