#!/bin/bash # TODO: finish it # /proc/stat format: # cpu[n] user nice system idle iowait irq softirq steal guest guest_nice # format user nice system idle steal total # total = user + nice + system + idle + steal prevstat=$(awk ' /^cpu[0-9]+/ {print $2, $3, $4, $5, $9, ($2 + $3 + $4 + $5 + $9)}' /proc/stat) sleep 0.5 stat=$(awk ' /^cpu[0-9]+/ {print $2, $3, $4, $5, $9, ($2 + $3 + $4 + $5 + $9)}' /proc/stat) num_cpu=$(echo "$stat" | wc -l) get_load() { line=${1:-1} last=$(echo "$stat" | sed "${line}q;d") prev=$(echo "$prevstat" | sed "${line}q;d") read -r u n s last_idle st last_total <<< "$last" #echo "$u $n $s $last_idle $st $last_total" read -r u n s prev_idle st prev_total <<< "$prev" #echo "$u $n $s $prev_idle $st $prev_total" diff=$(echo "$last_total $prev_total" | awk '{printf "%d", $1 - $2}') [ "$diff" = "0" ] && return percentage=$(echo "$diff $last_idle $prev_idle" | awk '{printf "%.2f", 100.0 * (($1 - ($2 - $3)) / $1)}') echo -e "$percentage" } total_load=0 for i in $(seq 1 "$num_cpu"); do load=$(get_load "$i") total_load=$(echo "$total_load $load" | awk '{printf "%.2f", $1 + $2}') done total_percentage=$(echo "$total_load $num_cpu" | awk '{printf "%.2f", ($1 / $2) + 0.5}') echo -e "$total_percentage" #read -r cpu a b c previdle rest < /proc/stat #prevtotal=$((a+b+c+previdle)) #sleep 0.5 #read -r cpu a b c idle rest < /proc/stat #total=$((a+b+c+idle)) #cpu=$((100*( (total-prevtotal) - (idle-previdle) ) / (total-prevtotal) )) #echo -e "$cpu" exit 0