Bash:检查百分比是否大于 90?

Bash:检查百分比是否大于 90?

当我的内存使用量高于 90 时,我尝试向自己发送通知,以避免冻结/滞后或意外崩溃。

问题:syntax error: invalid arithmetic operator (error token is ".5359 < 80 ")

#!/bin/bash

INUSE=$(free | grep Mem | awk '{print $3/$2 * 100.0}')

if (( $INUSE > 90 )); then
    notify-send "Performance Warning" "Your memory usage $INUSE is getting high, if this continues your system may become unstable."
fi

答案1

bash如果您必须使用不支持浮点的shell ,您始终可以awk进行比较:

#! /bin/sh -
memory_usage() {
  free |
    awk -v threshold="${1-90}" '
     $1 == "Mem:" {
       percent = $3 * 100 / $2
       printf "%.3g\n", percent
       exit !(percent >= threshold)
     }'
}
if inuse=$(memory_usage 90); then
   notify-send "Performance Warning" "Your memory usage $inuse is getting high, if this continues your system may become unstable."
fi

(用 sh 替换 bash,因为其中没有任何特定于 bash 的内容)。

答案2

如果我没记错的话,您尝试使用的算术运算符采用整数,而您给它一个非整数。

#!/bin/bash

INUSE=$(free | grep Mem | awk -v OFMT="%f" '{print $3/$2*100.0}')

if (( "${INUSE%.*}" > 90 )); then
    notify-send "Performance Warning" "Your memory usage $INUSE is getting high, if this continues your system may become unstable."
fi

如果您取消尾随.5359使用"${INUSE%.*}"它应该可以工作,但这也意味着您应该使用>=而不是>。否则当INUSE大于90和小于时91它不会通知。

相关内容