Автор Гілка: шелл програмування  (Прочитано 5946 раз)

Відсутній gagarin

  • Дописувач
  • **
  • дописів: 88
  • Карма: +0/-0
  • KILL BILL!! :)
Я хочу написати простенький скрипт.
Він має запускатися щоп'ятьхвилин і робити пінг із заданим хостом.
Якщо пінг є, він має записувати до файлу дату та ping time.
Якщо нема, він має записувати до того-ж файлу на літери "Х", і ще до одного файлу має писатися час, коли пінгу нема.
Сподіваюся, я достатньо добре виклав думки :).

Отже які є проблеми:
  • Проблема номер один. Коли я запускаю програму ping, статистика виводить інформацію, яка мені в даній ситуації не потрідна:ping 172.16.100.1
    PING 172.16.100.1 (172.16.100.1) from 172.16.120.131 : 56(84) bytes of data.
    64 bytes from 172.16.100.1: icmp_seq=1 ttl=64 time=396 ms
    64 bytes from 172.16.100.1: icmp_seq=2 ttl=64 time=388 ms
    64 bytes from 172.16.100.1: icmp_seq=3 ttl=64 time=378 ms
    64 bytes from 172.16.100.1: icmp_seq=4 ttl=64 time=401 ms
    64 bytes from 172.16.100.1: icmp_seq=5 ttl=64 time=411 ms

    --- 172.16.100.1 ping statistics ---
    5 packets transmitted, 5 received, 0% loss, time 4031ms
    rtt min/avg/max/mdev = 378.082/395.313/411.911/11.559 ms
    А мене цікавить лише наявність чи видсутність пінгу, і при наявності лише маленькі фрагментики рядка.
    Так от, як мені розділити рядок на складові?
    І ще одне. Як мені пропустити непотрібні рядки(1-й і 2-й)?

  • Проблема номер два. Як працювати із КРОНом? Мани я читав, але нічого путнього не знайшов :(...
_________________________________________________________
У відповідь я хочу отримати не лістінг скрипта, а відпвіді на запитання, поставлені мною. А лістінг я вам сам потім приведу:)
« Змінено: 2005-04-20 20:12:35 від dr-jazz »
Ото воно так! (c)

Відсутній tech

  • Письменник
  • *****
  • дописів: 586
  • Карма: +1/-0
  • Гигик
Re: шелл програмування
« Відповідей #1 : 2005-04-21 06:15:22 »
Поки Володимир мене не випередив :)

#!/bin/bash

OUT=ping.out.$$
HOST=www.google.com

echo Log started `date "+%m/%d/%y %X"`>> $OUT

while : ; do

t=`ping -c 1 $HOST 2>/dev/null | awk '{if (NR == 2) print $7 " " $8}'`
d=`date "+%X"`

if (echo $t | grep time >/dev/null); then
echo -n "$d     " >> $OUT
echo "$t" >> $OUT
else
echo -n "$d     " >> $OUT
echo X >> $OUT
fi

sleep 2
done

Це працює без крона. Якщо захочете вписати це в крон, закоментуйте while цикл.
« Змінено: 2005-04-21 07:21:42 від tech »

Відсутній gagarin

  • Дописувач
  • **
  • дописів: 88
  • Карма: +0/-0
  • KILL BILL!! :)
Re: шелл програмування
« Відповідей #2 : 2005-04-22 10:07:22 »
t=`ping -c 1 $HOST 2>/dev/null | awk '{if (NR == 2) print $7 " " $8}'`Поясніть будь ласка цей рядок.
Що тут робиться, як і навщо?
Я зрозумів лише ping -c 1 $HOST :)
Ото воно так! (c)

dusoft

  • Гість
Re: шелл програмування
« Відповідей #3 : 2005-04-22 11:05:40 »
Хоч я і незнаю awk, але логічно мабуть що це значить дати вивід команди ping на вхід команди awk, яка в свою чергу видасть сьомий та восьмий підрядок, з другого рядку виводу команди ping.

Відсутній hse

  • Графоман
  • ****
  • дописів: 473
  • Карма: +0/-0
  • Gentoo Linux
