Делаю скрипт для LLD программы LM-Sensors
Застрял что то на переменной вроде бы все элементарно , но что то не выходит как надо.
По переменной
get="/usr/bin/sensors"
for chip in $($get -u ........
done <<<$($get -u $chip........
Всё работает хорошо
Ответ получаю
root@ZABBIXSERVER:~# ./1.sh 192.168.1.121 discovery
{"data":[
{"{#CHIP}":"acpitz-virtual-0", "{#SENSOR}":"temp1", "{#NAMETEMP}":"AdapterVirtualdevice", "{#NAMEFAN}":"", " {#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp1", "{#NAMETEMP}":"Physicalid0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp2", "{#NAMETEMP}":"Core0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp3","{#NAMETEMP}":"Core1", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp4", "{#NAMETEMP}":"Core2", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp5", "{#NAMETEMP}":"Core3", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"}]}
Мне надо с указанием $1 ip
get=`zabbix_get -s $1 -k system.run["sensors -u"]`
for chip in $(echo "${get}" ........
done <<<$(echo "${get}" $chip........
Так же работает, но выводит по 2 раза все, неправильно работает цикл.
root@ZABBIXSERVER:~# ./1.sh 192.168.1.121 discovery
{"data":[
{"{#CHIP}":"acpitz-virtual-0", "{#SENSOR}":"temp1", "{#NAMETEMP}":"AdapterVirtualdevice -- Physicalid0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"acpitz-virtual-0", "{#SENSOR}":"temp1", "{#NAMETEMP}":"AdapterVirtualdevice -- Physicalid0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"acpitz-virtual-0", "{#SENSOR}":"temp2", "{#NAMETEMP}":"Core0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"acpitz-virtual-0", "{#SENSOR}":"temp3", "{#NAMETEMP}":"Core1", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"acpitz-virtual-0", "{#SENSOR}":"temp4", "{#NAMETEMP}":"Core2", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"acpitz-virtual-0", "{#SENSOR}":"temp5", "{#NAMETEMP}":"Core3", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp1", "{#NAMETEMP}":"AdapterVirtualdevice -- Physicalid0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"}, {"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp1", "{#NAMETEMP}":"AdapterVirtualdevice -- Physicalid0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"}, {"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp2", "{#NAMETEMP}":"Core0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp3", "{#NAMETEMP}":"Core1", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp4", "{#NAMETEMP}":"Core2", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp5", "{#NAMETEMP}":"Core3", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"}]}
Думаю проблема в отличия. "В двойных кавычках (" ") переменные раскрываются, а в одинарных (' ') -- нет"
Уже как только не перепробовал прописать get= переменную и скобки и кавычки разные и с echo , выходит то строка не экранируется или вообще ничего не выходит или часть строки вместо команды на выполнение...
Общий вид команды
root@ZABBIXSERVER:~# sensors -u
acpitz-virtual-0
Adapter: Virtual device
temp1:
temp1_input: 29.800
temp1_crit: 100.000
coretemp-isa-0000
Adapter: ISA adapter
Physical id 0:
temp1_input: 22.000
temp1_max: 74.000
temp1_crit: 94.000
temp1_crit_alarm: 0.000
Core 0:
temp2_input: 19.000
temp2_max: 74.000
temp2_crit: 94.000
temp2_crit_alarm: 0.000
Core 1:
temp3_input: 22.000
temp3_max: 74.000
temp3_crit: 94.000
temp3_crit_alarm: 0.000
Core 2:
temp4_input: 21.000
temp4_max: 74.000
temp4_crit: 94.000
temp4_crit_alarm: 0.000
Core 3:
temp5_input: 21.000
temp5_max: 74.000
temp5_crit: 94.000
temp5_crit_alarm: 0.000
Скрипт на данный момент
#!/bin/bash
# testov 2019/08/09 v2.9
#При работе скрипта вся нагрузка выполнения ложится на ресурсы железа Заббикс Сервера!
#Скрипт мониторинга для lm-sensors с LLD для Zabbix (серверный вариант)
#Автообнаружение параметров из Lm-sensor
#Ключ: discovery
# $1 - это IP и порт узла подключаемого агента
# $2 - Поиск элементов вывод JSON data, temperature, maxtemp, info,
# $3 - не используется
IFS=$'\n'
JSON="{"data":["
SEP=""
if [[ $2 = "discovery" ]]
then
get=`zabbix_get -s $1 -k system.run["sensors -u"]`
get1="sensors"
for chip in $(echo "${get}" 2>/dev/null|grep -E "^[^:]+$")
do
while read sensor
do
case $sensor in
temp*)
NAMETEMP=`$get $chip | grep -B1 -P "$sensor"| grep -vP "$sensor"| tr -d ':'| tr -d ' '`
UNITS="°C"
;;
fan*)
NAMEFAN=`$get $chip | grep -B1 -P "$sensor"| grep -vP "$sensor"| tr -d ':'| tr -d ' '`
UNITS="RPM"
;;
in*)
NAMEVOLT=`$get $chip | grep -B1 -P "$sensor"| grep -vP "$sensor"| tr -d ':'| tr -d ' '`
UNITS="V"
;;
*)
UINTS=""
;;
esac
JSON=$JSON"$SEP{"{#CHIP}":"$chip", "{#SENSOR}":"$sensor", "{#NAMETEMP}":"$NAMETEMP", "{#NAMEFAN}":"$NAMEFAN", "{#NAMEVOLT}":"$NAM$
SEP=", "
done<<<$(echo "${get}" $chip 2>/dev/null|grep -E "_input:"|tr -d " "|cut -d_ -f1)
done
JSON=$JSON"]}"
echo $JSON
# Получение полной информации по команде sensors lm-sensors.sh[{HOST.CONN},info]
# Получение из всех доступных температур максимальной температуры lm-sensors.sh[{HOST.CONN},maxtemp
else
if [[ $2 = "info" ]]
then
get=`zabbix_get -s $1 -k system.run["sensors"]`
for out in $get
do
echo "${out}"
done
elif [[ $2 = "maxtemp" ]]
then
get1=`zabbix_get -s $1 -k system.run["sensors"]`
maxc=`echo "${get1}" | cut -d"(" -f1 | tr -d ' ' | grep °C | cut -d":" -f2 | cut -f 2 -d + | cut -d"." -f1 | sort -nk1 | tail -n 1`
for out in $maxc
do
echo $out
done
fi
fi
Застрял что то на переменной вроде бы все элементарно , но что то не выходит как надо.
По переменной
get="/usr/bin/sensors"
for chip in $($get -u ........
done <<<$($get -u $chip........
Всё работает хорошо
Ответ получаю
root@ZABBIXSERVER:~# ./1.sh 192.168.1.121 discovery
{"data":[
{"{#CHIP}":"acpitz-virtual-0", "{#SENSOR}":"temp1", "{#NAMETEMP}":"AdapterVirtualdevice", "{#NAMEFAN}":"", " {#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp1", "{#NAMETEMP}":"Physicalid0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp2", "{#NAMETEMP}":"Core0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp3","{#NAMETEMP}":"Core1", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp4", "{#NAMETEMP}":"Core2", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp5", "{#NAMETEMP}":"Core3", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"}]}
Мне надо с указанием $1 ip
get=`zabbix_get -s $1 -k system.run["sensors -u"]`
for chip in $(echo "${get}" ........
done <<<$(echo "${get}" $chip........
Так же работает, но выводит по 2 раза все, неправильно работает цикл.
root@ZABBIXSERVER:~# ./1.sh 192.168.1.121 discovery
{"data":[
{"{#CHIP}":"acpitz-virtual-0", "{#SENSOR}":"temp1", "{#NAMETEMP}":"AdapterVirtualdevice -- Physicalid0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"acpitz-virtual-0", "{#SENSOR}":"temp1", "{#NAMETEMP}":"AdapterVirtualdevice -- Physicalid0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"acpitz-virtual-0", "{#SENSOR}":"temp2", "{#NAMETEMP}":"Core0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"acpitz-virtual-0", "{#SENSOR}":"temp3", "{#NAMETEMP}":"Core1", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"acpitz-virtual-0", "{#SENSOR}":"temp4", "{#NAMETEMP}":"Core2", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"acpitz-virtual-0", "{#SENSOR}":"temp5", "{#NAMETEMP}":"Core3", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp1", "{#NAMETEMP}":"AdapterVirtualdevice -- Physicalid0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"}, {"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp1", "{#NAMETEMP}":"AdapterVirtualdevice -- Physicalid0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"}, {"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp2", "{#NAMETEMP}":"Core0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp3", "{#NAMETEMP}":"Core1", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp4", "{#NAMETEMP}":"Core2", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
{"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp5", "{#NAMETEMP}":"Core3", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"}]}
Думаю проблема в отличия. "В двойных кавычках (" ") переменные раскрываются, а в одинарных (' ') -- нет"
Уже как только не перепробовал прописать get= переменную и скобки и кавычки разные и с echo , выходит то строка не экранируется или вообще ничего не выходит или часть строки вместо команды на выполнение...
Общий вид команды
root@ZABBIXSERVER:~# sensors -u
acpitz-virtual-0
Adapter: Virtual device
temp1:
temp1_input: 29.800
temp1_crit: 100.000
coretemp-isa-0000
Adapter: ISA adapter
Physical id 0:
temp1_input: 22.000
temp1_max: 74.000
temp1_crit: 94.000
temp1_crit_alarm: 0.000
Core 0:
temp2_input: 19.000
temp2_max: 74.000
temp2_crit: 94.000
temp2_crit_alarm: 0.000
Core 1:
temp3_input: 22.000
temp3_max: 74.000
temp3_crit: 94.000
temp3_crit_alarm: 0.000
Core 2:
temp4_input: 21.000
temp4_max: 74.000
temp4_crit: 94.000
temp4_crit_alarm: 0.000
Core 3:
temp5_input: 21.000
temp5_max: 74.000
temp5_crit: 94.000
temp5_crit_alarm: 0.000
Скрипт на данный момент
#!/bin/bash
# testov 2019/08/09 v2.9
#При работе скрипта вся нагрузка выполнения ложится на ресурсы железа Заббикс Сервера!
#Скрипт мониторинга для lm-sensors с LLD для Zabbix (серверный вариант)
#Автообнаружение параметров из Lm-sensor
#Ключ: discovery
# $1 - это IP и порт узла подключаемого агента
# $2 - Поиск элементов вывод JSON data, temperature, maxtemp, info,
# $3 - не используется
IFS=$'\n'
JSON="{"data":["
SEP=""
if [[ $2 = "discovery" ]]
then
get=`zabbix_get -s $1 -k system.run["sensors -u"]`
get1="sensors"
for chip in $(echo "${get}" 2>/dev/null|grep -E "^[^:]+$")
do
while read sensor
do
case $sensor in
temp*)
NAMETEMP=`$get $chip | grep -B1 -P "$sensor"| grep -vP "$sensor"| tr -d ':'| tr -d ' '`
UNITS="°C"
;;
fan*)
NAMEFAN=`$get $chip | grep -B1 -P "$sensor"| grep -vP "$sensor"| tr -d ':'| tr -d ' '`
UNITS="RPM"
;;
in*)
NAMEVOLT=`$get $chip | grep -B1 -P "$sensor"| grep -vP "$sensor"| tr -d ':'| tr -d ' '`
UNITS="V"
;;
*)
UINTS=""
;;
esac
JSON=$JSON"$SEP{"{#CHIP}":"$chip", "{#SENSOR}":"$sensor", "{#NAMETEMP}":"$NAMETEMP", "{#NAMEFAN}":"$NAMEFAN", "{#NAMEVOLT}":"$NAM$
SEP=", "
done<<<$(echo "${get}" $chip 2>/dev/null|grep -E "_input:"|tr -d " "|cut -d_ -f1)
done
JSON=$JSON"]}"
echo $JSON
# Получение полной информации по команде sensors lm-sensors.sh[{HOST.CONN},info]
# Получение из всех доступных температур максимальной температуры lm-sensors.sh[{HOST.CONN},maxtemp
else
if [[ $2 = "info" ]]
then
get=`zabbix_get -s $1 -k system.run["sensors"]`
for out in $get
do
echo "${out}"
done
elif [[ $2 = "maxtemp" ]]
then
get1=`zabbix_get -s $1 -k system.run["sensors"]`
maxc=`echo "${get1}" | cut -d"(" -f1 | tr -d ' ' | grep °C | cut -d":" -f2 | cut -f 2 -d + | cut -d"." -f1 | sort -nk1 | tail -n 1`
for out in $maxc
do
echo $out
done
fi
fi
Comment