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부동 소수점을 지원하지 않는 셸을 사용해야 하는 경우 언제든지 다음을 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알림을 보내지 않습니다 .

관련 정보