Недавно я пытался установить conky с пользовательской конфигурацией, и я хотел использовать функцию, которая, кажется, не extst или, по крайней мере, как говорит Google меня. Я написал простой сценарий bash, который читает временные характеристики процессора, проверяет, является ли он выше или ниже старого значения, и выводит правильное значение для максимального и минимального значений. Дело в том, что иногда я получаю эту ошибку:
/home/ffpp/.conky/temphist.sh: line 25: [:: integer expression expected
, а не temp в качестве ответа. Ошибка возникает почти в каждом , если
, где я сравниваю температуры с lm-сенсорами
, но со случайными повторениями.
Это сценарий, который я написал:
type=$1; #argument import
if [ ! -f /var/tmp/tempmon.var ] #check of existence of old variables
then
hddmin=100
hddmax=0
cpu1min=100
cpu1max=0
cpu2min=100
cpu2max=0
else
. /var/tmp/tempmon.var
fi
case $type in #start of information collection and comparison according to argument
hddmin)
tmp=$(hddtemp /dev/sda -n)
if [ "$tmp" -lt "$hddmin" ]
then
hddmin=$tmp
fi
echo $hddmin
;;
hddmax)
tmp=$(hddtemp /dev/sda -n)
if [ "$tmp" -gt "$hddmax" ]
then
hddmax=$tmp
fi
echo $hddmax
;;
cpu1min)
tmp=$(sensors | grep -oP 'Core\ 0.*?\+\K[0-9.]+' | tr -d . | cut -c-2)
if [ "$tmp" -lt "$cpu1min" ]
then
cpu1min=$tmp
fi
echo $cpu1min
;;
cpu1max)
tmp=$(sensors | grep -oP 'Core\ 0.*?\+\K[0-9.]+' | tr -d . | cut -c-2)
if [ "$tmp" -gt "$cpu1max" ]
then
cpu1max=$tmp
fi
echo $cpu1max
;;
cpu2min)
tmp=$(sensors | grep -oP 'Core\ 1.*?\+\K[0-9.]+' | tr -d . | cut -c-2)
if [ "$tmp" -lt "$cpu2min" ]
then
cpu2min=$tmp
fi
echo $cpu2min
;;
cpu2max)
tmp=$(sensors | grep -oP 'Core\ 1.*?\+\K[0-9.]+' | tr -d . | cut -c-2)
if [ "$tmp" -gt "$cpu2max" ]
then
cpu2max=$tmp
fi
echo $cpu2max
;;
esac
#exported variables to tempmon.var temporary file for future use
echo 'hddmin='"$hddmin"'' > /var/tmp/tempmon.var
echo 'hddmax='"$hddmax"'' >> /var/tmp/tempmon.var
echo 'cpu1min='"$cpu1min"'' >> /var/tmp/tempmon.var
echo 'cpu1max='"$cpu1max"'' >> /var/tmp/tempmon.var
echo 'cpu2min='"$cpu2min"'' >> /var/tmp/tempmon.var
echo 'cpu2max='"$cpu2max"'' >> /var/tmp/tempmon.var
chmod +x /var/tmp/tempmon.var
Я попытался использовать (("$ var1"> "$ var2"))
вместо ["$ var1" -gt "$ var2"]
, в if
сравнений, но обнаружилась похожая ошибка.
Что я могу сделать, чтобы решить эту проблему?
Способ вызова сценария следующий:
bash temphist.sh <temperature to compare>
, например:
bash temphist.sh cpu1min
Здесь я вызываю сценарий, чтобы вернуть мне самую низкую температуру, до которой процессор был до сейчас. Различные типы сравнений следующие:
hddmin #Minimum HDD temp
hddmax #Maximum HDD temp
cpu1min #Minimum CPU core 1 temp
cpu1max #Maximum CPU core 1 temp
cpu2min #Minimum CPU core 2 temp
cpu2max #Maximum CPU core 2 temp
Для этого скрипта необходимы пакеты lm-sensor
и hddtemp
для правильной работы
Я устал. Я думаю, что проблема была в том, как я сохранил значения. Кажется, что conky сделал параллельные вызовы этого скрипта, а иногда переменные не будут сохранены. Так что я разбил все, если в разных файлах .sh, и запустил их отдельно, и сохранил переменные в разных файлах