Re: шелл програмування
« Відповідей #4 : 2005-04-22 14:49:30 »
t=`ping -c 1 $HOST 2>/dev/null | awk '{if (NR == 2) print $7 " " $8}'`Поясніть будь ласка цей рядок.
Що тут робиться, як і навщо?
Я зрозумів лише ping -c 1 $HOST :)

2>/dev/null       - відфільтровує стандартні помилки
| awk            - скеровує стандартний вивід на вхід awk
'{if (NR == 2) print $7 " " $8}'      - вивидить з 2гого рядку if (NR == 2) 7 і 8 "слова" print $7 " " $8
бушократія - цинічний помаранчевий геноцид, витравлювання Української Нації, плюс мікрософтизація всієї країни.

Відсутній gagarin

  • Дописувач
  • **
  • дописів: 88
  • Карма: +0/-0
  • KILL BILL!! :)
Re: шелл програмування
« Відповідей #5 : 2005-04-28 23:01:56 »
А що саме означає:
"Відфільтровує стандартні помилки"
Прошу пробачити мені мою неосвідченість :)
Ото воно так! (c)

dusoft

  • Гість
Re: шелл програмування
« Відповідей #6 : 2005-04-29 01:43:10 »
В юніксі існує stdin, stdout та stderr, на stdout програми виводять звичайні повідомлення, а на stderr виводять повідомлення про помилки. Дескриптори цих файлів завжди є відповідно 0, 1, 2. Таким чином, конструкцією 2>/dev/null, ми вказуємо що всі повідомлення, які програма пише в stderr - ми перенаправляємо в /dev/null бо вони нас не цікавлять.

Відсутній gagarin

  • Дописувач
  • **
  • дописів: 88
  • Карма: +0/-0
  • KILL BILL!! :)
Re: шелл програмування
« Відповідей #7 : 2005-04-29 08:22:47 »
В юніксі існує stdin, stdout та stderr, на stdout програми виводять звичайні повідомлення, а на stderr виводять повідомлення про помилки. Дескриптори цих файлів завжди є відповідно 0, 1, 2. Таким чином, конструкцією 2>/dev/null, ми вказуємо що всі повідомлення, які програма пише в stderr - ми перенаправляємо в /dev/null бо вони нас не цікавлять.

Дякую за відповідь. Буду щось клацати... :)
Але ще одне запитання:
Що є стандартною поилкою для програми ping?
Я думаю - щось на зразок "...destination host unreachable", правильно?
« Змінено: 2005-04-29 08:34:52 від dr-jazz »
Ото воно так! (c)

Денис Крупенік

  • Гість
Re: шелл програмування
« Відповідей #8 : 2005-05-13 16:39:46 »

Що є стандартною поилкою для програми ping?
Я думаю - щось на зразок "...destination host unreachable", правильно?
А навіщо вам ті помилки? В мене працює десь приблизно так:

$ t=`ping -c 1 -t 1 nonexistent.host 2>/dev/null | awk '{if (NR==2) print $7 " " $8}'`; [ " " == "$t" -o "" == "$t" ] && echo "FAILED" || echo "'$t'"
FAILED

$ t=`ping -c 1 -t 1 192.168.254.2 2>/dev/null | awk '{if (NR==2) print $7 " " $8}'`; [ " " == "$t" -o "" == "$t" ] && echo "FAILED" || echo "'$t'"
'time=0.248 ms'

Відсутній gagarin

  • Дописувач
  • **
  • дописів: 88
  • Карма: +0/-0
  • KILL BILL!! :)
Re: шелл програмування
« Відповідей #9 : 2005-07-07 19:23:01 »
Якщо я вже підняв цю тему, то може хтось змені може порадити якусь  літературу щодо шелл програмування?
Було б непогано, якби в електронному вигляді та українською чи російською.
Ото воно так! (c)

Відсутній old

  • Дописувач
  • **
  • дописів: 60
  • Карма: +0/-0
  • Що новенького?

Відсутній tech

  • Письменник
  • *****
  • дописів: 586
  • Карма: +1/-0
  • Гигик
Re: шелл програмування
« Відповідей #11 : 2005-07-08 21:10:24 »
Можете йти слідом за паном miwa, заодно будете підганяти його і вказувати на те що не зрозуміло:
http://docs.linux.org.ua/dlou/index.php/Bash_beginners_guide
:)
« Змінено: 2005-07-08 21:10:59 від tech »