如何检查一个值是否大于或等于另一个值?

New*_*996 11 bash scripts

#!/usr/bin/env bash
while true; do
    if xprintidle | grep -q 3000; then
      xdotool mousemove_relative 1 1
    fi
done
Run Code Online (Sandbox Code Playgroud)

目前我可以检查是否xprintidle等于 3000,如果是,则执行xdotool. 但我想检查是否xprintidle大于或等于 3000 然后执行xdotool. 我怎样才能做到这一点?

Ger*_*csy 15

if [ $xprintidle -ge 3000 ]; then
  [...stuff...]
Run Code Online (Sandbox Code Playgroud)

这是一个快速解释:

  • gt - 大于
  • ge - 大于或等于
  • $( ... )成为括号内命令的输出

  • 因为这使用了 `[` 而不是 `[[` 并且没有引用命令替换,这并不能完全抓住 OP 的意图。它允许 `xprintidle` 添加额外的条件来测试,比如输出 `1 -o 2000` 也会导致它通过条件。本身并不是真正的问题,但这是不好的做法。如果稍后另一个无关紧要的错误,可能在 `xprintidle` 中,允许不可信的人在输出前加上前缀。您可能还认为该错误本身没有问题,但它们一起可以达到一定的效果。 (4认同)

des*_*ert 9

您可以直接使用bash's Arithmetic Expansion来比较整数:

#!/usr/bin/env bash
while :; do
  (( $(xprintidle) >= 3000 )) && xdotool mousemove_relative 1 1
  sleep 0.5
done
Run Code Online (Sandbox Code Playgroud)

如果你只想要单个命令,&&是一个简单的方法。或者,使用if

#!/usr/bin/env bash
while :; do
  if (( $(xprintidle) >= 3000 )); then
    xdotool mousemove_relative 1 1
  fi
  sleep 0.5
done
Run Code Online (Sandbox Code Playgroud)

我向sleep循环添加了一个调用,每次运行暂停半秒——根据需要进行调整。

  • +1 建议睡一会儿,从而防止循环变得狂暴。 (2认同)