仅以此文纪念linux中国
小y最近真的颓废了,马上就三十了,一下班整个人跟个废物一样,躺在住处刷B站,太颓废了。哎,我想这今年就收手博客了,后续不再更新。但是人不能这样,人需要和懒惰做斗争,失败归失败,态度要有。
小y最近在同时维护多台一样的设备,每次升级版本都要修改配置内容,现在就维护一点设备我都累的不行了,我想万一后期设备多了那我还睡觉吗,于是我写出此博文共大家参考。
既然在后台改参数那必须要用vim或者nano工具,但是这工具不适合写在脚本里,于是我这边还是会用之前脚本用到的工具。
假设,在设备上存在1至6 这六个文件,我需要将6台设备的ip逐一修改,并将网关统一修改且需要使用echo 输出的hellow word 改为hello y。
因为设备出场就是默认配置,所以这里就以上述文件演示。
一阳指之sed修改文件
sed也是文本编辑器,但是sed是可以用命令直接编辑文件的,这里我们使用的参数有
sed -i 其中i表示文本内容替换,如果不加i的话,修改内容不生效
不加i就是不会替换内部文件的内容,等确认无误后在加i。
sed -e 是表示可以同时替换多个内容,当然我亲测后不加e也是可以的
有时使用也会要将/mnt/USB1
改成/mnt/USB2
,但是在文档中有/
,那么这个sed该怎么写呢?
当然是使用转义符了,及\
,那么我们实验如下:
总结sed的用法
sed -i -e 's(替换的行号,若不加数字表示全文替换)/文本原本内容/需要替换的内容/g;s/()/()/g' 文本名称
已将一个设备的改好了,同时维护多个设备呢?要求ip累加,y后面跟设备号。
韩轮棍法之for循环
先看下6个文件的全部内容,确实都是出场设置
然后我想要不这样写吧
使用for循,查看打印,为理想打印
这么看现在设备可以自己按需求修改ip了,那接下来我是不是应该要到对于设备的IP下去改文件?
首先要保障我的设备可以ping通。
这里有个小技巧就是
ping -w 为ping的次数 比如 ping -w 3 192.168.1.21
设备会自动停止ping。
这里使用if判断设备是否可以ping通。
凌波微步之if判断
我是这么想的如果ping通则打印y否则则打印n,我将试列写出
此时正常打印
错误打印是这样的
这里用两个ip做实验当然我们的文件名也要改
运行脚本观察结果
结果正常。
佛山无影脚之scp将改好的文件逐步放置设备指定位置
小y的设备没有expect这个程序,这就让人很难受了,但是现场的设备是真的多,我随机问客户要个设备,发现他们的服务器都有expext,我猜这一定是他们的维护人员自己偷偷装的吧。
scp的用法很简单,scp就是cp不过路径是网络路径罢了。这里举个栗子。
scp -r xiaoy root@192.168.49.128:/home
这句话就是把xiaoy放到home下。实验结果如下。
确实把xiaoy的文件移动过去了,但是每次移动要输入密码,这就很麻烦。还好有expect
。
其中需要掌握
spawn
,这个命令是启动新的进程。expect
,从进程接收字符串。send
,用于向进程发送字符串。
可以参照我这样写。
按照此图,可以顺利将文件传输至指定位置。
最后,我需要集大成,将脚本发送至指定位置。
九阳神功之大集成
将上述内容集成,然后就会大成功,接下来请欣赏结果!
哈中间又换了几个虚拟机,不过问题不大,话说arch没ifconfig真的难用。开始运行。
运行结果和我期望值是一样的,哈哈!
我又神之一笔,将之前改过的文件复原
查看下结果
结果符合预期。
补充几个知识点,如何给linux增加新的ip,在debian系中,增加ip用
ip address add 192.168.1.2/24 dev eth0
运行route
后查看结果。
顺带提一嘴END后面不要有任何空格或者制表符,要不然会报错。
实验代码下载处:
https://download.csdn.net/download/qq_43161960/89130999