我正在编写bash脚本,它将自动读取当前目录和自定义目录中的所有文件名,然后通过kubectl将新创建的docker图像名称应用于finded yml文件,然后从两个数组图像名和完整注册表名中读取:
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命令。现在它正在采取整个数组..。
发布于 2019-01-17 04:35:52
我的理解是,您希望将docker images
的已处理输出放在两个数组中,其中每个数组元素对应于处理后的输出的一行。
这个脚本没有经过测试,因为我既不知道docker images
的输出,也不知道kubectl
的命令语法。
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。
而不是
total=${#IMG_NAME[*]}
for (( i=0; i<$(( $total )); i++ ))
您也可以使用
for i in ${!IMG_NAME[@]}
请参阅https://stackoverflow.com/questions/6723426/looping-over-arrays-printing-both-index-and-value
https://unix.stackexchange.com/questions/495032
复制相似问题