bc 명령 후 스크립트 오류

bc 명령 후 스크립트 오류

다음과 같은 스크립트를 실행하려고 합니다.

#!/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

관련 정보