![実行中のスクリプトでコードを保持する方法 [重複]](https://linux33.com/image/9830/%E5%AE%9F%E8%A1%8C%E4%B8%AD%E3%81%AE%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%A7%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E4%BF%9D%E6%8C%81%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%20%5B%E9%87%8D%E8%A4%87%5D.png)
端末内で現在のメモリ使用量、ディスク使用量、および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