На самом деле это единственный раздел про unix на этом форуме
Модераторы: /dev/random , Модераторы разделов
farex
Сообщения: 497
ОС: Slackware 12.2, Archlinux
Сообщение
farex » 03.10.2009 17:57
Помогите дописать скрипт.
Срипт должен бесконечно пинговать удлаленный хос, при удачном возвращении $? = 0 должен выдать сообщения Exit
Код: Выделить всё
#!/bin/bash
ping -s1 -c1 -i1 192.168.1.3
if [ "$?" = "1" ]; then again=yes
while [ "$again" = "yes" ]
do
ping -s1 -c1 -i1 192.168.1.3
done
echo "Exit"
fi
Не пинайте если где накосячил, это мой мервый опыт написания скриптов...
Сыграем?
[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Жив"
Cra3y
Сообщения: 80
ОС: Debian
Сообщение
Cra3y » 03.10.2009 18:22
Можно проще:
Код: Выделить всё
#!/bin/sh
# подставьте ваш адрес
TGT='www.ya.ru'
while ! ping -c1 -s1 $TGT 2>&1 > /dev/null; do
echo bad;
done;
echo Exit
HP G62 (AMD Phenom II x3 1.8GHz 4GB DDR3 Ram) / Debian 8 amd64
farex
Сообщения: 497
ОС: Slackware 12.2, Archlinux
Сообщение
farex » 03.10.2009 18:30
#!/bin/sh
# подставьте ваш адрес
TGT='www.ya.ru'
while ! ping -c1 -s1 $TGT 2>&1 > /dev/null; do
echo bad;
done;
echo Exit
Если не затрудни не могли бы вы объяснить конструкцию.
Код: Выделить всё
while ! ping -c1 -s1 $TGT 2>&1 > /dev/null; do
echo bad;
Сыграем?
[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Жив"
lava
Сообщения: 155
ОС: archer
Сообщение
lava » 03.10.2009 18:38
ещё такой вариант:
Код: Выделить всё
false; while [ "$?" -ne "0" ]; do ping -c1 -W1 192.168.1.3 &>/dev/null; done; echo Done
farex писал(а): ↑ 03.10.2009 18:30
Если не затрудни не могли бы вы объяснить конструкцию.
Проверяться будет сам код возврата функции ping. 0 возвращается только в случае успешного пинга. Правда, echo bad, мне кажется, вам там не надо.
TGT - переменная, в которой хранится адрес, который надо пинговать.
Кстати, в Вашем варианте, если именно его дорабатывать, надо дописывать проверку кода возврата и установку вашей управляющей переменной цикла в значение, отличное от "yes"
farex
Сообщения: 497
ОС: Slackware 12.2, Archlinux
Сообщение
farex » 03.10.2009 18:41
false; while [ "$?" -ne "0" ]; do ping -c1 -W1 192.168.1.3 &>/dev/null; done; echo Done
тоже норм., в этом варианте мне все понятно.
Спс за разъяснения +)
Сыграем?
[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Жив"
Cra3y
Сообщения: 80
ОС: Debian
Сообщение
Cra3y » 03.10.2009 18:47
farex писал(а): ↑ 03.10.2009 18:30
Если не затрудни не могли бы вы объяснить конструкцию.
Код: Выделить всё
while ! ping -c1 -s1 $TGT 2>&1 > /dev/null; do
echo bad;
while ! ping -c1 -s1 $TGT 2>&1 > /dev/null; do # Пока ping выполняется с ошибкой
echo bad; # Выводить 'bad'
Вместо $TGT подставляется содержимое переменной TGT
2>&1 > /dev/null является объединением stderr и stdout с перенаправлением в /dev/null (так я скрыл сообщения от ping)
HP G62 (AMD Phenom II x3 1.8GHz 4GB DDR3 Ram) / Debian 8 amd64
lava
Сообщения: 155
ОС: archer
Сообщение
lava » 03.10.2009 18:50
farex , кстати, порекомендую занятную штукенцию - libnotify.
В дебиане после установки пакета libnotify-bin появляется командочка
которую очень удобно использовать, если хотите отвлечься от консольного окошка со скриптом.
Cra3y писал(а): ↑ 03.10.2009 18:47
2>&1 > /dev/null является объединением stderr и stdout с перенаправлением в /dev/null (так я скрыл сообщения от ping)
позволю себе немного откорректировать: перенаправляем stderr на stdout, а потом перенаправляем stdout в хлам.
не проще ли &>/dev/null ? или, возможно, этот вариант не переносим на не-bash интерпретаторы?