0

我正在尝试收集 AWS 区域中的所有实例(describe-instances),然后从使用第一个命令找到的每个实例的特定 AMI(describe-images)中 grep 某些行。我不想先将其转储到文件中。

for AMI in "aws ec2 describe-instances --region=us-west-2 |grep ImageId |grep -o -P 'ami.{0,18}'";
do "aws ec2 describe-images --image-ids $AMI |grep '"Name"\|ProductCodeId\|ProductCodeType'";done 

我的语法有什么问题?谢谢!

错误:ec2-user@ip-172-31-20-000:~> ./Get-Instance-Meta.sh ./Get-Instance-Meta.sh:第 4 行:意外令牌附近的语法错误aws' ./Get-Instance-Meta.sh: line 4:aws ec2 describe-实例 --region=us-west-2 |grep ImageId |grep -o -P 'ami.{0,18}';'

预期的第一个命令输出:

ec2-user@ip-172-31-20-000:~> grep ImageId | aws ec2 describe-instances --region=us-west-2 |grep -o -P 'ami.{0,18}'
ami-02bf6f88fab67448b
ami-0d59109fccbbc4da2
ami-01a80cb1b7a431fb9
ami-0d86f04dd6dfc89df

预期的第二个命令输出:

ec2-user@ip-172-31-20-214:~> aws ec2 describe-images --image-ids ami-01a80cb1b7a431fb9 |grep '"Name"\|ProductCodeId\|ProductCodeType'
                    "ProductCodeId": "51luq5gebk3opt7gcvkdrrm89",
                    "ProductCodeType": "marketplace"
            "Name": "OpenSUSE_Leap15.1TaskcatPython3_",

我基本上是在查看 ProductCodeID 或 ProductCodeType 为“null”的所有实例

4

2 回答 2

0

看来您使用了错误的引号。

"aws ec2 describe-instances --region=us-west-2 |grep ImageId |grep -o -P 'ami.{0,18}'"

不被执行。您将不得不使用反引号 `` 或$()代替"引用您的命令。例如

$(aws ec2 describe-instances --region=us-west-2 |grep ImageId |grep -o -P 'ami.{0,18}')

$()意味着您将命令的输出作为参数返回。"意味着引用的是一个很长的论点,这似乎不是你想要的。在您第二次使用时,"您希望像往常一样将输出打印到控制台,因此您可以"完全省略。把它放在一起你得到:

for AMI in $(aws ec2 describe-instances --region=us-west-2 |grep ImageId |grep -o -P 'ami.{0,18}');
do aws ec2 describe-images --image-ids $AMI |grep '"Name"\|ProductCodeId\|ProductCodeType';done 
于 2020-06-12T03:39:43.597 回答
0

使用--query替代您的第一个命令:

aws ec2 describe-instances \
    --region=us-east-1 \
    --query 'Reservations[*].Instances[*].ImageId' \
    --output text

然后对于for循环:

AMIs=$(aws ec2 describe-instances \
        --region=us-east-1 \
        --query 'Reservations[*].Instances[*].ImageId' \
        --output text)  

for AMI in ${AMIs};    
do 
   echo ${AMI}

   aws ec2 describe-images \
       --image-ids ${AMI} \
       --query 'Images[*].[Name, ProductCodeId, ProductCodeType]' \
       --output text

done 
于 2020-06-12T03:46:47.737 回答