баш скрипт для отображения процессора информация, рдр, температура на Ubuntu Xenial, показывая только основные 3 информация

Я запускаю Ubuntu Xenial на Orange Pi с AllWinner H3 QuadCore Arm V7, и вам нужно постоянно контролировать частоту и темп процессора, поэтому у меня есть этот сценарий bash, чтобы помочь мне, но проблема в том, что это только ботинки ядра 3, а не другие.

#/bin/bash while (true); do ## retrieves core 0 info cpu0_cur=$(( `cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq` / 1000 )) cpu0_max=$(( `cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq` / 1000 )) cpu0_min=$(( `cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq` / 1000 )) cpu0_cur="$(printf "%4s" $cpu0_cur)" cpu0_max="$(printf "%4s" $cpu0_max)" cpu0_min="$(printf "%4s" $cpu0_min)" ## retrieves core 1 info cpu1_cur=$(( `cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq` / 1000 )) cpu1_max=$(( `cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq` / 1000 )) cpu1_min=$(( `cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_min_freq` / 1000 )) cpu1_cur="$(printf "%4s" $cpu1_cur)" cpu1_max="$(printf "%4s" $cpu1_max)" cpu1_min="$(printf "%4s" $cpu1_min)" ## retrieves core 2 info cpu2_cur=$(( `cat /sys/devices/system/cpu/cpu2/cpufreq/scaling_cur_freq` / 1000 )) cpu2_max=$(( `cat /sys/devices/system/cpu/cpu2/cpufreq/scaling_max_freq` / 1000 )) cpu2_min=$(( `cat /sys/devices/system/cpu/cpu2/cpufreq/scaling_min_freq` / 1000 )) cpu2_cur="$(printf "%4s" $cpu2_cur)" cpu2_max="$(printf "%4s" $cpu2_max)" cpu2_min="$(printf "%4s" $cpu2_min)" ## retrieves core 3 info cpu3_cur=$(( `cat /sys/devices/system/cpu/cpu3/cpufreq/scaling_cur_freq` / 1000 )) cpu3_max=$(( `cat /sys/devices/system/cpu/cpu3/cpufreq/scaling_max_freq` / 1000 )) cpu3_min=$(( `cat /sys/devices/system/cpu/cpu3/cpufreq/scaling_min_freq` / 1000 )) cpu3_cur="$(printf "%4s" $cpu3_cur)" cpu3_max="$(printf "%4s" $cpu3_max)" cpu3_min="$(printf "%4s" $cpu3_min)" ## retrieves system temp tempr=`cat /sys/devices/virtual/hwmon/hwmon1/temp1_input` tempr="$(printf "%3s" $tempr)" ## retrieves ddr info ddr_cur=$(( `cat /sys/devices/platform/sunxi-ddrfreq/devfreq/sunxi-ddrfreq/cur_freq` / 1000 )) ddr_max=$(( `cat /sys/devices/platform/sunxi-ddrfreq/devfreq/sunxi-ddrfreq/max_freq` / 1000 )) ddr_min=$(( `cat /sys/devices/platform/sunxi-ddrfreq/devfreq/sunxi-ddrfreq/min_freq` / 1000 )) ddr_cur="$(printf "%4s" $ddr_cur)" ddr_max="$(printf "%4s" $ddr_max)" ddr_min="$(printf "%4s" $ddr_min)" ## prints results echo -ne " CORE 0 (MHz): $cpu0_cur (min $cpu0_min, max $cpu0_max) TEMPERATURE: $tempr MEMORY (MHz): $ddr_cur (min $ddr_min, max $ddr_max) "\\r echo -ne " CORE 1 (MHz): $cpu1_cur (min $cpu1_min, max $cpu1_max) TEMPERATURE: $tempr MEMORY (MHz): $ddr_cur (min $ddr_min, max $ddr_max) "\\r echo -ne " CORE 2 (MHz): $cpu2_cur (min $cpu2_min, max $cpu2_max) TEMPERATURE: $tempr MEMORY (MHz): $ddr_cur (min $ddr_min, max $ddr_max) "\\r echo -ne " CORE 3 (MHz): $cpu3_cur (min $cpu3_min, max $cpu3_max) TEMPERATURE: $tempr MEMORY (MHz): $ddr_cur (min $ddr_min, max $ddr_max) "\\r sleep 0.2 done

Но то, что он выводит, это только:

CPU 3 (МГц): 1536 (мин 480, максимум 1536) ТЕМПЕРАТУРА: 74 ПАМЯТЬ (МГц): 672 (мин. 408, макс. 672)

Я не очень много помню о сценариях bash, это было много лет, но, пожалуйста, что мне не хватает? Заранее спасибо;)

0
задан 24 November 2017 в 17:02

3 ответа

У вас есть:

echo -ne "..."\\r

Это означает:

-n: не выводить новую строку в конце, поэтому любая последующая команда запускается в той же строке -e: интерпретировать escape-последовательности обратной косой черты, так: \r становится возвратом каретки, а следующая команда запускает вывод с начала той же строки

. Таким образом, все ваши команды печатаются в одну строку, каждая из которых перезаписывает предыдущий, и видно только последнее. Удалите -ne и \r:

echo "  CORE 0 (MHz): $cpu0_cur (min $cpu0_min, max $cpu0_max)  TEMPERATURE: $tempr  MEMORY (MHz): $ddr_cur (min $ddr_min, max $ddr_max)   "

Кроме того, вам не нужны все эти переменные:

