내 로드 평균이 10을 초과하면 경고를 보내야 합니다.
awk 명령이 정수를 반환하는 경우 다음을 수행할 수 있습니다.
declare -i MAX_LOAD=10
declare -i L1=`cat /proc/loadavg | awk {'print $1'}`
if [ $L1 -gt $MAX_LOAD ]
then
echo "Alert"
fi
그러나 L1에서는 부동 소수점 값(예: 2.35)을 반환합니다.
이 경우 값을 어떻게 비교할 수 있습니까?
답변1
이미 awk를 사용하고 있으므로 아마도 가장 쉬운 방법은 해당 언어에서도 부동 소수점 비교를 수행하는 것입니다.
MAX_LOAD=10.0
if ! </proc/loadavg awk -vmax_load=$MAX_LOAD '{ exit $1 > max_load }'
then
echo Alert
fi
!
연산자 반전 테스트 와 같은 몇 가지 트릭이 관련되어 있습니다 . 이는 awk의 부울 표현식과 값을 수신하는 상태 코드 구성이 if
반대 의미를 갖기 때문에 필요합니다 . 파일을 awk의 표준 입력으로 <
보내는 데 사용됩니다 . /proc/loadavg
awk를 호출하면 -vmax_load=$MAX_LOAD
awk 변수가 max_load
쉘 변수의 값으로 설정됩니다 MAX_LOAD
.
특정 경우 MAX_LOAD가 정수이고 파일에서 첫 번째 부동 소수점을 읽으므로 임시 해결책은 다음과 같습니다.
if [ $(</proc/loadavg cut -f1 -d.) -gt $MAX_LOAD ] ...
호출은 cut
의 첫 번째 숫자의 정수 부분을 추출합니다 /proc/loadavg
. 그러나 위의 가정 중 하나라도 잘못된 것으로 판명되면 아이디어는 실패합니다.