停止/遅延または予期しない競合を防ぐために、メモリ使用量が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
浮動小数点をサポートしないシェルを使用する必要がある場合は、いつでも次のものを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
(bashに関連するものがないので、bashをshに置き換えてください。)
答え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
通知を送信しません。