用 shell 脚本修改网卡配置信息批量写入IP地址

简介: 使用数组和for循环将IP地址进行批量修改
#!/bin/bash
#======用户填写信息网卡聚合后的IP信息
gatewayset=1.1.1.1
netmask=255.255.255.0                   # 子网掩码
a=(                             # 请将IP地址放置括号内,分隔符是换行或者空格
1.1.1.1
)
dnsset=8.8.8.8
dnsset1=114.114.114.114
# IP写入
sed -i 's/SELINUX=.*/SELINUX=Disabled/g' /etc/sysconfig/selinux  
                                                        # 匹配  ^ 开头字符为SELINUX和该行后面的所有字符
                                                        # 更改为 SELINUX=Disabled,后面是文件路径
                                                        # 关闭 selinux
getenforce                                      # 查看状态:显示参数为disabled则为成功关闭
########################## 查找原始网卡路径 ##############################
listeth=`ip a| grep "BROADCAST" | awk -F ":" '{print $2}' | sed "s/ //g"` ; echo "网卡名为:"$eth ;
 echo "如果网卡名称不正确,修改 eth 变量中的NR==2 是列出所有网卡选择第二张,"   
 
 # 命令 ip a 查看网卡 过滤;broadcast  [ˈbrɔːdkɑːst] >广播;字段的行
                                                                                 # awk -F ":" 以冒号为分隔符 ; 选择第一行,第二列,sed删除空格
                                        # 符号  ; 分号表示第一条命令结束,第二条开始

szeth=(
$listeth
)
echo "查看网卡数组变量: ${szeth[*]} 
总数为:${#szeth[*]}
" 

for((i=0;i<${#szeth[*]};i++))
do
echo "网卡名: ${szeth[$i]}  对应编号:$i   

速率为: `ethtool ${szeth[$i]} | grep Speed  `
------------------------------------------"
done


echo "网卡速率为100M的是外网卡,并输入数字编号进行选择配置外网卡!" 

read -p "请输入 数字编号:" rp
echo "您选择的 网卡为: ${szeth[$rp]}"


eth=${szeth[$rp]}
echo "此时将对网卡  $eth  进行批量覆盖式修改"
ethCatalog=$(find / -name "*$eth" | grep "/etc/" | sed "s/ //g" ) ;  echo "网卡路径为: "  $ethCatalog
                                                                                # catalog [ˈkætəlɔg] 目录
                                                                                # find 查找网卡名称的路径,grep 过滤/etc 目录下网卡名称。sed删除空格
ip=$(cat $ethCatalog | grep IPADDR | awk -F "=" 'NR==1{print $2}' | sed "s/ //g") ; echo "IP地址为: " $ip
                                                                                # 查看网卡文件,过滤IPADDR的行,awk -F"=" 分隔符是冒号,打印第一行第二列
echo "使用变量‘$ip’传来的网卡名,再使用find 查看命令,'*$ip'  星号是网卡名前面还有字符模糊匹配。网卡路径为:$ifcfg"
                                                        # 我要在/etc 目录里,查找网卡名开头字符为ifcfg的网卡名字和路径:
                                                        # find /etc  -name  ifcfg*    # -name指定名字,符号 * 后面所有内容
echo "==========没有需改的网卡信息为============" 
cat $ethCatalog
sed -i "/IPADDR/d" $ethCatalog
sed -i "/NETMASK/d" $ethCatalog
sed -i "/GATEWAY/d" $ethCatalog
sed -i "/DNS/d" $ethCatalog
sed -i "/PREFIX/d" $ethCatalog
echo "网卡恢复初始化完成,查看网卡配置信息 "
cat $ethCatalog
sed -i  's/BOOTPROTO.*/BOOTPROTO=static/g'  $ethCatalog
sed -i  's/^ONBOOT.*/ONBOOT=yes/g' $ethCatalog
                                                        #  -e 修改多个  .* 后面的所有内容    \ 多行换行
                                                        # 设置为static静态
                                                        # 开启 onboot=yes
                                                        # 最后跟上文件路径
IPADDR=$(grep -r IPADDR1 $jhetc| awk -F = '{print $0}');
ags=${#a[*]}
echo "数组有效元素为:$ags"
ipgs=$ags                                                                           # 限制循环打印次数:数组个数为循环次数
for ((i=0;i<=$ipgs;i++))
do
echo "IPADDR""$i"=${a[$i]} >> $ethCatalog                               # $i 是换行自加加循环,也用来指定数组角标对应的值
done
echo "GATEWAY="$gatewayset >> $ethCatalog                                       # 只有一个网关和DNS,不能为1,否则无法连接
echo "DNS="$dnsset >> $ethCatalog
echo "DNS1="$dnsset1 >> $ethCatalog
#=====netmask
qa=1                                                                                    # 定义qa变量值为1
while(( $qa<=$ipgs ))                                           # while  [wʌɪl] 同时,对变量进行约束定义
do                                                              # do 行动
        echo "NETMASK"$qa"=$netmask" >> $ethCatalog                 # 打印变量
        let "qa++"                                                                      # 定义变量的规则
done
echo "会自动删除多余信息,请等待。。。"
sed -i '/^$/d' $ethCatalog                                          # '/^$/d' 删除 d ;   开头和后面所有为空 ^$ 
sed -i 's/IPADDR0/IPADDR/g' $ethCatalog
sed -i 's/NETMASK0/NETMASK/g' $ethCatalog                                   # 将名称为0 的网卡去掉0
                                                                                                                # 文件路径
sed -i "/"IPADDR$ipgs"/d" $ethCatalog
sed -i "/"NETMASK$ipgs"/d"  $ethCatalog                                             # 删除多余信息
echo "==========修改后的网卡信息为============" 
cat $ethCatalog
echo "网卡路径:" $ethCatalog
ip a
/etc/init.d/network restart ; ip a ; ping -c10 -w10  eisc.cn
                                                                                                # 重启 ,查看ip , ping -c 10 次数C  10次,-w 单次ping等待时间秒
目录
相关文章
|
1月前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
71 2
6种方法打造出色的Shell脚本
|
1月前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
65 1
|
1月前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
63 2
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
116 1
|
2月前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
63 6
|
2月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
84 12
|
2月前
|
存储 运维 监控
自动化运维:使用Shell脚本简化日常任务
【9月更文挑战第35天】在IT运维的日常工作中,重复性的任务往往消耗大量的时间。本文将介绍如何通过编写简单的Shell脚本来自动化这些日常任务,从而提升效率。我们将一起探索Shell脚本的基础语法,并通过实际案例展示如何应用这些知识来创建有用的自动化工具。无论你是新手还是有一定经验的运维人员,这篇文章都会为你提供新的视角和技巧,让你的工作更加轻松。
83 2
|
3月前
|
Shell
shell脚本变量 $name ${name}啥区别
shell脚本变量 $name ${name}啥区别