РЕШЕНО
Все оказалось очень просто.
#! /bin/bash
# Считываем ip адрес непосредственно из командной строки. Пример ввода ping.sh 192.168.0.1
IP=$1
# Символ : в команде while обеспечивает бесконечное выполнение цикла
while :
do
ping -c 1 -W 1 $IP > $IP.tmp
i=`cat $IP.tmp | grep % |awk '{print $6 }' | awk 'BEGIN {FS = "%"} {print $1}'`
if [ $i != 0 ]
then (date | awk '{print $4}' ; sed -n -e '/\%/p' -e '1p' $IP.tmp) >> $HOME/Документы/iplogs/$IP.log
fi
rm $IP.tmp
done
Все решилось символом null в крманде while и удалось избавиться от строчки перезапускающей весь скрипт полностью, что иногда выливалось в спам системы
![Cheesy :D](https://forum.ubuntu.ru/Smileys/webby/cheesy.gif)
...
Славься "Linux и Unix: програмирование в Shell. Руководство разработчика. Д. Тейнсли 2001" велкий и могучий
Пользователь решил продолжить мысль 05 Апреля 2011, 08:45:23:
Выкладываю мб кому и прогодится, скрипт пинга записывающий лог каждую секунду в файл. формат ввода команды pign.sh HOSTNAME
ping.sh 8.8.8.8
Собственно сам скрипт
#! /bin/bash
IP=$1
# проверяем есть ли в папке файла с таким же IP
if [ -s $HOME/Документы/iplogs/$IP.log ]; then
# если есть то переименовываем имеющийся файл
# вычисляем номер последнего файла с таким же IP
NUMBER=`ls $HOME/Документы/iplogs/ | grep "$IP\_[0-9]\{3\}.log" | awk -F_ '{print substr($2,1,3)}' | sed -n '$p'`
# присваиваем следующий по счету номер параметру отвечающему за номер копии
NUMBER=`expr $NUMBER + 1`
# перемеименуем старый файл с присвоением ему следующего порядкового номера
if [ "$NUMBER" -gt 99 ]; then
mv $HOME/Документы/iplogs/$IP.log $HOME/Документы/iplogs/$IP\_$NUMBER.log
elif [ "$NUMBER" -lt 100 ] && [ "$NUMBER" -gt 9 ]; then
mv $HOME/Документы/iplogs/$IP.log $HOME/Документы/iplogs/$IP\_0$NUMBER.log
else mv $HOME/Документы/iplogs/$IP.log $HOME/Документы/iplogs/$IP\_00$NUMBER.log
fi
fi
# собственно сам скрипт пинга
# Оператор : позволяет бесконечно выполнять цикл
while :
do
ping -c 1 -W 1 $IP > $IP.tmp
i=`cat $IP.tmp | grep % | awk '{print $6 }' | awk 'BEGIN {FS = "%"} {print $1}'`
if [ $i != 0 ]
then (date | awk '{print $4}' ; sed -n -e '/\%/p' -e '1p' $IP.tmp) >> $HOME/Документы/iplogs/$IP.log
fi
rm $IP.tmp
done
Так же прилагается скрипт подсчета потеряных пакетов в логе пинга с зависью результата в файл
#! /bin/bash
# Скрипт подсчитывает общее количество потеряных пакетов логфайла выданого скриптом ping.sh и записывает результат в него же.
cat $HOME/Документы/iplogs/$1.log | grep % | awk '{tot+=$1}; END {print "=======\nИтого потеряно "tot" пакетов"}' >> $HOME/Документы/iplogs/$1.log
P.S.: скрипт ping.sh предполагался как скрипт для запуска в фоне, если вы хотите использовать его в консоли возможно вам будет удобнее если заменить оператор цикла на until break в этом случае при желании можно так же добавить в лог время начала и время конца выполнения скрипта.