변수에 스크립트를 할당할 때 awk 구문 오류가 발생함

변수에 스크립트를 할당할 때 awk 구문 오류가 발생함

기본적으로 메모리는 변수입니다. 스크립트에서는 서버에 텔넷을 연결하고 free 명령을 실행하여 메모리 사용량을 확인하고 awk를 사용하여 사용량 비율을 얻으려고 합니다. 하지만 다음과 같은 구문 오류가 발생합니다.

memory=`ssh $line -n "free | grep Mem | awk '{ print $3/$2 *100.0 }'"`

echo -e "The memory usage is: $memory" >>$LOGFILE

오류는 다음과 같습니다

awk: { print / *100.0 }
awk:          ^ unterminated regexp
awk: cmd. line:1: { print / *100.0 }
awk: cmd. line:1:                   ^ unexpected newline or end of string

답변1

문제는 명령이 실행되기 전에 $3큰따옴표로 묶여 있기 때문에 쉘로 대체된다는 것입니다(할당되지 않은 경우 아무것도 없음).$2

큰따옴표 안의 작은따옴표는 이를 방지하지 않습니다.

$ echo "'$unassigned'"
''

당신은 탈출해야합니다 $:

memory=$(ssh $line -n "free | awk '/Mem/ { print \$3/\$2 *100.0 }'")

아니면 free서버와 awk클라이언트에서 실행할 수도 있습니다.

memory=$(ssh $line -n "free" | awk '/Mem/ { print $3/$2 *100.0 }')

관련 정보