Ребята, помогите, чувствую себя полной дурой!В локальной сети нужно из скрипта проверить - живой ли хост. Сеть не нагружена, одного 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, если это важно.
вот такой вариант не подойдёт ?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
>вот такой вариант не подойдёт ?Нет. Потому, что я - дуреха, а ты повелся :) Уперлась я в это [ (оно же 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
>>вот такой вариант не подойдёт ?
>
>Нет. Потому, что я - дуреха, а ты повелся :)Забавная логика :)
>Уперлась я в это [ (оно же test), которое тут нафиг
>не нужно :)Именно, можно еще проще:
#!/bin/sh
ping -q -c 1 -t 1 -n $1 > /dev/null 2>&1 && echo good || echo badАналогично получается однострочник (домашнее задание :-D)
>Хочется что-то типа:
>
>if [ ping ......... ] ; then .....
>
>Не получается. Точнее, что ни делаю - а либо ошибка, либо
>всегда false (хост не живой).Скобки квадратные уберите и все будет хоккей