Проверка значения. Bash. {SOLVED}

Есть скрипт.
Нужно проверить равно ли значение переменной нулю.
if [ $SMTH -eq 0 ]
так не пашет, ибо баш говорит, что

Цитата:
line 5: [: -eq: unary operator expected

Тире перед eq

Тире перед eq убери. Если собрался "скрипеть" обрати внимание на /etc. Много примеров.

grep eq /etc/* -r | grep if

Quote: line 5: [: eq: binary

Цитата:
line 5: [: eq: binary operator expected

Извинения за

Извинения за предыдущий пост.
Вот что работает (пробелы после скобок)

if [ 1 -eq 1 ]; then
echo "hello"
fi

а без тире
eq: binary operator expected

да скобки я

да скобки я ставил. чтобы не было вопросов, вот код.

Цитата:
#! /bin/sh
while [ 1 ]
do
PING=`ping -c 3 -s 1000 ya.ru |grep received | awk -F, '{print $2}' |awk '{print $1}' `
if [ $PING -eq 0 ] ; then
echo "Network is unreachable... \n \t Trying to connect to net... \n Calling dialer... " | `wvdial`
fi

sleep 60

done

пробел убери

пробел убери между ] и ;

Вот кусок из моего скрипта для мониторинга состояния сети:

  if [ -z "$PING_RESULT" ]; then
    if [ $PING_DROPS -eq 0 ]; then
      echo `date` Одиночная ошибка пинга шлюза! Попытка сделать 3 пинга с интервалом 2 секунды... >> $LOGFILE
    else
      echo `date` Повторная проверка контрольными пингами >> $LOGFILE
    fi
  fi

пробел

пробел убрал.
не помогло. все равно вылазит :(

Цитата:
[: -eq: unary operator expected

Возьми

Возьми аргументы в ковычки(")
Вылазит оно по тому, что переменная ПУСТАЯ

Re: Возьми

IsakovAN написал(а):
Возьми аргументы в ковычки(")
Вылазит оно по тому, что переменная ПУСТАЯ

чето я туплю (((
до меня только че дошло, что если сети нету, то
ping -c 3 -s 100 ya.ru
будет выдавать не НОЛЬ, а

ping: unknown host ya.ru

теперь вот думаю, че делать.
я так понимаю, что при таком раскладе в $PING записыватся ничего не будет?

хм...может пойти от обратного? ..

собственно,

собственно, получилось :)
все-таки пошли от противоположного ;)

Цитата:
#! /bin/sh
while [ 1 ]
do
PING=`ping -c 3 -s 1000 ya.ru |grep received | awk -F, '{print $2}' |awk '{print $1}' `
echo $PING
if [ $PING -eq 3 ]; then
echo "Network is Reachable. All is OK."
else
echo "Network is unreachable... \n \t Trying to connect to net... \n Calling dialer... " | `wvdial`
fi

sleep 60

done

работает на ура, вот только один эстетический момент:
можно подавить вывод башем ошибок на экран в скрипте?
дело в том, что если сети нету, то ошибка

  [: -eq: unary operator expected

полюбому вылазит, ибо переменная пустая )
просто некрасиво как-то =)

Перенаправь

Перенаправь вывод ошибок в /dev/null
2> /dev/null

Хм. А то что

Хм. А то что разультат выполнения пинг таким образом получаете красиво?!
ping ...
if [ $? -ne 0 ];then ...

Re: Хм. А то что

IsakovAN написал(а):
Хм. А то что разультат выполнения пинг таким образом получаете красиво?!
ping ...
if [ $? -ne 0 ];then ...

недогнал вопроса :(

Вместо той

Вместо той сложной конструкции, проверяющей вывод ping, проверять его код возврата. Он 0 если пропинговалось и не 0, если пинги не ходят.
ping my.host
if [ $? -ne 0 ];then

Re: Вместо той

KiberGus написал(а):
Вместо той сложной конструкции, проверяющей вывод ping, проверять его код возврата. Он 0 если пропинговалось и не 0, если пинги не ходят.
ping my.host
if [ $? -ne 0 ];then

Цитата:
dcrystal@gentoo /scripts/net $ cat test.sh
#! /bin/sh
while [ 1 ]
do
PING=`ping -c 3 -s 100 ya.ru`
if [ $PING -ne 0 ]; then
echo "network is reachable"
fi

sleep 10
done

dcrystal@gentoo /scripts/net $ ./test.sh
./test.sh: line 5: [: too many arguments

?

Ёперный театр!

Ёперный театр!
control-c control-v когда освоим?
$?
И перечитать man bash!

сорри, я думал

сорри, я думал что знак вопроса - это моя переменная ))
Ну все, тогда решено. :)

Всем спасибо =)

Собака зарыта не там)

Пусть с опозданием на 5 лет, но все же)
>>>PING=`ping -c 3 -s 1000 ya.ru |grep received | awk -F, '{print $2}' |awk '{print $1}' `
Здесь переменной PING присваивается значение символьного типа. Чтобы явно указать на то, что тип переменной - числовой, необходимо использовать следующую конструкцию:
PING=$[`ping -c 3 -s 1000 ya.ru |grep received | awk -F, '{print $2}' |awk '{print $1}' `]

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".