【发布时间】:2013-12-10 15:58:31
【问题描述】:
for snapshot in $(cat "$EC2_HOME/SnapshotsDOW_$today_date" | awk '{print $2}')
do
ec2-delete-snapshot $snapshot
done
这段代码获取一列,现在我必须获取两列,我怎样才能做到这一点并将值存储在一个变量中:
:: Create snapshots of all attached volumes
for /F "tokens=2,3" %%d IN (' type "%EC2_HOME%\Working\ActiveVolumes_%date-today%.txt" ') do for /F "tokens=3,5*" %%a IN (' type "%EC2_HOME%\Working\InstanceNames_%date-today%.txt" ') do if %%a EQU %%e call ec2-create-snapshot "%%d" -d "%date-today%: Daily Backup for %%b (VolID:%%d InstID:%%e)"
这是一个批处理代码,我想转换成 shell 脚本
我试过这个:
#Create snapshots of all attached volumes
for volumeid,instanceid in $(cat "$EC2_HOME/ActiveVolumes_$today_date" | awk '{print $2,$3}')
do
for instance_id,name in $(cat "$EC2_HOME/Instances_$today_date" | awk"{print $3,$5}')
do
if ["$instanceid" -eq "$instance_id" ]
then
do ec2-create-snapshot "$volumeid" -d "$today_date: Daily Backup for $instance_id (VolID:$volumeid InstID:$instance_id)"
done
fi
done
done
volume.txt 的内容在哪里
ATTACHMENT vol-fa0 i-26011 /dev/sda1 attached 2013-11-20T06:42:49+0000 true
ATTACHMENT vol-36b i-e3d6 /dev/sda1 attached 2013-11-21T12:38:09+0000 true
和instances.txt是
TAG instance i-42370 Name Linux_Test
【问题讨论】:
-
这会获取第一列和第二列。
awk '{ printf "%s %s\n", $1, $2 }'. -
这段代码是否正确:` #为volumeid,instanceid in $(cat "$EC2_HOME/SnapshotsDOW_$today_date" | awk '{print $2,$3}') 创建所有附加卷的快照instance_id,name in $(cat "$EC2_HOME/Instances_$today_date" | awk"{print $3,$5}') 做 if ["$instanceid" -eq "$instance_id" ] 然后做 ec2-create-snapshot "$volumeid " -d "$today_date: $instance_id 的每日备份 (VolID:$volumeid InstID:$instance_id)" done fi done done`
-
将您的代码编辑到原始问题中。
-
代码将无法工作,因为 bourne shell 中的 for 循环不会采用多个变量。一种选择是输出连接的内容,然后在循环中拆分它们:
for baz in $(echo "foo:bar") ; do a="$(echo $baz|cut -d: -f1)" ; b="$(echo $baz|cut -d: -f2)" ; done -
看来
volume.txt和instances.txt可能是多行,但您的文本格式不正确。您能否调整您的帖子以使用块样式格式?在工具栏中,{}按钮将所选文本转换为块样式代码。
标签: linux shell awk amazon-ec2