while true; do
    tempr=$(cat /sys/devices/virtual/hwmon/hwmon1/temp1_input)
    ## retrieves ddr info
    ddr_cur=$(( $(cat /sys/devices/platform/sunxi-ddrfreq/devfreq/sunxi-ddrfreq/cur_freq) / 1000 ))
    ddr_max=$(( $(cat /sys/devices/platform/sunxi-ddrfreq/devfreq/sunxi-ddrfreq/max_freq) / 1000 ))
    ddr_min=$(( $(cat /sys/devices/platform/sunxi-ddrfreq/devfreq/sunxi-ddrfreq/min_freq) / 1000 ))
    for i in {0..3}; do
        ## retrieves core info
        cur=$(( $(cat /sys/devices/system/cpu/cpu$i/cpufreq/scaling_cur_freq) / 1000 ))
        max=$(( $(cat /sys/devices/system/cpu/cpu$i/cpufreq/scaling_max_freq) / 1000 ))
        min=$(( $(cat /sys/devices/system/cpu/cpu$i/cpufreq/scaling_min_freq) / 1000 ))
    ## retrieves system temp
        printf '\tCORE %d (MHz): %4s (min %4s, max %4s)  TEMPERATURE: %4s MEMORY (MHz): %4s(min %4s, max %4s)\n' $i "$cur" "$min" "$max" "$tempr" "$ddr_cur" "$ddr_min" "$ddr_max"
    done
    sleep 0.2
done
1
ответ дан 22 May 2018 в 15:56
  • 1
    Идеальный, базовый материал, который я должен помнить (теперь я это делаю). Спасибо. – Paul C. 24 November 2017 в 09:13

У вас есть:

echo -ne "..."\\r

Это означает:

-n: не выводить новую строку в конце, поэтому любая последующая команда запускается в той же строке -e: интерпретировать escape-последовательности обратной косой черты, так: \r становится возвратом каретки, а следующая команда запускает вывод с начала той же строки

. Таким образом, все ваши команды печатаются в одну строку, каждая из которых перезаписывает предыдущий, и видно только последнее. Удалите -ne и \r:

echo " CORE 0 (MHz): $cpu0_cur (min $cpu0_min, max $cpu0_max) TEMPERATURE: $tempr MEMORY (MHz): $ddr_cur (min $ddr_min, max $ddr_max) "

Кроме того, вам не нужны все эти переменные:

while true; do tempr=$(cat /sys/devices/virtual/hwmon/hwmon1/temp1_input) ## retrieves ddr info ddr_cur=$(( $(cat /sys/devices/platform/sunxi-ddrfreq/devfreq/sunxi-ddrfreq/cur_freq) / 1000 )) ddr_max=$(( $(cat /sys/devices/platform/sunxi-ddrfreq/devfreq/sunxi-ddrfreq/max_freq) / 1000 )) ddr_min=$(( $(cat /sys/devices/platform/sunxi-ddrfreq/devfreq/sunxi-ddrfreq/min_freq) / 1000 )) for i in {0..3}; do ## retrieves core info cur=$(( $(cat /sys/devices/system/cpu/cpu$i/cpufreq/scaling_cur_freq) / 1000 )) max=$(( $(cat /sys/devices/system/cpu/cpu$i/cpufreq/scaling_max_freq) / 1000 )) min=$(( $(cat /sys/devices/system/cpu/cpu$i/cpufreq/scaling_min_freq) / 1000 )) ## retrieves system temp printf '\tCORE %d (MHz): %4s (min %4s, max %4s) TEMPERATURE: %4s MEMORY (MHz): %4s(min %4s, max %4s)\n' $i "$cur" "$min" "$max" "$tempr" "$ddr_cur" "$ddr_min" "$ddr_max" done sleep 0.2 done
1
ответ дан 18 July 2018 в 02:42

У вас есть:

echo -ne "..."\\r

Это означает:

-n: не выводить новую строку в конце, поэтому любая последующая команда запускается в той же строке -e: интерпретировать escape-последовательности обратной косой черты, так: \r становится возвратом каретки, а следующая команда запускает вывод с начала той же строки

. Таким образом, все ваши команды печатаются в одну строку, каждая из которых перезаписывает предыдущий, и видно только последнее. Удалите -ne и \r:

echo " CORE 0 (MHz): $cpu0_cur (min $cpu0_min, max $cpu0_max) TEMPERATURE: $tempr MEMORY (MHz): $ddr_cur (min $ddr_min, max $ddr_max) "

Кроме того, вам не нужны все эти переменные:

while true; do tempr=$(cat /sys/devices/virtual/hwmon/hwmon1/temp1_input) ## retrieves ddr info ddr_cur=$(( $(cat /sys/devices/platform/sunxi-ddrfreq/devfreq/sunxi-ddrfreq/cur_freq) / 1000 )) ddr_max=$(( $(cat /sys/devices/platform/sunxi-ddrfreq/devfreq/sunxi-ddrfreq/max_freq) / 1000 )) ddr_min=$(( $(cat /sys/devices/platform/sunxi-ddrfreq/devfreq/sunxi-ddrfreq/min_freq) / 1000 )) for i in {0..3}; do ## retrieves core info cur=$(( $(cat /sys/devices/system/cpu/cpu$i/cpufreq/scaling_cur_freq) / 1000 )) max=$(( $(cat /sys/devices/system/cpu/cpu$i/cpufreq/scaling_max_freq) / 1000 )) min=$(( $(cat /sys/devices/system/cpu/cpu$i/cpufreq/scaling_min_freq) / 1000 )) ## retrieves system temp printf '\tCORE %d (MHz): %4s (min %4s, max %4s) TEMPERATURE: %4s MEMORY (MHz): %4s(min %4s, max %4s)\n' $i "$cur" "$min" "$max" "$tempr" "$ddr_cur" "$ddr_min" "$ddr_max" done sleep 0.2 done
1
ответ дан 24 July 2018 в 17:38

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

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