Ich habe eine Funktion, die mir eine Liste von IPs gibt und für jede IP in meiner Liste möchte ich eine Abfrage ausführen. Das Problem, das ich habe, ist sein einziges Durchschleifen (1) der Ergebnisse und nicht der Rest.bash scripting - Wie man Ergebnisse innerhalb einer Funktion durchläuft
getPartition()
{
_knife=$(which knife);
_grep=$(which grep);
_awk=$(which awk);
cd ~/home/foo/.chef
local result=$(${_knife} search "chef_environment:dev AND role:myapp AND ec2_region:us-east-1" | ${_grep} IP | ${_awk} '{ print $2 }');
read -a servers <<< $result;
echo "Checking ${#servers[@]} servers";
for i in ${servers[@]};
do
local host='10.1.2.123'
local db='mystate'
_mongo=$(which mongo);
echo -n "$i";
local exp="db.foobarcluster_servers.find(
{\"node_host\":\"${i}\",\"node_type\":\"PROCESS\",\"region\":\"us-east-1\",\"status\":\"ACTIVE\"},{\"partition_range_start\":1,\"partition_range_end\":1, _id:0}).pretty();";
${_mongo} ${host}/${db} --eval "$exp" | grep -o -e "{[^}]*}";
done
}
Also, ich versuchte, mit for
, aber es ist nur läuft die Abfrage für (1) die (5) Hosts aufgeführt.
Ich kann für result
in meiner Ausgabe sehen, dass die Liste der IP-Adressen wie folgt aussehen:
+ local 'result=10.8.3.34
10.8.2.161
10.8.3.514
10.8.4.130
10.8.2.173'
Also, ich bin nur Ergebnisse für (1) der IP-Adressen der Rückkehr sollte es sein (5) von sie, weil ich 5 IPs:
+ read -a servers
+ echo 'Checking 1 servers'
Checking 1 servers
+ for i in ${servers[@]}
+ local host=10.1.2.130
+ local db=mystate
++ which mongo
+ _mongo=/usr/local/bin/mongo
+ echo -n 10.8.3.34
10.8.3.34+ local 'exp=db.foobarcluster_servers.find(
{"node_host":"10.8.3.34","node_type":"PROCESS","region":"us-east-1","status":"ACTIVE"},{"partition_range_start":1,"partition_range_end":1, _id:0}).pretty();'
+ /usr/local/bin/mongo 10.8.3.34/mystate --eval 'db.foobarcluster_servers.find(
{"node_host":"10.8.3.34","node_type":"PROCESS","region":"us-east-1","status":"ACTIVE"},{"partition_range_start":1,"partition_range_end":1, _id:0}).pretty();'
+ grep -o -e '{[^}]*}'
{ "partition_range_start" : 31, "partition_range_end" : 31 }
+ set +x
Ergebnisse:
{ "partition_range_start" : 31, "partition_range_end" : 31 }
ich erwarte:
{ "partition_range_start" : 31, "partition_range_end" : 31 }
{ "partition_range_start" : 32, "partition_range_end" : 32 }
{ "partition_range_start" : 33, "partition_range_end" : 33 }
{ "partition_range_start" : 34, "partition_range_end" : 34 }
{ "partition_range_start" : 35, "partition_range_end" : 35 }
Wie kann ich meine IPs effektiv durchlaufen? Habe ich result
richtig als Variable eingerichtet, um diese Liste von IPs zu halten?
Was ist die Ausgabe von '$ {Server [@])'? –