LINUX.ORG.RU

учу баш, подскажите...


0

1

Как можно выполнять действие, если ip адрес в сети, не пингуется?
Например, скрипт на этой машине продолжает выполнятся если ip другой машины не пингуется.

Спасибо.


>Например, скрипт на этой машине продолжает выполнятся если ip другой машины не пингуется.

На моей машине выполняются скрипты, хотя многие IP в интернете сейчас не пингуются.

zombiegrinder_6000
()

>> Например, скрипт на этой машине продолжает выполнятся если ip другой машины не пингуется.

ping host.org || echo 'fail'

GotF ★★★★★
()
Ответ на: комментарий от GotF

nohup, screen как этим пользоваться? ман вообще никакой

ping host.org || echo 'fail'
похоже на то что нужно, а дальше что?

получил я fail и что?
как скрипту знать что выполнять при fail ?

Averus
() автор топика
Ответ на: комментарий от AITap

56.57.166 icmp_seq=3 Destination Host Unreachable
From 121.156.57.166 icmp_seq=4 Destination Host Unreachable

просто 4 раза пишет что хост недоступен и толку....

подскажите через этот способ -
ping host.org || echo 'fail'

это же универсально, не только для пинга.

Averus
() автор топика
Ответ на: комментарий от Averus

> просто 4 раза пишет что хост недоступен и толку....
Только что проверил, он делает то, что описано:

[23:32:44][aitap@Tarkus ~]> if ping -c4 127.0.0.1 >/dev/null; then echo yes; else echo no; fi
yes
[23:32:56][aitap@Tarkus ~]> if ping -c4 192.168.1.200 >/dev/null; then echo yes; else echo no; fi
no
[23:33:10][aitap@Tarkus ~]>

это же универсально, не только для пинга.

`if' тоже универсален.


подскажите через этот способ -

ping somehost || (
mycommand1
mycommand2
mycommand3
)

AITap ★★★★★
()
Ответ на: комментарий от Averus

>nohup, screen как этим пользоваться

Никак, ты бы писал вразумительнее, что тебе требуется.

zombiegrinder_6000
()
Ответ на: комментарий от Averus

>> подскажите через этот способ

Скажу по секрету, что этот способ от того почти не отличается:

if [[ ! $(ping example.org) ]]; then
    some_command
fi

и

ping example.org || some_command

являются синонимами.

Думаю, тебе нужно почитать Advanced Bash Scripting Guide. Русская версия книги несколько устарела, но по-прежнему более чем пригодна. Найти можно легко, распространяется бесплатно.

GotF ★★★★★
()
Ответ на: комментарий от wlan

тему читали? я понять хочу.

ping somehost || (
mycommand1
mycommand2
mycommand3
)



(ping host.org &&
Пингуется.
) || (
halt
не пингуется
В этом месте вы можете написать что угодно!
)


почему такое должно вдруг работать?

Averus
() автор топика
Ответ на: комментарий от GotF

if [[ ! $(ping example.org) ]]; then
some_command
fi



как это работает? почему выполняются разные команды?

Averus
() автор топика
Ответ на: комментарий от Averus

> я понять хочу.
Почитайте ABSG, как советовали выше.

ping somehost

Выполнить команду

||

Следующий блок команд выполнится, если предыдущая команда завершится с ненулевым кодом выхода (переменная $?).

( ... )

Запустить шелл и выполнить в нём блок команд.

почему выполняются разные команды?

Потому что при неудачном пинге программа ping возвращает (код выхода, переменная $?) не 0 (удачное завершение), а 1. Подробнее man ping:

If ping does not receive any reply packets at all it will exit with code 1. If a packet count and deadline are both specified, and fewer than count packets are
received by the time the deadline has arrived, it will also exit with code 1. On other error it exits with code 2. Otherwise it exits with code 0. This makes it pos‐
sible to use the exit code to see if a host is alive or not.

AITap ★★★★★
()
Ответ на: комментарий от Averus

> не работает
Логично, ибо по-умолчанию ping пингует вечно. Подробнее man ping, опция -c

AITap ★★★★★
()
Ответ на: комментарий от GotF

>вляются синонимами.

да, но второй способ гораздо лаконичнее и красивее

lazyklimm ★★★★★
()
Ответ на: комментарий от Averus

«Advanced Bash Scripting Guide» спасибо, только бы время найти... а то кризис понимаете ли, грузят немеренно.

Averus
() автор топика
Ответ на: комментарий от Averus

Покажите, как проверяете $?. Возможно, его значение успевает измениться?

AITap ★★★★★
()
Ответ на: комментарий от Averus

> а куда писать действие в противном случае?

Думаю это правильнее назвать «в приятном случае».

sin_a ★★★★★
()
Ответ на: комментарий от Averus

опять не катит, а как если true_cmd надо много комманд, ошибку выдает и все тут - || нет такого символа, ошибка синтаксиса

Averus
() автор топика
Ответ на: комментарий от Averus

Выше уже написали жеж, причём два врианта:

ping &&(
true_cmd1
true_cmd2
) ||(
false_cmd1
false_cmd2
)

либо

if ping ; then
true_cmd1
true_cmd2
else
false_cmd1
false_cmd2
fi

Почитайте какую-нибудь книжку по программированию для начинающих, пусть даже на примере VisualBasic, потом беритесь за ABS.

anon_666
()
Ответ на: комментарий от anon_666

понимаю со стороны глупо, но у меня почему-то 111.111.111.111 идет как рабочий, вот и пробую разные варианты.

Averus
() автор топика
Ответ на: комментарий от Averus

потому, что уже спать охота жутко и перепутал стороны :) спасибо.

Averus
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.