shell小技巧:批量修改pod主页内容
本文讲的是bash的小技巧,并有详细的分析过程。现在有一个deploy,有3个副本:
root@vms21:~# kubectl get pods
NAME READY STATUS RESTARTS AGE
web1-6d544c5db6-26flm 1/1 Running 0 68s
web1-6d544c5db6-w7dz7 1/1 Running 0 74s
web1-6d544c5db6-z82t2 1/1 Running 0 58s
root@vms21:~#
现在想批量修改这三个pod主页内容,第一个pod主页为111,第二个为222,第三个为333,该如何修改。
root@vms21:~# kubectl get pods | awk '/web1/{print $1}'
web1-6d544c5db6-26flm
web1-6d544c5db6-w7dz7
web1-6d544c5db6-z82t2
root@vms21:~#
去除每行的换行符
root@vms21:~# kubectl get pods | awk '/web1/{print $1}' | tr "\n" " "
web1-6d544c5db6-26flm web1-6d544c5db6-w7dz7 web1-6d544c5db6-z82t2 root@vms21:~#
root@vms21:~#
然后把他们放在一个数组里
root@vms21:~# aa=($(kubectl get pods | awk '/web1/{print $1}')) | tr "\n" " "
root@vms21:~#
#查看数组aa里所有的元素
root@vms21:~# echo ${aa[@]}
web1-d7f49f68c-t4mz6 web1-d7f49f68c-tfnm7 web1-d7f49f68c-wpwk9
root@vms21:~#
数组的下标从0开始,分别打印出每个元素
root@vms21:~# echo ${aa[0]}
web1-d7f49f68c-t4mz6
root@vms21:~# echo ${aa[1]}
web1-d7f49f68c-tfnm7
root@vms21:~# echo ${aa[2]}
web1-d7f49f68c-wpwk
root@vms21:~#
获取所有元素下标,下标从0开始计算
root@vms21:~# echo ${!aa[*]}
0 1 2
root@vms21:~#
用for循环数组里的元素的下标,最终语句如下
root@vms21:~# aa=($(kubectl get pods | awk '/web1/{print $1}' | tr "\n" " " )) ; for i in ${!aa[*]} ; do let n=$i+1; kubectl exec -it ${aa[$i]} -- sh -c "echo $n$n$n > /usr/share/nginx/html/index.html" ; done
root@vms21:~#
这里有for循环数组的每个下标(${!aa[*]}),并在for里定义了一个变量n,在下标的基础上加1。
第一个下标为0,表示第一个pod,用${aa[0]},i等于0时,n的值为1,主页内容为$n$n$n。
第二个下标为1,表示第二个pod,用${aa[1]},i等于1时,n的值为2,主页内容为$n$n$n。
第三个下标为2,表示第三个pod,用${aa[2]},i等于2时,n的值为3,主页内容为$n$n$n。
最终效果如下。