使用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

参考通义千问

相关推荐
代码论斤卖13 分钟前
OpenHarmony的watchdog service频繁崩溃问题分析
linux·harmonyos
halazi10016 分钟前
WSL 安装与 Ubuntu 24.04 配置使用指南
linux·运维·ubuntu·wsl
pengyi87101523 分钟前
代理IP在爬虫中的核心应用,高匿代理避检测基础
大数据·网络·网络协议·tcp/ip·http
2302_8031322525 分钟前
ensp中关于交换机S3700不被识别的错误列举以及vlan 绑定acl后无法删除问题
运维·服务器·网络
拾贰_C25 分钟前
【Ubuntu | Nvidia | driver | installation | commend】
linux·运维·ubuntu
PGFA26 分钟前
【深度实战】详解 ORA-01591:因网络波动引发的分布式事务死锁及全流程修复
网络·分布式
.柒宇.32 分钟前
Linux 时间同步服务:Chrony 深度笔记
linux·运维·服务器
Strugglingler33 分钟前
Linux Device Drivers-第六章 高级字符驱动操作
linux·笔记
007张三丰40 分钟前
系统架构设计师-以“云服务”主题为例的范文参考
java·开发语言·网络·软考高级·云服务·软考论文·论文范文
青瓦梦滋44 分钟前
Linux线程的同步与互斥
linux·c++