Попытка получить общее использование ЦП в Bash

Я пытаюсь получить общую нагрузку ЦП с этим:

IDLE=$(mpstat | grep "all" | cut -c 92-)

CPULD=$(expr 100 - $IDLE)

echo $CPULD

но это всегда возвращается:

expr: non-integer argument on the second line. 

Я озирался, и все говорят, что целые числа будут автоматически распознаны в строках, но это, кажется, не работает.

Править: Для тех из Вас, кто хочет видеть мой полный и теперь рабочий сценарий, это здесь: http://pastebin.com/cFQzz4Up

2
задан 3 September 2015 в 15:07

3 ответа

bashexpr) не может сделать арифметики с плавающей точкой, необходимо взять справку bc.

Например:

$ IDLE=$(mpstat | grep "all" | cut -c 92-)

Позволяет говорят $IDLE 77.25.

Теперь Вам нужно bc :

$ IDLE=77.25

$ CPULD="$(bc <<<"100 - $IDLE")"

$ echo "$CPULD"
22.75

bc воздействует на файлы, таким образом, мы можем передать строку управления через STDIN, хотя я предпочитаю здесь строки:

$ echo "100 - 45.34" | bc
54.66

$ bc <<<"100 - 45.34"
54.66

На другой ноте, для получения НЕАКТИВНОГО % ЦП, вместо mpstat | grep "all" | cut -c 92- можно сделать:

mpstat | grep -Po 'all.* \K[^ ]+$'
3
ответ дан 2 December 2019 в 02:55

Я предложил это решение, и оно работает на меня.

echo print `top -n 1 | tr -s " " | cut -d$" " -f10 | tail -n +8 | head -n -1 | paste -sd+ | bc`/ `nproc` | python

Источник (опишите): https://mohammadg.com/programming/how-to-get-overall-cpu-utilization-from-the-bash-command-line /

0
ответ дан 2 December 2019 в 02:55

Используйте команду uptime. Это дает средние числа системной нагрузки для прошлого 1, 5, и 15 минут ( страница справочника ).

# 1. get total average CPU usage for the past minute
avg_cpu_use=$(uptime)
# 2. split response
IFS=',' read -ra avg_cpu_use_arr <<< "$avg_cpu_use"
# 3. find cpu usage
avg_cpu_use=""
for i in "${avg_cpu_use_arr[@]}"; do :
    if [[ $i == *"load average"* ]]; then
        avg_cpu_use=$i
        break       
    fi
done
# 4. create response
avg_cpu_use=$(echo ${avg_cpu_use:16})   # Remove "  load average: "
if [[ -z "${avg_cpu_use// }" ]]; then
    avg_cpu_use="CPU: N/A perc used"
    exit -1
else
    avg_cpu_use="CPU: ${avg_cpu_use} perc used"
fi
0
ответ дан 2 December 2019 в 02:55

Другие вопросы по тегам:

Похожие вопросы: