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

Mik*_*ski 6 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
Run Code Online (Sandbox Code Playgroud)

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

instances=(${output//'\n'/ })
Run Code Online (Sandbox Code Playgroud)

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-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
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?是否有更好的方法遍历结果,也许使用json输出格式?

kri*_*004 6

我不确定您是否对这个问题有答案。请问有帮助吗?

for dns in $(aws ec2 describe-instances --region ap-northeast-1 --query 'Reservations[*].Instances[*].PublicDnsName' --output text) ; do echo $dns ; done
Run Code Online (Sandbox Code Playgroud)


小智 1

对于 Windows 命令行:

aws ec2 描述实例 --query "Reservations[].Instances[].InstanceId" > 实例

FOR /f %i IN(实例)DO aws ec2终止实例 --instance-ids %i

  • 该问题要求提供 bash 脚本 (2认同)