meallhour
meallhour

Reputation: 15581

How to perform grep on curl within for loop?

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 string Connected then the curl command should timeout and the for loop should exit out.

b) If the curl output is not having string Connected then the curl command should timeout and for 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

Answers (2)

SiegeX
SiegeX

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

RavinderSingh13
RavinderSingh13

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

Related Questions