Я хочу относиться с этим вопросом следующему сообщению, где я получил 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
Мне кажется, что левый операнд в «if test» пуст.
О , почему может быть пустое значение, я предлагаю вам запустить команду Nagios из оболочки и посмотрите, что она делает. Каков его результат? Выполните все шаги до вывода:
/ usr / local / nagios / libexec / check_nt -H $ 2 -p 12489 -s ПАРОЛЬ -v USEDDISKSPACE -l $ 4
/ usr / local / nagios / libexec / check_nt - H $ 2 -p 12489 -s ПАРОЛЬ
-v USEDDISKSPACE -l $ 4 | awk -F "-" '{print $ 4}'
/ 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: исправлено несколько опечаток