当我的内存使用量高于 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
它不会通知。