Shell脚本自动修改Linux网卡地址、IP地址配置、主机名修改

#!/bin/bash
#Program:
# 修改网卡、修改IP地址 
#History:
# GnahzNib First release 2015/07/14


#定义的一些常量
HOST_NAME='/etc/sysconfig/network'
HOSTNAME=`hostname`
ETH0='/etc/sysconfig/network-scripts/ifcfg-eth0'
RULES='/etc/udev/rules.d/70-persistent-net.rules'
#克隆虚拟机后,获取MAC地址
A_MAC_eth0=`cat /etc/udev/rules.d/70-persistent-net.rules | grep --color=auto 'eth0' | cut -d '"' -f 8`
A_MAC_Current=`ifconfig | grep --color=auto 'HWaddr' | cut -b 39-55`


#将MAC地址中的字母替换为小写
MAC_eth0=`tr '[A-Z]' '[a-z]' <<<"$A_MAC_eth0"`
MAC_Current=`tr '[A-Z]' '[a-z]' <<<"$A_MAC_Current"`


#打印获取到的MAC地址
echo "(1)对比MAC地址"
echo $MAC_eth0
echo $MAC_Current


#检查MAC地址是否需要修改
if [ $MAC_eth0 == $MAC_Current ]; then
echo "MAC地址不用修改!"
elif [ $MAC_eth0 != $MAC_Current ]; then
echo "请修改MAC地址为:${MAC_Current}!"      
        echo "需要修改的地方有${ETH0}以及${RULES}中eth0的MAC地址!"
        #修改ifcfg-eth0中的MAC地址
        echo "修改ifcfg-eth0中的MAC地址为${MAC_Current}..."
        sed -i "2c HWADDR=${MAC_Current}" ${ETH0}
        #修改后的ifcfg-eth0
        cat ${ETH0} | grep --color=auto "HWADDR"
        echo "ifcfg-eth0中的MAC地址修改完成!"
        #修改70-persistent-net.rules文件,将eth0的MAC地址改为eth1的
        #查看70-persistent-net.rules的信息
#cat ${RULES} | grep --color=auto "eth0"
        echo "修改70-persistent-net.rules文件"
        sed -i '8,$c SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="'${MAC_Current}'", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"' ${RULES}
        #cat ${RULES} | grep --color=auto "eth0"
fi


#修改IP地址
#首先读取ifcfg-eth0文件
echo "${ETH0}的内容如下:"
cat ${ETH0}


#加入判断,先判断该文件中有没有IP地址
read -p "是否需要修改ifcfg-eth0文件(y/n):" yn
if [ "$yn" == "Y" ] || [ "$yn" == "y" ]; then
sed -i "5c ONBOOT=yes" ${ETH0}
sed -i "7c BOOTPROTO=static" ${ETH0}
#修改IP地址
read -p "输入IP地址:" IP
sed -i "7a IPADDR=${IP}" ${ETH0}
sed -i "8a NETMASK=255.255.255.0" ${ETH0}
read -p "输入GATEWAY地址:" GATE
sed -i "9a GATEWAY=${GATE}" ${ETH0}
#重启网卡
service network restart
#cat ${ETH0} 
read -p "网络配置已完成,是否重启系统(y/n):" yn
if [ "$yn" == "Y" ] || [ "$yn" == "y" ]; then
        echo "将要重启系统..."
        reboot
elif [ "$yn" == "N" ] || [ "$yn" == "n"  ]; then
        echo "修改MAC地址后需要重启系统使之生效,请手动重启系统..."
fi


elif [ "$yn" == "N" ] || [ "$yn" == "n"  ]; then
echo "为了更好地使用网络还是修改一下吧!"
fi


#ping www.baidu.com


#修改主机名
read -p "当前主机名为${HOSTNAME},是否修改(y/n):" yn
if [ "$yn" == "Y" ] || [ "$yn" == "y" ]; then
        read -p "请输入主机名:" hdp
        sed -i "2c HOSTNAME=${hdp}" ${HOST_NAME}
read -p "主机名修改完成,重启系统使之生效,是否重启系统(y/n):" yn
if [ "$yn" == "Y" ] || [ "$yn" == "y" ]; then
        echo "将要重启系统..."
        reboot
elif [ "$yn" == "N" ] || [ "$yn" == "n"  ]; then
        echo "主机名修改后需要重启系统使之生效,请手动重启系统..."
fi
elif [ "$yn" == "N" ] || [ "$yn" == "n"  ]; then
        echo "主机名没有修改!"
fi
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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: 编写一个简单的shell脚本可以使用ifconfig命令获取Linux系统的ip地址: ```shell #!/bin/bash # 调用ifconfig命令获取ip地址信息 ip_info=$(ifconfig) # 使用grep命令匹配inet地址行 ip_address=$(echo "$ip_info" | grep -i "inet ") # 使用awk分割字符串,提取ip地址 ip=$(echo "$ip_address" | awk '{print $2}') echo "当前系统的IP地址为:$ip" ``` 这个脚本首先调用`ifconfig`命令获取ip地址信息,然后使用`grep`命令匹配含有"inet "的行,并将结果存储在`ip_address`变量中。接下来,使用`awk`命令分割字符串,提取其中的ip地址并存储在`ip`变量中。最后,使用`echo`命令打印出当前系统的ip地址。 注意:该脚本获取的是系统的第一个inet地址,如果系统有多个网卡或虚拟网络接口,可能需要对脚本进行适当修改。 ### 回答3: 要编写一个shell脚本来获取Linux系统的IP地址,可以使用ifconfig命令获取当前系统的网络接口信息,并从中提取出IP地址。 以下是一个示例的shell脚本: ```shell #!/bin/bash # 使用ifconfig命令获取网络接口信息,并通过grep和awk命令提取出IP地址 ip_address=$(ifconfig | grep 'inet ' | awk '{print $2}' | awk -F ':' '{print $2}') # 输出IP地址 echo "当前系统的IP地址是: $ip_address" ``` 脚本中的`ifconfig`命令用于获取网络接口的详细信息,`grep 'inet '`用于筛选出只包含IP地址的行,`awk '{print $2}'`用于提取出IP地址所在的列,最后的`awk -F ':' '{print $2}'`用于处理可能含有冒号的IP地址。最终的IP地址存储在变量`ip_address`中,并通过`echo`命令输出。 保存脚本文件,比如命名为`get_ip.sh`,然后通过终端运行该脚本即可获取当前Linux系统的IP地址

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值