Linux脚本练习一

要求是在下面的文件中
1、将defaults块中的包含timeout server 以及包含timeout client的行删除
2、将listen开头的块中,除了rabbitmqs那个块,其他都添加timeout server 5m、timeout client 5m两行,注意缩进的空格要用变量来代替,如果以及添加过这两行,则不需要再添加。

    global
          chroot  /var/lib/haproxy
          daemon
          group  haproxy
        log  10.3.0.104 local7
        <>

        defaults
          log  global
          option log-health-checks
          timeout  http-request 10s
          timeout  queue 1m
          timeout  server 1m
          timeout  client 1m
          timeout  check 10s

        listen cinder_api_cluster
          bind 10.3.0.201:8776
          balance  source
          option  tcplog
          timeout  server 5m
          timeout  client 5m
          server ror-cinder2 10.3.0.118:8776 check fall 5 inter 2000 rise 2

        listen glance_api_cluster
          bind 10.3.0.201:9292
          option  httpchk
          option  tcplog
          server ror-glance1 10.3.0.115:9292 check fall 5 inter 2000 rise 2


        listen rabbitmqs
          bind 10.3.0.201:5672
          mode tcp
          balance roundrobin
          timeout  server 48h
          timeout  client 48h
          timeout connect 5s
          server zone-ror-rabbitmq1 10.3.0.108:5672 check fall 3 inter 5000 rise 2
          server zone-ror-rabbitmq2 10.3.0.109:5672 check fall 3 inter 5000 rise 2

脚本文件如下所示,代码的注释之后来补上哈!

getline1=$(grep -A20 -n 'defaults' beforeb | grep 'timeout  server' | cut -d - -f 1)
#获取beforeb文件中defaults后20行内,包含timeout server行的行号

getlisten=$(grep -A20 -n 'defaults' beforeb | grep 'listen' | cut -d - -f 1)

arrayline1=($(echo "$getline1" | tr '\n' ' '|tr -s ' '))
#将可能包含多个行号的变量$getline1拆分成数组arrayline1

arraylisten=($(echo "$getlisten" | tr '\n' ' '|tr -s ' '))

if [[ ${arrayline1[0]} -lt ${arraylisten[0]} ]];then
        sed -i "${arrayline1[0]}d" beforeb
fi
#如果timeout server第一次出现的行号比listen第一次出现的行号小,就将timeout行删除

getline2=$(grep -A20 -n 'defaults' beforeb | grep 'timeout  client' | cut -d - -f 1)
arrayline2=($(echo "$getline1" | tr '\n' ' '|tr -s ' '))

if [[ ${arrayline2[0]} -lt ${arraylisten[0]} ]];then
        sed -i "${arrayline2[0]}d" beforeb
fi

sed -i '/timeout  client 5m/d' beforeb
sed -i '/timeout  server 5m/d' beforeb

getlisten_below=$(grep  -n 'listen' beforeb|head -n 1 | awk -F: '{print $1}')
#获取文件中第一次出现listen的行号
getlisten_below=$(($getlisten_below+1))
echo ${getlisten_below}

line2="`sed -n "${getlisten_below}p" beforeb`"
#line2为listen行下一行的内容
spacelength=`echo "${line2}" | awk '{str=length($0); sub(/^[ ]*/,"",$0); print str-length($0);}'`
#获取该行字符前面的空格
echo ${spacelength}

string1="timeout client 5m"
string2="timeout server 5m"

for((i=${spacelength};i>0;i--));do
        string1=" "${string1};
        string2=" "${string2};
done;
#将空格循环插入字符串前面

sed -i 's/listen rabbitmqs/rabbitmqs backup/g' beforeb
sed -i "/listen/a\\$string1" beforeb
sed -i "/listen/a\\$string2" beforeb
sed -i 's/rabbitmqs backup/listen rabbitmqs/g' beforeb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值