実行中のスクリプトでコードを保持する方法 [重複]

実行中のスクリプトでコードを保持する方法 [重複]

端末内で現在のメモリ使用量、ディスク使用量、および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

おすすめ記事