SLAB=76876(cat /proc/meminfo | egrep "Slab:" | awk '{print 768762;}')
оболочка разбирает это на эти слова
SLAB="76876(cat" /proc/meminfo | egrep "Slab:" | awk '{print 768762;}')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ..................... ...................^
Где символы «(cat» являются частью значения временной переменной среды SLAB.
Затем оболочка пытается вызвать /proc/meminfo как команда.
Это оставляет непарную закрывающую скобку, вызывающую синтаксическую ошибку awk.
мне непонятно с какой целью SLAB=$$
и (кот ...)
является. Вы пытаетесь установить переменную SLAB для хранения значения, которое объединяет pid и результат кода в скобках?
Мое решение: я бы построил nagios -е
команда по частям:
nagios_cmd=""
для var в Slab MemTotal; делать
nagios_cmd+=$(printf '%s="${$}$(awk '\''/%s:/ {print $2}'\'' /proc/meminfo)"; ' $var $var)
сделано
nagios_cmd+='awk -v s="$Slab" -v m="$MemTotal" '\''BEGIN {print 100*s/m}'\'
объявить -p nagios_cmd
Это выводит
объявить -- nagios_cmd="Slab=\"\${\$}\$(awk '/Slab:/ {print \$2}' /proc/meminfo)\"; MemTotal=\"\${\$}\ $(awk '/MemTotal:/ {print \$2}' /proc/meminfo)\"; awk -v s=\"\$Slab\" -v m=\"\$MemTotal\" 'BEGIN {print 100*s /м}'"
который показывает вам, что оболочка защитит все персонажи, которые нуждаются в защите.
Затем вы вызываете проверку nagios, например:
/usr/lib64/nagios/plugins/check_generic.pl -n "slab_mem" -e "$nagios_cmd" -w '>50' -c '>80' -p "slab_mem"
# ................................................................ ........^^^^^^^^^^^^^^
Это можно записать как одну команду awk без необходимости использования временных переменных оболочки:
nagios_cmd='awk -F":" -v pid="$$" '\''
$1 == "Плита" {s = pid $2}
$1 == "Общая память" {m = pid $2}
КОНЕЦ {печать 100*с/м}
'\'' /proc/meminfo'
Или, чтобы помочь с цитированием, вот документ:
nagios_cmd=$(кот <<'END_CMD'
awk -F":" -v pid="$$" '
$1 == "Плита" {s = pid $2}
$1 == "Общая память" {m = pid $2}
КОНЕЦ {печать 100*с/м}
' /прок/меминфо
END_CMD
)