基本上内存是一个变量。在脚本中,我尝试远程登录到一台服务器并执行 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
和被 shell 替换(未分配时没有任何内容),因为它们用双引号引起来。$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 }')