【Linux】使用sed、awk来完成批量修改配置文件的shell设计

背景:现在有个三个文件,以后可能会更多,就以这三个文件为例子。三个配置文件在服务器ip变动的时候(自己的虚拟机),都需要手动去修改ip地址。


想法:那就用shell脚本来完成自动化批量修改


设计:

1.拿到服务当前IP(注意:使用的esc下的那个引号来保证命令正常执行,还可以使用$())

ip=`ifconfig eth0 | sed -n '/inet addr/p' | awk '{print $2}' | awk -F: '{print $2}'`
sed来匹配指定内容的行


2.切换工作目录


3.对目录下的三个文件进行操作,使用数组来存储(注意:字符串之间有空格间隔)

filelist=("redis6380.conf" "redis6381.conf" "redis6382.conf")


4.对数组进行for循环处理(注意:这个for括号中的语法)

for f in "${filelist[@]}";do
done

5.查询到需要修改的内容并进行替换(具体的就不解释了,可以Google一下或看官网)
$(awk -v tmps="$ip" '$1~/slaveof/{$2=tmps}1' $f 1<>$f)

awk 使用了-v来设置变量tmps



最后整合一下,shell脚本如下:
#!/bin/bash
echo '>>>Get server ipaddress :'
ip=`ifconfig eth0 | sed -n '/inet addr/p' | awk '{print $2}' | awk -F: '{print $2}'`
echo $ip

workspace='/etc/'
cd $workspace
echo '>>>current work path :' `pwd`

filelist=("re6380.conf" "re6381.conf" "re6382.conf")

for f in "${filelist[@]}";do
    echo ">>>current check file is :" $f
    # cat redis6380.conf | grep '^slaveof' | awk '{print $2}'
    # cat redis6380.conf | awk '/^slaveof/{print $2}'
    oldip=$(cat $f | sed -n '/^slaveof/p' | awk '{print $2}')
    #$(awk -v tmps="$ip" '$1~/slaveof/{$2=tmps}1' $f 1<>$f)
    newip=$(cat $f | sed -n '/^slaveof/p' | awk '{print $2}')
    echo $oldip '-->' $newip
done

echo 'successed.'





你可能感兴趣的:(Linux,AutoTesting)