将脚本分配给变量时 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和被 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 }')

相关内容