带有while循环的Bash脚本,直到满足动态条件

时间:2018-02-10 17:09:01

标签: linux bash shell

#!/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

我想要做的是在output.txt中的script.sh输出为&gt;时运行script2.sh。 2.37

问题是,script.sh的输出是动态的,因此每次循环时都必须从output.txt获取一个新输出,直到满足条件并运行script2.sh。

每次循环时如何刷新$ A0的值?

我现在得到的是$ A0永久女巫的第一个值小于2.37

在$ A0中的script.sh输出变为&gt;之前需要一些时间2.37

我已经考虑过了

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

但是3分钟太多而且output.txt的变化可能发生在2到3分钟之间

基本上我想要的是在满足script.sh中的条件时运行scrip2.sh ...

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

只需将A0的计算放在循环中,然后在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

请注意,bash无法单独比较浮点数。你需要像

这样的黑客
if (( $(echo "$A0 >= 2.37" | bc -l) )) ; then

请参阅How to compare two floating point numbers in Bash?