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

参考通义千问

相关推荐
涛啊涛7 分钟前
Centos7非LVM根分区容量不足后扩容,对调硬盘挂载/
linux·磁盘管理
CYRUS_STUDIO19 小时前
用 Frida 控制 Android 线程:kill 命令、挂起与恢复全解析
android·linux·逆向
熊猫李21 小时前
rootfs-根文件系统详解
linux
dessler1 天前
Hadoop HDFS-高可用集群部署
linux·运维·hdfs
泽泽爱旅行1 天前
awk 语法解析-前端学习
linux·前端
轻松Ai享生活2 天前
5 节课深入学习Linux Cgroups
linux
白帽黑客沐瑶2 天前
【网络安全就业】信息安全专业的就业前景(非常详细)零基础入门到精通,收藏这篇就够了
网络·安全·web安全·计算机·程序员·编程·网络安全就业
christine-rr2 天前
linux常用命令(4)——压缩命令
linux·服务器·redis
三坛海会大神5552 天前
LVS与Keepalived详解(二)LVS负载均衡实现实操
linux·负载均衡·lvs
東雪蓮☆2 天前
深入理解 LVS-DR 模式与 Keepalived 高可用集群
linux·运维·服务器·lvs