URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5112
[ Назад ]

Исходное сообщение
"Жив ли хост"

Отправлено Luna , 03-Фев-06 19:19 
Ребята, помогите, чувствую себя полной дурой!

В локальной сети нужно из скрипта проверить - живой ли хост. Сеть не нагружена, одного icmp echo-request хватит.  Но вот с проверкой как-то у меня неуклюже получается.

сейчас делаю так:

#!/bin/sh
ping -n -q -c 1 -t 1 $host > /dev/null 2>&1
if [ $? -eq 0 ] ; then
   # Здесь все, если хост живой
else
   # А здесь если не живой
fi

Конечно, это работает. Но мне не нравится конструкция:
ping -n -q -c 1 -t 1 $host > /dev/null 2>&1
if [ $? -eq 0 ] ; then

Хочется что-то типа:

if [ ping ......... ] ; then .....

Не получается.  Точнее, что ни делаю - а либо ошибка, либо всегда false (хост не живой).


А хочется совсем красивости:

#!/bin/sh
is_alive() {
   return ping -n -q -c 1 -t 1 $1 > /dev/null 2>&1    # :)))
}

if [ is_alive $host ] ; then
...


FreeBSD 6.0-STABLE, если это важно.


Содержание

Сообщения в этом обсуждении
"Жив ли хост"
Отправлено Андрей , 03-Фев-06 21:20 
вот такой вариант не подойдёт ?

is_alive()
{
   ping -n -q -c 1 -t 1 $1 > /dev/null 2>&1
   [ $? = 0 ] && echo "alive" || echo ""
}

if [ `is_alive $host` ]
then
    echo "Alive"
else
    echo "Died"
fi


"Жив ли хост"
Отправлено Luna , 03-Фев-06 23:35 
>вот такой вариант не подойдёт ?

Нет.  Потому, что я - дуреха, а ты повелся :)  Уперлась я в это [ (оно же test), которое тут нафиг не нужно :)

#!/bin/sh
is_alive()
{
        ping -q -c 1 -t 1 -n $1 > /dev/null 2>&1
}

if is_alive $1 ; then
        echo good
else
        echo bad
fi


"Жив ли хост"
Отправлено chip , 04-Фев-06 12:55 
>>вот такой вариант не подойдёт ?
>
>Нет.  Потому, что я - дуреха, а ты повелся :)  

Забавная логика :)

>Уперлась я в это [ (оно же test), которое тут нафиг
>не нужно :)

Именно, можно еще проще:

#!/bin/sh
ping -q -c 1 -t 1 -n $1 > /dev/null 2>&1 && echo good || echo bad

Аналогично получается однострочник (домашнее задание :-D)


"Жив ли хост"
Отправлено BigShadow , 10-Мрт-06 12:55 
>Хочется что-то типа:
>
>if [ ping ......... ] ; then .....
>
>Не получается.  Точнее, что ни делаю - а либо ошибка, либо
>всегда false (хост не живой).

Скобки квадратные уберите и все будет хоккей