端末内で現在のメモリ使用量、ディスク使用量、およびCPU負荷を表示する簡単なスクリプトがあります。何を意味するのかを知るコードは次のとおりです。
free -m | awk 'NR==2{printf " | Memory Usage: %s/%sMB (%.2f%%)|\n", $3,$2,$3*100/$2 }'
df -h | awk '$NF=="/"{printf " | Disk Usage: %d/%dGB (%s) |\n", $3,$2,$5}'
top -bn1 | grep load | awk '{printf " | CPU Load: %.2f |\n", $(NF-2)}'
問題は、スクリプトでコードを一度だけ実行することです。スクリプトを再ロードしなくても、1秒ごとに自動的にスクリプトを実行する必要があります。だから、基本的にスクリプトが他のタスクを実行している間、一種の連続ループにあることを望みます。
1秒ごとに更新を続ける理由は、スクリプトの実行時にCPU使用量を1回だけ表示しますが、CPUが頻繁に変わるため、現在のデータを継続的に表示する必要があるからです。
答え1
whileループを使用できます。
while :
do
free -m | awk 'NR==2{printf " | Memory Usage: %s/%sMB (%.2f%%)|\n", $3,$2,$3*100/$2 }'
df -h | awk '$NF=="/"{printf " | Disk Usage: %d/%dGB (%s) |\n", $3,$2,$5}'
top -bn1 | grep load | awk '{printf " | CPU Load: %.2f |\n",$(NF-2)}'
sleep 1
done
: 常に true を返す組み込みコマンドです。
より読みやすいものを好む場合はtrueを使用できます。
while true
do
free -m | awk 'NR==2{printf " | Memory Usage: %s/%sMB (%.2f%%)|\n", $3,$2,$3*100/$2 }'
df -h | awk '$NF=="/"{printf " | Disk Usage: %d/%dGB (%s) |\n", $3,$2,$5}'
top -bn1 | grep load | awk '{printf " | CPU Load: %.2f |\n",$(NF-2)}'
sleep 1
done
「:」と「true」の違いについての詳細は、以下で確認できます。
:(コロン)GNU Bashの組み込み機能はどのような用途に使用されますか?
情報を明確に表示するには、ループの先頭に明確な機能を追加できます。たとえば、次のようになります。
while :
do
clear
free -m | awk 'NR==2{printf " | Memory Usage: %s/%sMB (%.2f%%)|\n", $3,$2,$3*100/$2 }'
df -h | awk '$NF=="/"{printf " | Disk Usage: %d/%dGB (%s) |\n", $3,$2,$5}'
top -bn1 | grep load | awk '{printf " | CPU Load: %.2f |\n",$(NF-2)}'
sleep 1
done