使用shell脚本修改linux静态网络IP、网关和hosts文件

bash 复制代码
#!/bin/bash

# 检查参数数量
if [ "$#" -ne 2 ]; then
    echo "Usage: $0 <new_ipaddr> <new_gateway>"
    exit 1
fi

# 获取参数
NEW_IPADDR=$1

# 提取新的子网部分(前24位)
#IFS='.' read -r -a ip_parts <<< "$NEW_IPADDR": 使用点号.作为分隔符,将NEW_IPADDR分割成数组ip_parts。
# NEW_SUBNET="${ip_parts[0]}.${ip_parts[1]}.${ip_parts[2]}": 提取前三个八位段组成NEW_SUBNET。
# NEW_GATEWAY="$NEW_SUBNET.$2": 构建NEW_GATEWAY,将NEW_SUBNET和第二个参数用点号连接。
IFS='.' read -r -a ip_parts <<< "$NEW_IPADDR"
NEW_SUBNET="${ip_parts[0]}.${ip_parts[1]}.${ip_parts[2]}"
NEW_GATEWAY="$NEW_SUBNET.$2"

echo "$NEW_SUBNET"
# 定义配置文件路径
HOSTS_FILE="/etc/hosts"
CONFIG_FILE="/etc/sysconfig/network-scripts/ifcfg-enp0s3"

# 备份原始文件
cp "$CONFIG_FILE" "${CONFIG_FILE}.bak"
echo "Backup created: ${CONFIG_FILE}.bak"

# 使用sed命令替换IPADDR和GATEWAY
# sed: 流编辑器,用于对文件进行基本的文本转换。
# -i: 直接在文件中进行修改(即就地编辑)。
# "s/^IPADDR=.*/IPADDR=\"$NEW_IPADDR\"/": 这是sed的替换命令,包含以下几个部分:
# s: 表示替换操作。
# ^IPADDR=.*: 正则表达式模式,匹配以IPADDR=开头的行,并且后面可以跟任意字符(直到行尾)。
# ^: 匹配行首。
# IPADDR=: 匹配字符串IPADDR=。
# .: 匹配任意单个字符。
# *: 匹配前面的元素零次或多次。
# IPADDR=\"$NEW_IPADDR\": 替换后的字符串,其中${NEW_IPADDR}会被实际的IP地址值替换。
# IPADDR=\"...\": 确保新值被正确地用双引号括起来。
# "$CONFIG_FILE": 指定要编辑的文件路径。
sed -i "s/^IPADDR=.*/IPADDR=\"$NEW_IPADDR\"/" "$CONFIG_FILE"
sed -i "s/^GATEWAY=.*/GATEWAY=\"$NEW_GATEWAY\"/" "$CONFIG_FILE"

REPLACE_102="$NEW_SUBNET.102 hadoop102"
REPLACE_103="$NEW_SUBNET.103 hadoop103"
REPLACE_104="$NEW_SUBNET.104 hadoop104"

# 使用sed命令替换包含hadoop102、hadoop103、hadoop104的行。
# "/hadoop102/c\\$REPLACE_102": 这是sed的替换命令,包含以下几个部分:
# /hadoop102/: 正则表达式模式,匹配包含字符串hadoop102的行。
# c\\: 表示替换整行内容。注意这里的反斜杠\是用来转义的,确保sed能够正确解析命令。
# c: 命令表示替换整行。
# \\: 转义字符,告诉sed后面的字符串是要插入的新行内容。
# $REPLACE_102: 替换后的字符串,其中${REPLACE_102}会被实际的替换值替换。
# "$HOSTS_FILE": 指定要编辑的文件路径。
sed -i "/hadoop102/c\\$REPLACE_102" "$HOSTS_FILE"
sed -i "/hadoop103/c\\$REPLACE_103" "$HOSTS_FILE"
sed -i "/hadoop104/c\\$REPLACE_104" "$HOSTS_FILE"

# 检查是否成功
if grep -q "^IPADDR=\"$NEW_IPADDR\"" "$CONFIG_FILE" && grep -q "^GATEWAY=\"$NEW_GATEWAY\"" "$CONFIG_FILE"; then
    echo "Configuration updated successfully."
    rm -rf "${CONFIG_FILE}.bak"
    echo "------------network---------"
    cat "$CONFIG_FILE"
    echo "---------hosts--------------"
    cat "$HOSTS_FILE"
else
    echo "Failed to update configuration."
    # 还原备份
    cp "${CONFIG_FILE}.bak" "$CONFIG_FILE"
    echo "Restored backup: $CONFIG_FILE"
fi

参考通义千问

相关推荐
DLYSB_1 小时前
基于 HTTP API 与 Modbus 协议的多源监控声光语音联动告警系统设计与实现
网络·网络协议·http·报警灯
qetfw1 小时前
CentOS 7 搭建 LDAP 目录服务
linux·运维·centos
Bobolink_2 小时前
手机端和电脑端的网络环境配置有什么不同?
网络·智能手机·电脑·网络环境
ALINX技术博客2 小时前
【黑金云课堂】FPGA技术教程Linux开发:系统进阶-PS DMA
linux·fpga开发
IT方大同3 小时前
linux简介
linux·运维·服务器
星恒讯工业路由器3 小时前
三大工业以太网协议选型对比
网络·物联网·ethercat·profinet·ethernet/ip·工业以太网协议
春卷同学3 小时前
HarmonyOS掌上记账APP开发实践第25篇:Image 组件高级用法 — 资源引用、网络图片与首字符占位方案
网络·华为·harmonyos
mounter6253 小时前
从内存隔离到运行时防线:透视 Linux 内核安全强化的博弈与演进
linux·网络·安全·linux kernel·kernel
微道道4 小时前
Linux盒子局域网内使用 .local 域名访问,告别IP变化烦恼
linux·运维·服务器·hermes
Bug退散师5 小时前
多路IO复用[select版TCP服务器与poll版TCP服务器]与常用网络编程函数详解
linux·服务器·c语言·网络·驱动开发·tcp/ip