通过shell脚本一键修改Linux主机名和IP地址脚本

目录

1.前言 

2.shell脚本的具体实现以及解析 

1.1脚本功能概述

1.2脚本结构分析

3.致谢


1.前言 

在复杂的 Linux 系统管理中,高效准确地进行配置调整是至关重要的任务。当面临需要同时修改主机名和 IP 地址的情况时,手动操作不仅繁琐易错,还会耗费大量的时间和精力。

想象一下,在一个庞大的服务器集群环境中,或者在紧急的系统部署场景下,逐个手动修改主机名和 IP 地址的过程是多么令人头疼。而现在,有了一键修改 Linux 主机名和 IP 地址的脚本,这一切都将变得轻松无比。

这个脚本的出现,犹如一把神奇的钥匙,为 Linux 系统管理员打开了便捷之门。它以简洁高效的方式,将原本复杂的操作简化为一个命令的执行,极大地提高了工作效率。无论是经验丰富的专业人士,还是刚刚接触 Linux 系统管理的新手,都能从这个脚本中受益。

在接下来的文章中,我们将深入探讨这个强大脚本的具体功能、使用方法以及它为 Linux 系统管理带来的巨大变革。让我们一同走进这个充满创新与便利的 Linux 脚本世界,探索如何轻松实现主机名和 IP 地址的一键修改。

 

2.shell脚本的具体实现以及解析 
 

#!/bin/bash 
#author:xm
#desc: change ip and hostname 

