读取变量,直到输出大于BASH中的某个值

时间:2015-04-17 07:27:47

标签: linux bash

我有一个具有数字输出的命令,但有时,由于我无法控制的错误,输出值低于100。 我需要的是读取此输出,并且仅在输出大于100时才继续。问题是“until循环”仅读取变量一次。即使变量随时间变化,until循环也只使用第一个变量读数的输出。 有没有什么方法可以强制它多次读取命令输出,直到找到正确的值?

VARIABLE=$(command)

until [  ${VARIABLE} -gt 100 ]; do
  sleep 0.1
done

echo "$(VARIABLE)"

2 个答案:

答案 0 :(得分:4)

您只运行command一次,然后永久循环您从该单个调用获得的输出。据推测,你想要的是多次运行命令,在每次调用后检查结果。

while true; do
    variable=$(command)    # avoid uppercase variable names
    ((variable > 100)) && break
    sleep 0.1
done
echo "$variable"           # always quoting is good form

((...))算术评估工具仅限Bash。如果您需要脚本与POSIX兼容(即在sh的任何现代变体下运行),您必须使用稍微复杂的构造([ "$variable" -gt 100 ]应该一直工作回经典Bourne shell,假设variable始终包含一个数字。)

答案 1 :(得分:4)

不需要花哨的东西,你只需要将命令放在循环中,然后将循环条件作为你实际想要循环的条件。

while [[ "$variable" -le 100 ]];do 
    variable=$(command) 
    sleep 0.1 
done