1
#!/bin/bash
/home/user/script.sh > output.txt
VAR0=$(cat output.txt | grep -A 3 "word")
A0=$(echo $VAR0 | awk 'BEGIN { FS = "[:X]" } {printf $3}')
while [ $A0 \< 2.37 ] 
do echo $A0
sleep 10
done
/home/user/script2.sh

what i want to do is to run the script2.sh when the output of script.sh in output.txt is > 2.37

the issue is, the output of script.sh is dynamic so every time while loops it has to take a fresh output from output.txt until the condition is met and script2.sh can be run.

how can i refresh the value of $A0 every time while loops?

what i get now si the first value of $A0 perpetual witch is smaller than 2.37

it takes some time until the output of script.sh in $A0 becomes > 2.37

i have already considered doing

/home/user/script.sh
sleep 180
/home/user/script2.sh

but 3 min is too much and the change in output.txt can happen anywhere between 2 and 3 min

Basically what i want is to run scrip2.sh when the conditions in script.sh are met...

Any ideas?

Thank you!

1 Answer 1

1

Just put the computation of A0 inside the loop, and exit the loop when A0 >= 2.37:

#!/bin/bash

while true ; do
    /home/user/script.sh > output.txt
    VAR0=$(cat output.txt | grep -A 3 "word")
    A0=$(echo $VAR0 | awk 'BEGIN { FS = "[:X]" } {printf $3}')
    echo $A0
    if (( $(echo "$A0 >= 2.37" | bc -l) )) ; then
        break
    fi
    sleep 10
done

/home/user/script2.sh

Note that bash can't compare floating point numbers by itself. You need a hack like

if (( $(echo "$A0 >= 2.37" | bc -l) )) ; then

See How to compare two floating point numbers in Bash?

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.