遍历输出列

时间:2019-09-16 22:00:51

标签: bash

我正在尝试遍历kubernetes命名空间,以便可以打印出每个命名空间中每个入口的ip地址。

这是很奇怪的地方。在我的shell中运行命令可以运行,但是无法运行脚本。

基本上,NAMESPACES=( $( echo $NAMESPACES ) )仅在从脚本运行时抓取输出中的第一项,而从我的shell运行时则抓取输出的每一行。因此,当for循环运行时,它只会迭代一项。

我在Mac上。

谁能确定我应该如何遍历名称空间列?我在脚本之后列出输出。谢谢!

#!/bin/bash

# gcloud container clusters get-credentials $CLUSTER --zone $ZONE --project $PROJECT

# get just the column of namespace output
NAMESPACES=$(kubectl get namespace | awk '{print $1}' | tail -n +2)

# transpose the column into an array
NAMESPACES=( $( echo $NAMESPACES ) )

echo
echo "Printing out feature branch deployments and corresponding ip addresses:"
echo

for ns in $NAMESPACES
do
  # check if feature is in the namespace
  if [[ $ns == "feature-"* ]]
  then
    IP_ADDRESS=$(kubectl get ingress --namespace $ns | grep $ns | awk '{print $3}')
    echo $ns 'ip address:' $IP_ADDRESS
  fi
done

这是$ NAMESPACES的样子

$ echo $NAMESPACES
chartmuseum 
default 
feature-1
feature-2 
feature-3
feature-4
feature-5
kube-public 
kube-system
qa
twistlock

# here's what $NAMESPACES looks like after it's transposed into the array
# this is what is iterated over in the for loop
$ echo $NAMESPACES
chartmuseum 
default feature-1 feature-2 feature-3 feature-4 feature-5 kube-public  kube-system qa twistlock

编辑-这是答案:只需注释掉NAMESPACES=( $( echo $NAMESPACES ) ),脚本就可以工作。谢谢@bigdataolddriver

1 个答案:

答案 0 :(得分:0)

尝试使用以下语法引用数组:

for ns in "${NAMESPACES[@]}"
do

done