BCでsshとawkを使用すると、構文エラーが発生します。

BCでsshとawkを使用すると、構文エラーが発生します。

デフォルトでは、SSHを介して2つの異なるノードからメモリ使用量を取得し、2つの異なる変数に保存します。その後、メモリが少ないホストを選択し、戻りコードは0または1です。 arr 配列には 2 つのホスト名が含まれています。

function selectNode() {
   arr=("$@")

   mem1=$((ssh  ${arr[0]} "free -m | awk 'NR==2{print \"%f\n\", \$3*100/\$2 }'")| bc -l)
   mem2=$((ssh  ${arr[1]} "free -m | awk 'NR==2{print \"%f\n\", \$3*100/\$2 }'")| bc -l)

   if [ "${mem1}" > "${mem2}" ]; then
       node=1
   else
       node=0
   fi


   return $node

}

上記のスクリプトは正常に実行され、0または1を返しますが、mem1行とmem2行で構文エラーが発生します。

(standard_in) 1: syntax error

ここで解決策は何ですか?

ベストアンサー1

計算を実行するために使用する必要はありませんbc

mem1=$(ssh  ${arr[0]} "free -m | awk 'END{if(NR==2) print \$3*100/\$2 }'") 
mem2=$(ssh  ${arr[1]} "free -m | awk 'END{if(NR==2) print \$3*100/\$2 }'")

おすすめ記事