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。
最终效果如下。
file

相关新闻

                                                                                                                                    RHCE9学习指南连载,点击阅读