Reputation: 15581
I have created an array uisng the command IFS=', ' read -r -a array <<< "$(command)"
The array has values:
abc001
abc002
abc003
I want to loop through the array and run a curl
command on each element.
a) If
curl
output has stringConnected
then thecurl
command shouldtimeout
and thefor loop
should exit out.b) If the
curl
output is not having stringConnected
then thecurl
command shouldtimeout
andfor loop
should move to next element.
I have written the following code.
for element in "${array[@]}"
do
resp=$(curl -v http://"$element":8888)
echo resp
done
I am getting following output:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* About to connect() to abc001 port 8888 (#0)
* Trying 10.10.10.10...
* Connected to abc001 port 8888 (#0)
Upvotes: 0
Views: 932
Reputation: 140327
#!/bin/bash
for element in "${array[@]}"; do
if curl -m1 -s "http://$element:8888"; then
echo "'$element' connected" && break
fi
done
Upvotes: 0
Reputation: 133518
Could you please try following, not tested though should work but.
for element in "${array[@]}"
do
resp=$(curl -v http://"$element":8888)
if grep -q "Connected" "$resp"
then
echo resp
fi
done
OR
for element in "${array[@]}"
do
curl http://"$element":8888 -s -f -o /dev/null
if [[ $? -eq 0 ]]
then
echo "url $element is working."
fi
done
Upvotes: 2