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

参考通义千问

相关推荐
卷卷的小趴菜学编程6 分钟前
Linux第一讲--基本的命令操作
linux·运维·服务器
最后一个bug1 小时前
页高速缓存与缓冲区缓存的应用差异
linux·c语言·arm开发·单片机·嵌入式硬件
wingaso2 小时前
[Linux]el8安全配置faillock:登录失败达阈值自动锁定账户配置
linux·运维·安全·ssh
linux修理工2 小时前
speedtest For Ubuntu/Debian
linux·运维·服务器
xianwu5432 小时前
反向代理模块1
开发语言·网络·数据库·c++·mysql
Steps-of-time2 小时前
Linux之NetLink学习笔记
linux·笔记·学习
vortex52 小时前
Linux 命令行十六进制编辑器:高效操作二进制文件
linux·运维·编辑器
mcharleylei3 小时前
Centos 安装docker
linux·docker·centos
jerry-894 小时前
系统安全及应用
linux·运维·服务器
AiFlutter4 小时前
在AlarmLinux系统中安装KeyDB
linux·运维·服务器