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