直到循环不会关闭

直到循环不会关闭

我使用 AWS CLI 和 bash 来创建和复制 RDS 快照。我有一个直到循环运行,条件是一旦快照的状态为“可用”,循环应该关闭并执行附加代码来复制快照。但是,我在 AWS 控制台中看到状态可用,但脚本继续挂起,因此循环没有按应有的方式退出。我在循环中做错了什么?

代码:

#/bin/bash/

now=$(date '+%Y-%m-%d-%H')

# Creates DB snapshot
echo ---------------------------------------- >> create_snap.txt
echo Start time:  >> create_snap.txt
date >> create_snap.txt

aws rds create-db-snapshot --db-instance-identifier db --db-snapshot-identifier test-for-dr-$now

while true; do
STATUS=`aws rds describe-db-snapshots --db-snapshot-identifier test-for-$now | grep "Status" | awk '{print $2}' | sed 's/[",]//g'`

until [ "$STATUS" == "available" ]; do
  echo "" &> /dev/null

  if [ "$STATUS" == "available" ]; then
    break 2
  fi
  done
done

echo Completion time: >> create_snap.txt
date >> create_snap.txt
echo ---------------------------------------- >> create_snap.txt
echo "" >> create_snap.txt

任何帮助,将不胜感激!

答案1

继续各种评论,您应该将脚本修改为如下所示:

#/bin/bash/

now=$(date '+%Y-%m-%d-%H')

# Creates DB snapshot
echo ---------------------------------------- >> create_snap.txt
echo Start time:  >> create_snap.txt
date >> create_snap.txt

aws rds create-db-snapshot --db-instance-identifier db --db-snapshot-identifier test-for-dr-$now

while true; do
  STATUS=`aws rds describe-db-snapshots --db-snapshot-identifier test-for-$now | grep "Status" | awk '{print $2}' | sed 's/[",]//g'`

  if [ "$STATUS" == "available" ]; then
    break
  else
    echo "" &> /dev/null
  fi

  sleep 15

done

echo Completion time: >> create_snap.txt
date >> create_snap.txt
echo ---------------------------------------- >> create_snap.txt
echo "" >> create_snap.txt

正如你所看到的,有一个循环,$STATUS 变量在循环中更新,并且有一个sleep 15避免锤击 api 的方法

相关内容