2014-06-30 103 views
0

我是新手在脚本中。我的要求是从aws api的输出中创建如下所示的/ etc/hosts文件。Bash脚本创建主机文件从亚马逊api输出

Hostname PrivateIP 

abc x.y.x.z 

cde a.b.c.c 

等等。

我有以下脚本,

#!/bin/bash 
export AWS_ACCESS_KEY=abc 
export AWS_SECRET_KEY=cde 
export EC2_URL=https://url.com 
source ~/.bashrc 
ec2-describe-instances --filter "group-name=mygroup" > /tmp/info 
name=$(cat /tmp/info| grep 'Hostname' | cut -f 5) 
ip=$(cat /tmp/info| grep 'INSTANCE' | cut -f 18) 
echo -e $name"\t"$ip 

currenltly输出为一行。 我确定我需要一个for循环。但不知道该怎么做。 请指教。

+1

应该发布更多信息/ tmp/info对于更具体的答案是什么样的。 – GoinOff

回答

0

如果你想对name变量循环,尝试这样的事情:

IFS=$'\n' 
name=(`cat /tmp/info| grep 'Hostname' | cut -f 5`) 
unset IFS 

# For loop based on name 
for i in "${name[@]}" 
do 
    # process each name ($i) 
done 
0

我不记得EC2-描述-instances命令的具体格式,但在这里是处理一个简单的方法多行输出格式化为由制表符分隔的字段:

input=/tmp/info 
while read field1 field2 field3 ...; do  # fieldx variables map to each field in the output 
    # process the fields you need 
done < "$input"