터미널 내에서 현재 메모리 사용량, 디스크 사용량 및 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