정지/지연 또는 예상치 못한 충돌을 방지하기 위해 메모리 사용량이 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
알림을 보내지 않습니다 .