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

参考通义千问

相关推荐
一刀到底2114 分钟前
从实列中学习linux shell6: 写一个 shell 脚本 过滤 恶意ip 攻击
linux·运维·shell
pengdott30 分钟前
HAproxy+keepalived+tomcat部署高可用负载均衡实践
linux·运维·服务器·tomcat·负载均衡
自由鬼41 分钟前
深海科技服务博客简介
运维·网络·人工智能·程序人生·安全威胁分析·个人开发·数据安全
北观止1 小时前
批量删除OpenStack实例
linux·前端·chrome·openstack
一苇所如1 小时前
jupyter已经安装但是无法通过命令行启动
linux·windows·jupyter
m0_564264182 小时前
【尝试解决】无法连接到xxx:L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到一个处理错误。
网络·经验分享·内网穿透·vpn·局域网·ipsec·l2tp
努力也学不会java2 小时前
【网络原理】 《TCP/IP 协议深度剖析:从网络基础到协议核心》
网络·网络协议·tcp/ip·安全·php
Vicssic2 小时前
【Linux 网络】网络工具ifconfig和iproute/iproute2工具详解
linux·运维·网络
Galeoto2 小时前
how to install linux perf through deb file
linux·运维·服务器
Hello.Reader2 小时前
NGINX `ngx_http_core_module` 深度解读与实战指南
网络·nginx·http