Nagios колотят синтаксическую ошибку

Я хочу относиться с этим вопросом следующему сообщению, где я получил Skript: Сообщение со Сценарием

Я использую Bash 4.1.2 (1) и когда я пытаюсь выполнить сценарий, я получаю следующие сообщения об ошибках:

 ./check_disk_by_size.sh: Zeile 9: [: ==: Einstelliger (unärer) Operator erwartet.
(standard_in) 1: syntax error
./check_disk_by_size.sh: Zeile 13: [: -eq: Einstelliger (unärer) Operator erwartet.
(standard_in) 1: syntax error
(standard_in) 1: syntax error
./check_disk_by_size.sh: Zeile 16: [: Zu viele Argumente.
(standard_in) 1: syntax error
./check_disk_by_size.sh: Zeile 19: [: -eq: Einstelliger (unärer) Operator erwartet.

У меня есть основные пишущие сценарий Bash события, но каждый раз, когда я изменяю что-то, я получаю еще больше ошибок. Я не могу принести его для работы.

РЕДАКТИРОВАНИЕ 1: вот сценарий

#!/bin/bash

FREESPACE=`/usr/local/nagios/libexec/check_nt -H $2 -p 12489 -s PASSWORD \
-v USEDDISKSPACE -l $4 | awk -F"- " '{ print $4 }' | awk -F "|" '{ print $1 }'`

SIZE=`echo $FREESPACE | awk '{ print $2 }'`
UNIT=`echo $FREESPACE | awk '{ print $3 }'`

if [ $UNIT == "Gb" ]; then
    SIZE=`echo $SIZE \* 1024 | bc`
fi

if [ `echo "$SIZE >= $6" | bc` -eq 1 ]; then
    echo "$4:\_Drive_Space OK - $FREESPACE"
    exit 0
elif [ `echo "$SIZE < $6" | bc` -eq 1 -a `echo "$SIZE > $8" | bc` -eq 1 ]; then
    echo "$4:\_Drive_Space WARNING - $FREESPACE"
    exit 1
elif [ `echo "$SIZE <= $8" | bc` -eq 1 ]; then
    echo "$4:\_Drive_Space CRITICAL - $FREESPACE"
    exit 2
fi

Я запускаю скрипт как это:

./check_disk_by_size -H [IP_Adress] -l [DRIVE] -w [INTEGER] -c [INTEGER] -p [PORT] -s [PASSWORD]

Пример:

./check_disk_by_size -H 192.168.1.110 -l c -w 10240 -c 8192 -p 12489 -s PASSWORD

ОБНОВЛЕНИЕ

Спасибо за помощь! Это работает теперь :) Сценарий похож на это теперь:

#!/bin/bash
#

FREESPACE=`/usr/local/nagios/libexec/check_nt -H $2 -p 12489 -s Nag4AlphA \
-v USEDDISKSPACE -l $4 | awk -F"- " '{ print $4 }' | awk -F "|" '{ print $1 }'`

SIZE=`echo $FREESPACE | awk '{ print $2 }'`
UNIT=`echo $FREESPACE | awk '{ print $3 }'`

if [ "$UNIT" == "Gb" ]; then
    SIZE="$(echo "$(($SIZE * 1024))" | bc)"
fi


echo $SIZE
echo " " 
echo $6
echo " "
echo $8

if [ $SIZE -ge $6 ]; then
    echo "$4:\_Drive_Space OK - $FREESPACE"
    exit 0
elif [ $SIZE -lt $6 -a $SIZE -gt $8 ]; then
    echo "$4:\_Drive_Space WARNING - $FREESPACE"
    exit 1
elif [ $SIZE -lt $8 ]; then
    echo "$4:\_Drive_Space CRITICAL - $FREESPACE"
    exit 2
fi
0
задан 13 April 2017 в 15:14
1 ответ

Мне кажется, что левый операнд в «if test» пуст.

О , почему может быть пустое значение, я предлагаю вам запустить команду Nagios из оболочки и посмотрите, что она делает. Каков его результат? Выполните все шаги до вывода:

  1. / usr / local / nagios / libexec / check_nt -H $ 2 -p 12489 -s ПАРОЛЬ -v USEDDISKSPACE -l $ 4

  2. / usr / local / nagios / libexec / check_nt - H $ 2 -p 12489 -s ПАРОЛЬ -v USEDDISKSPACE -l $ 4 | awk -F "-" '{print $ 4}'

  3. / usr / local / nagios / libexec / check_nt -H $ 2 -p 12489 -s ПАРОЛЬ -v ПРОБЕЛ ИСПОЛЬЗОВАНИЯ -l $ 4 | awk -F "-" '{print $ 4}' | awk -F "|" '{print $ 1}'

О самом скрипте Я «любезно предлагаю»:

  • ВСЕГДА заключать переменные в двойные кавычки, ВЕЗДЕ
  • ВСЕГДА предпочитаю $ ( ) вместо обратных кавычек для расширения оболочки, ВЕЗДЕ
  • ВСЕГДА заключайте расширение оболочки в двойные кавычки, ВЕЗДЕ

Конечно, исключения применяются редко, например, когда вы проверяете числовые значения .

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

Orignal:

if [ $UNIT == "Gb" ]; then
    SIZE=`echo $SIZE \* 1024 | bc`
fi

Hardenal:

if [ "$UNIT" == "Gb" ]; then
    SIZE="$(echo "$SIZE * 1024" | bc)"
fi

У меня никогда не было никаких проблем после того, как я начал постоянно следовать этим rules.

Вот хорошая статья о передовых методах написания сценариев Bash: http://www.davidpashley.com/articles/writing-robust-shell-scripts/ и еще одна о расширении оболочки ] http://mywiki.wooledge.org/BashFAQ/082

UDPATE: исправлено несколько опечаток

4
ответ дан 4 December 2019 в 11:48

Теги

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