发布
社区首页 >问答首页 >Bash数组脚本,合并

Bash数组脚本,合并
EN

Unix & Linux用户
提问于 2019-01-17 11:37:23
回答 1查看 644关注 0票数 1

我正在编写bash脚本,它将自动读取当前目录和自定义目录中的所有文件名,然后通过kubectl将新创建的docker图像名称应用于finded yml文件,然后从两个数组图像名和完整注册表名中读取:

代码语言:javascript
代码运行次数:0
复制
declare -a IMG_ARRAY=`docker images | awk '/dev2/ && /latest/' | awk '{print $1}' | sed ':a;N;$!ba;s/\n/ /g'`
declare -a IMG_NAME=`docker images | awk '/dev2/ && /latest/' | awk '{print $1}' | awk -F'/' '{print $3}' | cut -f1 -d"." | sed ':a;N;$!ba;s/\n/ /g'`

IFS=' ' read -r -a array <<< "$IMG_NAME"
for element in "${array[@]}"
  do
     kubectl set image deployment/$IMG_NAME $IMG_NAME=$IMG_ARRAY --record
     kubectl rollout status deployment/$IMG_NAME
done

这两个数组都有相同数量的索引。我的循环应该从IMG_NAME获取第一个索引,并为每个数组索引放入kubectl命令。现在它正在采取整个数组..。

EN

回答 1

Unix & Linux用户

发布于 2019-01-17 12:35:52

我的理解是,您希望将docker images的已处理输出放在两个数组中,其中每个数组元素对应于处理后的输出的一行。

这个脚本没有经过测试,因为我既不知道docker images的输出,也不知道kubectl的命令语法。

代码语言:javascript
代码运行次数:0
复制
mapfile -t IMG_ARRAY < <(docker images | awk '/dev2/ && /latest/' | awk '{print $1}' | sed ':a;N;$!ba;s/\n/ /g')
mapfile -t IMG_NAME < <(docker images | awk '/dev2/ && /latest/' | awk '{print $1}' | awk -F'/' '{print $3}' | cut -f1 -d"." | sed ':a;N;$!ba;s/\n/ /g')

total=${#IMG_NAME[*]}

for (( i=0; i<$(( $total )); i++ ))
do 
     kubectl set image deployment/$IMG_NAME[$i] $IMG_NAME[$i]=$IMG_ARRAY[$i] --record
     kubectl rollout status deployment/$IMG_NAME[i]
done

有关解释,请参见https://www.cyberciti.biz/faq/bash-iterate-array/https://mywiki.wooledge.org/BashFAQ/005

而不是

代码语言:javascript
代码运行次数:0
复制
total=${#IMG_NAME[*]}

for (( i=0; i<$(( $total )); i++ ))

您也可以使用

代码语言:javascript
代码运行次数:0
复制
for i in ${!IMG_NAME[@]}

请参阅https://stackoverflow.com/questions/6723426/looping-over-arrays-printing-both-index-and-value

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/495032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档