![如何保持脚本中的代码运行](https://linux22.com/image/9830/%E5%A6%82%E4%BD%95%E4%BF%9D%E6%8C%81%E8%84%9A%E6%9C%AC%E4%B8%AD%E7%9A%84%E4%BB%A3%E7%A0%81%E8%BF%90%E8%A1%8C.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 秒自动继续运行该脚本,而不必继续重新加载脚本。所以基本上我只是希望它处于某种连续循环中,而脚本可以做其他事情。
我希望它继续每 1 秒刷新一次,是因为它只在运行脚本时显示 1 次 CPU 使用情况,但 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 内置函数的用途是什么?
如果您想要清晰地显示信息,可以在循环的开头添加clear函数,例如:
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