projects
asked on
bash while loop
Wish I knew how to do this on my own but I've wasted too much time on it as it is.... help! No idea what syntax to use.
I need to make the while condition a curl test to see if I get a result 200.
If I don't, then loop again until I do.
Once I do, then continue on with the script.
#!/bin/bash
while "curl -m 5 -k --key sever.key --cert server.crt -u "user:1234" -s -o /dev/null -w '%{http_code}\n' https://google.com)" ;
if [ $RES -ne 000 ];then echo "AVAILABLE" ; fi
do
sleep 2
done
echo "would continue with the script from this point on..."
I need to make the while condition a curl test to see if I get a result 200.
If I don't, then loop again until I do.
Once I do, then continue on with the script.
#!/bin/bash
while "curl -m 5 -k --key sever.key --cert server.crt -u "user:1234" -s -o /dev/null -w '%{http_code}\n' https://google.com)" ;
if [ $RES -ne 000 ];then echo "AVAILABLE" ; fi
do
sleep 2
done
echo "would continue with the script from this point on..."
If you want to run the loop until you're getting a 200 regardless of whether curl fails or not try this:
":" means "no operation" which always returns "true", so the loop will run until the break condition ("200") is met.
while :
do
RES=$(curl -m 5 -k --key sever.key --cert server.crt -u "user:1234" -s -o /dev/null -w '%{http_code}\n' https://google.com))
if [ $RES -eq 200 ];then
echo "AVAILABLE" ;
break
fi
sleep 2
done
":" means "no operation" which always returns "true", so the loop will run until the break condition ("200") is met.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
I assumed that the RES variable is needed again later in the script and that issuing the "Available" message is mandatory .
ASKER
Basically, I just don't want the rest of the script to run until I can see the server and get a curl 200 result back.
To just keep trying until I see a 200 then continue on with the script.
Currently, I am using something like this;
#!/bin/bash
while [[ $(date "+%Y") -lt 2000 ]] ;
do
sleep 10
done
This simply lets me know once my device time was updated, which means I now have internet access.
To just keep trying until I see a 200 then continue on with the script.
Currently, I am using something like this;
#!/bin/bash
while [[ $(date "+%Y") -lt 2000 ]] ;
do
sleep 10
done
This simply lets me know once my device time was updated, which means I now have internet access.
All of our solutions will do what you desire.
ASKER
I'm not sure which one is what I need then.
I do need to know that I am getting a 200 back because that confirms that the script is able to see the target before continuing on.
I do need to know that I am getting a 200 back because that confirms that the script is able to see the target before continuing on.
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
/go: line 3: [: 000: unary operator expected
not seeing some site yet so try again until I see it
./go: line 3: [: 000: unary operator expected
not seeing some site yet so try again until I see it
./go: line 3: [: 000: unary operator expected
#!/bin/bash
until [ $(curl -s -o /dev/null -w '%{http_code}\n' https://google.com) -eq200 ]
do
sleep 2
echo "not seeing some site yet so try again until I see it"
done
Echo "now would continue with the script"
not seeing some site yet so try again until I see it
./go: line 3: [: 000: unary operator expected
not seeing some site yet so try again until I see it
./go: line 3: [: 000: unary operator expected
#!/bin/bash
until [ $(curl -s -o /dev/null -w '%{http_code}\n' https://google.com) -eq200 ]
do
sleep 2
echo "not seeing some site yet so try again until I see it"
done
Echo "now would continue with the script"
Put a space between "-eq" and "200"
until [ $(curl -s -o /dev/null -w '%{http_code}\n' https://google.com) -eq 200 ]
do
until [ $(curl -s -o /dev/null -w '%{http_code}\n' https://google.com) -eq 200 ]
do
while <operation>
do
if <condition> ; then
<operation>
fi
sleep
done
Your script has to fill the "RES" variable some way. Perhaps like this:
Open in new window
The while loop will run as long as the curl command (which I didn't check for syntax, by the way) gives a zero return code and the outcome is not equal 200.
Should curl fail or should the result be 200 the loop will terminate and the script will continue after "done".
To check whether the loop ended due to "curl" having failed or due to RES being 200 best repeat the test for "$RES -eq 200" after "done" and react accordingly.