기본적으로 메모리는 변수입니다. 스크립트에서는 서버에 텔넷을 연결하고 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 }')