gpt4 book ai didi

linux - 如何使用 while 循环来检查 linux 中的条件?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:38 25 4
gpt4 key购买 nike

我必须做这样的事情:

while ( condition)

do
wait

我必须在 Linux 中执行此操作。当快照状态挂起时,它应该等待。

ec2-describe 快照的内容是:

SNAPSHOT    snap-c7f3   vol-f6a0    completed   2013-12-04T09:24:50+0000    100%    109030037527    10  2013-12-04: Daily Backup for SaMachine (VolID:vol-f09a0 InstID:i-2604)
SNAPSHOT snap-c7df9 vol-3f6b completed 2013-12-04T09:24:54+0000 100% 109030037527 10 2013-12-04: Daily Backup for sa_test_VPC (VolID:vol-3InstID:i-e1c46)

如何做到这一点?我应该如何使用 grep 等等?

#!/bin/bash

# Setting the environmental variables

export EC2_HOME=/opt/ec2/tools
export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=
export SOURCE_REGION="us-west-2"
export DESTINATION_REGION="us-east-1"


# Set the variable today-date to current date
today_date=`date +%Y-%m-%d`
echo "$today_date"


# Set the variable date_dir to yesterday's date
date_dir=$(date +%Y-%m-%d -d '-1 days')
echo "$date_dir"


#First delete all snapshots older than one day
#Create a file with all scheduled snapshots

echo "First delete all snapshots older than one day"
echo "Create a file with all scheduled snapshots"
read -rsp $'Press enter to continue...\n'
ec2-describe-snapshots | grep -i "$date_dir">"$EC2_HOME/SnapshotsDOW_$today_date"


#Delete snapshots for older backups

echo "Delete snapshots for older backups"
read -rsp $'Press enter to continue...\n'
for snapshot in $(cat "$EC2_HOME/SnapshotsDOW_$today_date" | awk '{print $2}')
do
ec2-delete-snapshot $snapshot
done


#Now create a snapshot for every attached volume to every instance
#Create a file with all attached volumes

echo "Create a file with all attached volumes"
read -rsp $'Press enter to continue...\n'
#ec2-describe-volumes | grep -i "attached" >"$EC2_HOME/ActiveVolumes_$today_date"


#Create a file with all instances

echo "Create a file with all instances"
read -rsp $'Press enter to continue...\n'
ec2-describe-instances | grep -i "tag" | grep -i "name" >"$EC2_HOME/Instances_$today_date"


#Create snapshots of all attached volumes

echo "Create snapshots of all attached volumes"
read -rsp $'Press enter to continue...\n'
awk '{print $2, $3}' "$EC2_HOME/ActiveVolumes_$today_date" | while read vol_id inst_id; do
awk '{print $3, $5}' "$EC2_HOME/Instances_$today_date" | while read inst_id2 name; do
if test "$inst_id" = "$inst_id2"; then
echo ec2-create-snapshot "$vol_id" -d "$today_date: Daily Backup for $inst_id (VolID:$vol_id InstID:$inst_id)"
ec2-create-snapshot "$vol_id" -d "$today_date: Daily Backup for $inst_id (VolID:$vol_id InstID:$inst_id)"
fi
done
done



#Create a file with all latest snapshots

echo "Create a file with all latest snapshots"
read -rsp $'Press enter to continue...\n'
latestdate=$(ec2-describe-snapshots | grep ^SNAPSHOT | sort -rk 5 | awk '{print substr($5, 1, 10); exit}')
ec2-describe-snapshots | grep "^SNAPSHOT.*$latestdate" > "$EC2_HOME/SnapshotsLatest_$today_date"


#Copy the snapshot across multiple regions.

echo "Copy the snapshot across multiple regions."
read -rsp $'Press enter to continue...\n'
for snapshot in $(cat "$EC2_HOME/SnapshotsLatest_$today_date" | awk '{print $2}')
do
ec2-copy-snapshot -r $SOURCE_REGION -s $snapshot -region $DESTINATION_REGION
done


#Send the latest snapshot details to user using mail command.
echo "Send the latest snapshot details to user using mail command"
read -rsp $'Press enter to continue...\n'
mail -s 'VM Snapshot $today_date' jp.com < "$EC2_HOME/SnapshotsLatest_$today_date"

read -rsp $'Press enter to exit...\n'

最佳答案

编写 while 循环就这么简单:

while ec2-describe-snapshots | grep -q '^SNAPSHOT.*pending'
do
echo "There are pending SNAPSHOTs, waiting..."
sleep 10
done
echo "No pending SNAPSHOTs."

关于linux - 如何使用 while 循环来检查 linux 中的条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20515887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com