Bash script to loop through output from AWS Command Line Client -


i'm getting list of ec2 instances , trying loop through them reason i'm not able loop work.

output="$(aws ec2 describe-instances --filters 'name=tag:environment,values=development' --query '[reservations[*].instances[*].publicdnsname]' --output text)"

echo $output displays like:

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

then create array this:

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

echo ${instances[0]} , echo ${instances[1]} gives correct output.

and try iterate through array:

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

but get:

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

instead of:

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

what doing wrong? , there better way loop through results, maybe rather using json output format?

for windows cli:

aws ec2 describe-instances --query "reservations[].instances[].instanceid" > instances

for /f %i in (instances) aws ec2 terminate-instances --instance-ids %i


Comments