Bash脚本循环AWS Command Line Client的输出

时间:2016-04-06 13:26:07

标签: bash loops aws-cli aws-ec2

我正在获取EC2实例的列表,然后尝试遍历它们但由于某种原因我无法使循环工作。

output="$(aws ec2 describe-instances --filters 'Name=tag:Environment,Values=development' --query '[Reservations[*].Instances[*].PublicDnsName]' --output text)"

echo $output显示如下内容:

ec2-55-55-555-555.eu-west-1.compute.amazonaws.com
ec2-66-66-666-666.eu-west-1.compute.amazonaws.com

然后我创建一个这样的数组:

instances=(${output//'\n'/ })

echo ${instances[0]}echo ${instances[1]}给出正确的输出。

然后尝试遍历数组:

for i in $instances; do echo instance: "$i"; done

但我明白了:

实例:ec2-55-55-555-555.eu-west-1.compute.amazonaws.com ec2-66-66-666-666.eu-west-1.compute.amazonaws.com

而不是:

instance: ec2-55-55-555-555.eu-west-1.compute.amazonaws.com
instance: ec2-66-66-666-666.eu-west-1.compute.amazonaws.com

我做错了什么?是否有更好的方法来循环结果,也许使用json输出格式?

2 个答案:

答案 0 :(得分:4)

我不确定你是否得到了这个问题的答案。这会有帮助吗?

set var1=(the string from brownfox.csv)
set var2=%var1%
set i=0

:loopprocess
for /F "tokens=1* delims=;" %%A in ( "%var1%" ) do (
  set /A i+=1
  set var1=%%B
  goto loopprocess )

echo The string contains %i% tokens.

答案 1 :(得分:0)

对于windows cli:

aws ec2 describe-instances --query“Reservations [] .Instances [] .InstanceId”>实例

FOR / f%i IN(实例)DO ecs terminate-instances --instance-ids%i