変数にスクリプトを割り当てると awk 構文エラーが発生する

変数にスクリプトを割り当てると awk 構文エラーが発生する

デフォルトでは、メモリは変数です。スクリプトはサーバーにTelnetを接続し、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 }')

おすすめ記事