Linux 通过脚本互动式设置静态IP

CentOS7 静态IP设置脚本

#!/bin/bash
# Auto alter IP script

# Directory for network scripts
NET_DIR="/etc/sysconfig/network-scripts"

# Get non-loopback interfaces
INTERFACES=$(ls /sys/class/net/ | grep -v '^lo')

# Function to choose network interface
choose_interface() {
  PS3="请根据上面提示,输入数字,选择对应的网卡: "
  select INTERFACE in ${INTERFACES}; do
    break
  done
}

# Function to input IP address with validation
get_ip_address() {
  read -p "请输入新IP地址:" IP_ADDR

  # Validate IP format
  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
}

# Function to input subnet mask with validation
get_subnet_mask() {
  read -p "请输入子网掩码:" IP_NETMASK

  # Validate subnet mask format
  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
}

# Function to input gateway address with validation
get_gateway() {
  read -p "请输入网关地址:" IP_GATEWAY

  # Validate gateway format
  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
}

# Check if script is run as root
if [ $UID -ne 0 ]; then
  echo "请用root用户执行本脚本,谢谢"
  exit 1
fi

# Call function to choose network interface
choose_interface

# Call function to input IP address
get_ip_address

# Check if IP conflicts
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

# Call functions to input subnet mask and gateway
get_subnet_mask
get_gateway

# Backup network interface configuration file
\cp ${NET_DIR}/ifcfg-${INTERFACE}{,`date +%Y%m%d`.bak}

# Modify network interface configuration file
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

# Backup DNS configuration file
cp /etc/resolv.conf{,.bak}

# Restart network service
echo -e "\033[32m 重启网络服务中,请使用新IP重新连接,如更改后无法上网,30秒内IP回滚!! \033[0m"
systemctl restart network.service

# Revert DNS configuration file
\cp /etc/resolv.conf.bak /etc/resolv.conf

# Test network connection
echo -e "\033[32m 测试网络是否正常 \033[0m"
ping -c 3 www.baidu.com

if [ $? -eq 0 ]; then
  echo -e "\033[32m IP更改成功,网络正常 \033[0m"
else
  # If network is not reachable, revert to the previous state
  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
# 交互式脚本,用于设置静态 IP
echo "此脚本将帮助您设置静态 IP 地址。请提供所需的信息。"
# 交互式输入网络接口名
read -p "请输入网络接口名(例如,ens32): " INTERFACE
# 交互式输入静态 IP 地址
read -p "请输入静态 IP 地址: " STATIC_IP
# 交互式输入网关地址
read -p "请输入网关地址: " GATEWAY
# 交互式输入 DNS 服务器地址列表(逗号分隔)
read -p "请输入 DNS 服务器地址列表(逗号分隔,例如,8.8.8.8,8.8.4.4): " DNS_SERVERS
# 将逗号分隔的DNS地址转换为数组
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

# 生成新的MAC地址,防止机器冲突
# 停止网络接口
sudo ifconfig $INTERFACE down
# 生成随机 MAC 地址并设置给网络接口
sudo macchanger -r $INTERFACE
# 启用网络接口
sudo ifconfig $INTERFACE up

# 应用配置
echo "应用网络配置..."
sudo netplan apply

# 显示新的网络配置
echo "新的网络配置:"
ip addr show $INTERFACE
ip route

echo "静态 IP 配置完成。"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值