CPUが80%未満の場合の命令実行

CPUが80%未満の場合の命令実行

CPU使用率が80%未満の場合は、10分ごとにコマンドを実行しようとします。私はbashスクリプトに慣れていません。総CPU使用率を取得する方法が見つかりました。 grep "CPU" | awk '{print $2 + $4}'' 次に、最大値の80%と比較したいと思います。ところで、なぜ2つを比較できないのか分かりません。スクリプトは次のとおりです。

#!/bin/bash

MAX=80
CPU=`top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}'`

while true
  do
    if $CPU < $MAX
      then
        echo $CPU  # This is an example
        CPU=`top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}'`
        sleep 10m
      fi
    done

数値がコマンドとして解釈され、スクリプトが失敗します...()なぜコンパイルcannot open 80: No such fileできないのですか?この問題をどのように解決しますか?$MAX$CPU

よろしくお願いします。

ベストアンサー1

<に使用されます リダイレクト。整数を比較する必要がある場合:

if [ "$MAX" -gt "$CPU" ]

ただし、$CPU浮動小数点数でもかまいません。 Bashは浮動小数点数に対して直接操作できないため、以下を使用する必要がありますbc

if [ "$(bc -l <<< "${CPU} > ${MAX}")" -eq 1 ]

$(..)代わりにフォームを使用する必要があります。レガシーバックティックCPU whileループ内では一度だけ割り当てることができます。

#!/bin/bash

MAX=80

while true
do
    CPU="$(top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}')"

    if [ "$(bc -l <<< "${CPU} > ${MAX}")" -eq 1 ]
    then
        echo "$CPU"  # This is an example
        sleep 10m
    fi
done

おすすめ記事