如何保持脚本中的代码运行

如何保持脚本中的代码运行

我有一个简单的脚本,它显示终端内当前的内存使用情况、磁盘使用情况和 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

相关内容