# 检查参数数量是否正确
if [ $# -ne 2 ]; then
    echo "脚本使用姿势不对。"
    echo "正确姿势: $0 主机名 ip地址。"
    exit 1
fi

# 获取当前 IP 的最后一段
current_ip=`hostname -I | awk '{print $1}' | sed 's#.*\.##g'`
# 获取新 IP 的最后一段
new_ip=`echo $2 | sed 's#^.*\.##g'`
# 获取主机名参数
hostname=$1

# 修改 ens33 配置文件中的 IP
sed -i "s#10.0.0.$current_ip#10.0.0.$new_ip#g" /etc/sysconfig/network-scripts/ifcfg-ens33
# 修改 ens36 配置文件中的 IP
sed -i "s#172.16.1.$current_ip#172.16.1.$new_ip#g" /etc/sysconfig/network-scripts/ifcfg-ens36

# 重启网络服务
systemctl restart network

# 设置主机名
hostnamectl set-hostname $hostname

1.1脚本功能概述

这个脚本的主要功能是根据用户提供的主机名和 IP 地址,修改特定网络接口配置文件中的 IP 地址,并设置新的主机名,最后重启网络服务使更改生效。

1.2脚本结构分析

  1. 注释部分

    • #author:xm:标明脚本的作者。
    • #desc: change ip and hostname:描述了脚本的功能是修改 IP 地址和主机名。
  2. 参数检查

    • if [ $# -ne 2 ]; then:检查脚本传入的参数数量是否为 2 个。如果参数数量不正确,会输出错误提示信息并退出脚本。
    • echo "脚本使用姿势不对。"echo "正确姿势: $0 主机名 ip地址。":向用户展示正确的脚本使用方法。
  3. 获取当前 IP 和新 IP 的最后一段

    • current_ip=hostname -I | awk '{print $1}' | sed 's#.*.##g'`:
      • hostname -I:获取当前主机的 IP 地址。
      • awk '{print $1}':提取出 IP 地址中的第一个 IP(如果有多个 IP 的话)。
      • sed 's#.*\.##g':使用正则表达式将 IP 地址中除最后一段以外的部分删除,只保留最后一段数字。
    • new_ip=echo $2 | sed's#^.*.##g'`:对用户输入的新 IP 地址进行同样的处理,获取新 IP 的最后一段数字。
  4. 获取主机名参数

    • hostname=$1:将脚本的第一个参数赋值给变量hostname,作为新的主机名。
  5. 修改配置文件中的 IP 地址

    • sed -i "s#10.0.0.$current_ip#10.0.0.$new_ip#g" /etc/sysconfig/network-scripts/ifcfg-ens33:使用sed命令在/etc/sysconfig/network-scripts/ifcfg-ens33文件中,将旧的 IP 地址(10.0.0. 加上当前 IP 的最后一段)替换为新的 IP 地址(10.0.0. 加上新 IP 的最后一段)。
    • sed -i "s#172.16.1.$current_ip#172.16.1.$new_ip#g" /etc/sysconfig/network-scripts/ifcfg-ens36:对/etc/sysconfig/network-scripts/ifcfg-ens36文件进行同样的操作。
  6. 重启网络服务和设置主机名

    • systemctl restart network:重启网络服务,使 IP 地址的更改生效。
    • hostnamectl set-hostname $hostname:使用hostnamectl命令设置新的主机名。


 


3.致谢
 

非常感谢您阅读我的博客!如果您有任何问题、建议或想了解特定主题,请随时告诉我。您的反馈对我非常重要,我将继续努力提供高质量的内容。

### 回答1: 下面是一个示例脚本,它使用 `ifconfig` 命令获取系统的 IP 地址: ```bash #!/bin/bash # Store the output of the ifconfig command in a variable ifconfig_output=$(ifconfig) # Extract the IP address using grep and cut ip_address=$(echo "$ifconfig_output" | grep 'inet' | cut -d ' ' -f 10) # Print the IP address echo "IP address: $ip_address" ``` 使用方法: 1. 将上述脚本复制并粘贴到文本编辑器中,然后保存为 `get_ip.sh` 或其他任意文件名。 2. 使用 `chmod` 命令添加可执行权限:`chmod +x get_ip.sh` 3. 运行脚本:`./get_ip.sh` 这个脚本使用 `ifconfig` 命令获取网络接口的信息,然后使用 `grep` 命令提取带有 "inet" 的行,最后使用 `cut` 命令提取第 10 个字段,也就是 IP 地址。 注意:这个脚本仅适用于使用 `ifconfig` 命令的 Linux 系统,如果您使用的是其他命令,则需要更改脚本以使用相应的命令。例如,如果您使用的是 `ip` 命令,则可以使用如下脚本: ```bash #!/bin/bash # Store the output of the ip command in a variable ip_output=$(ip a) # Extract the IP address using grep and cut ip_address=$(echo "$ip_output" | grep 'inet' | grep -v 'inet6' | cut -d ' ' -f 6 | cut -d '/' -f 1) # Print the IP address echo "IP address: $ip_address" ``` 请注意,这个脚本使用 `ip a` 命令获取网络接口的信 ### 回答2: 获取Linux系统IP地址shell脚本可以使用以下命令: #!/bin/bash ip_addr=$(hostname -I | awk '{print $1}') echo "本机IP地址是:" $ip_addr 这个脚本使用了`hostname -I`命令来获取主机的IP地址列表,并使用`awk`命令提取出第一个IP地址。然后使用`echo`命令打印出IP地址。 注意:这个脚本假设Linux系统只有一个网络接口,并且该网络接口有一个有效的IP地址。如果你的系统有多个网络接口或者网络接口没有有效的IP地址,那么需要相应地修改脚本。 ### 回答3: 编写一个shell脚本来获取Linux系统的IP地址可以使用ifconfig命令。以下是一个简单的脚本示例: ```bash #!/bin/bash # 使用ifconfig命令获取系统的IP地址 ip_address=$(ifconfig | grep 'inet ' | awk '{print $2}') # 打印IP地址 echo "系统的IP地址是: $ip_address" ``` 首先,我们使用ifconfig命令来获取网络接口的信息。然后,使用grep命令过滤出包含"inet "的行,这些行包含了IP地址的信息。接着,我们使用awk命令提取出IP地址并将其存储在变量`ip_address`中。最后,使用echo命令打印IP地址。 你可以将以上脚本保存为一个名为`get_ip.sh`的文件,然后在shell中运行该脚本即可获取Linux系统的IP地址
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值