다음과 같은 스크립트를 실행하려고 합니다.
#!/bin/bash
USED=`free -m | more | grep -v total | head -1 | cut -d':' -f2 | cut -d' ' -f18`
CACHE=`free -m | more | grep -v Swap | tail -1 | cut -d':' -f2 | cut -d' ' -f9`
TOTAL=`free -m | more | grep -v total | head -1 | cut -d':' -f2 | cut -d' ' -f11`
echo "scale=2 ; ((($USED - $CACHE) /$TOTAL) *100)" | bc
하지만 항상 다음과 같은 오류가 발생합니다.
(standard_in) 1: parse error
답변1
bc 파이프를 제거한 | bc
다음 스크립트를 실행하면 다음과 같이 출력됩니다.
scale=2 ; (((5538 - ) / 5969) * 100)
$CACHE
변수가 비어 있어 bc
구문 오류가 발생하는 것을 볼 수 있습니다 .
당신은 시도 할 수 있습니다:
CACHE=$(free -m | more | grep -v Swap | tail -1 | cut -d':' -f2 | awk '{print $1}')
노트
awk
이 경우보다 출력을 구문 분석하는 것이 더 좋습니다cut
.- 당신은 시도해야$(...)명령 대체에 사용됩니다.
답변2
#!/bin/bash
USED=**0**
free -m | more | grep -v total | head -1 | cut -d':' -f2 | cut -d' ' -f18
CACHE=**0**
free -m | more | grep -v Swap | tail -1 | cut -d':' -f2 | cut -d' ' -f9
TOTAL=**0**
free -m | more | grep -v total | head -1 | cut -d':' -f2 | cut -d' ' -f11
echo "scale=2 ; ((($USED - $CACHE) /$TOTAL) *100)" | bc