您的位置:首页 > 运维架构 > Linux

Linux脚本练习一

2016-01-15 19:06 399 查看
要求是在下面的文件中

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: