do whileを使用して無限ループを作成し、失敗したときに中断する方法は?

do whileを使用して無限ループを作成し、失敗したときに中断する方法は?

AWS AMIのステータスを確認し、ステータスが発生したときにいくつかのコマンドを実行しようとしていますavailable。これはこれを達成するための小さなスクリプトです。

#!/usr/bin/env bash

REGION="us-east-1"
US_EAST_AMI="ami-0130c3a072f3832ff"

while :
do
      AMI_STATE=$(aws ec2 describe-images --region "$REGION" --image-ids $US_EAST_AMI | jq -r .Images[].State)

        [ "$AMI_STATE" == "available" ] && echo "Now the AMI is available in the $REGION region" && break
        sleep 10
done

最初の呼び出しが成功すると、上記のスクリプトは正しく機能します。しかし、私は次のシナリオで何かを期待しています

  • 値が(現在動作中)$AMI_STATEに等しい場合は、ループを中断する必要があります。"available""failed"
  • 値が等しい場合は、期待値が$AMI_STATE満たさ"pending"れるまでループを続行する必要があります。

ベストアンサー1

AMI_STATEの値が...と等しいときにループを実行したいので、これをpending書いてください。

while
    AMI_STATE=$(aws ec2 describe-images --region "$REGION" --image-ids $US_EAST_AMI | jq -r .Images[].State) &&
    [ "$AMI_STATE" = "pending" ]
do
    sleep 10
done
case $AMI_STATE in
    "") echo "Something went wrong: unable to retrieve AMI state";;
    available) echo "Now the AMI is available in the $REGION region";;
    failed) echo "The AMI has failed";;
    *) echo "AMI in weird state: $AMI_STATE";;
esac

おすすめ記事