Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
mayor
- сержант
- Сообщения: 215
- Зарегистрирован: 2008-09-06 10:11:49
-
Контактная информация:
Непрочитанное сообщение
mayor » 2008-09-06 10:22:22
нарыл у вас тут скриптик:
Код: Выделить всё
#! /bin/sh
ping="/sbin/ping"
# время
date_time="`date +%H:%M:%S`"
# дата
date="`date +%d-%m-%Y`"
date="`date | awk '{print $1,$2,$3,$4,$5}'`"
# часы минуты
date_hour="`date +%H`"
date_minute="`date +%M`"
# Пингуемые хосты
ISP="***.***.***.***"
# Создание файлов если их нет
if [ ! -f hour.txt ]; then
echo "$date_hour" > hour.txt
echo "$date_minute" > minute.txt
echo "запуск 1-й раз" > interval.txt
exit 0;
fi
# Пингуем провайдера
$ping -q -c 4 ${ISP} >/dev/null 2>&1
# если результат true
if [ $? -eq 0 ]; then
echo "Провайдер Lecos - $ISP доступен."
echo "isp" > hour.txt;
echo "isp" > minute.txt;
exit 0;
else
echo "Ошибка связи. Провайдер Lecos - $ISP не доступен" 2>/dev/null
# Проверка данных txt файла. Если есть запись "true isp"
# Значит перед этим был инет. Сохраняем значения времени
# отсутствия Инета и выходим
result_txt="`cat minute.txt`"
if [ $result_txt = "isp" ]
then
echo "$date_hour" > hour.txt
echo "$date_minute" > minute.txt
exit 0;
fi
# Последнее время проверки(предыдущий раз)
old_hour="`cat hour.txt`"
old_minute="`cat minute.txt`"
# Текущая разница времени
end_hour="`expr $date_hour - $old_hour`"
end_minute="`expr $date_minute - $old_minute`"
# Если разница времени(минут) меньше 0
# 15.45-16.10 rez_m=60-45+10 rez_h=0
if [ $end_minute -lt 0 ]
then
end_hour="0";
end_minute="` 60 - $old_minute + $date_minute`";
fi
# Если разница времени равна 0.Выход
if [ $end_hour -eq 0 -a $end_minute -eq 0 ]
then exit 0;
fi
echo "-------------------------------
Дата: $date
Время: $date_time
Время отсутствия: ${old_hour}:${old_minute} - ${date_hour}:${date_minute}
Всего $end_hour часов $end_minute минут.
-------------------------------" >> interval.txt
# Интервалы отсутствия времени
interval="`cat interval.txt`"
echo "$date_hour" > hour.txt
echo "$date_minute" > minute.txt
echo
echo "Интервалы времени отсутствия Интернета: "
echo "$interval"
exit 1;
fi
за который автору спс, все вроде понятно кроме вот этих операторов, если не трудно переведите вот это:
и вот это:
mayor
-
Хостинг HostFood.ru
-
Хостинг HostFood.ru
Тарифы на хостинг в России, от 12 рублей:
https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.:
https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах:
https://www.host-food.ru/domains/
-
mayor
- сержант
- Сообщения: 215
- Зарегистрирован: 2008-09-06 10:11:49
-
Контактная информация:
Непрочитанное сообщение
mayor » 2008-09-06 11:44:51
- смысл этого понял, проверям есть ли такой файл (правда не понятно где ищем)
mayor
-
mayor
- сержант
- Сообщения: 215
- Зарегистрирован: 2008-09-06 10:11:49
-
Контактная информация:
Непрочитанное сообщение
mayor » 2008-09-06 11:52:37
все понял проверяем равен ли результат нулю т.е. $? - это результат выполнения команды, и последняя непонятка: что мы делаем этим:
mayor
-
zg
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Непрочитанное сообщение
zg » 2008-09-06 11:56:56
mayor писал(а):что мы делаем этим:
глушим любой вывод на экран
zg
-
mayor
- сержант
- Сообщения: 215
- Зарегистрирован: 2008-09-06 10:11:49
-
Контактная информация:
Непрочитанное сообщение
mayor » 2008-09-06 15:14:36
zg писал(а):mayor писал(а):что мы делаем этим:
глушим любой вывод на экран
2>&1
деж про это прочитать? не могу найти, как понять что это типа чтобы в консоль вывод не ишол
mayor
-
f_andrey
- майор
- Сообщения: 2651
- Зарегистрирован: 2007-12-26 1:22:58
- Откуда: СПб
-
Контактная информация:
Непрочитанное сообщение
f_andrey » 2008-09-06 15:21:47
mayor писал(а):zg писал(а):деж про это прочитать? не могу найти, как понять что это типа чтобы в консоль вывод не ишол
А не марш читать
ну или если лень найти и скачать толстую книжку по юниксу то купи и читай с бумаги, только чтоб книжка была потолше и именно по юниксу, можно конечно и по БСД но не линукс
f_andrey
-
mayor
- сержант
- Сообщения: 215
- Зарегистрирован: 2008-09-06 10:11:49
-
Контактная информация:
Непрочитанное сообщение
mayor » 2008-09-06 15:51:05
конкретно...
особенно если немецкий учил (в училище) но как могу читаю но до конца смысл уловить трудно, будем конечно читать, а сейчас просьба если не трудно - просто перевести значение
какой смысл несет "2" и какой смысл несет "&1" чото не пойму этим переводом вывода, и закрываем тему
mayor
-
zg
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Непрочитанное сообщение
zg » 2008-09-06 18:12:14
в шелле есть три стандартных файловых дескриптора
0 - STDIN
1 - STDOUT
2 - STDERR
то есть ввод, вывод на экран и вывод ошибок. Можно перенаправлять все три как хочешь и куда хочешь. Ввод при помощи ковеера (|) и <, остальные два с помощью > и >>. Можно также перенаправлять вывод из одного потока в другой для этого служит >&. Кострукция 2>&1 означает, что вывод ошибок будет направлен в STDOUT, то есть на экран, дальше идёт перенаправление STDOUT в /dev/null - псевдо устройство, которое принимает любую информацию безо всяких действий. Таким образом любой вывод на экран будет идти в /dev/null.
zg
-
mayor
- сержант
- Сообщения: 215
- Зарегистрирован: 2008-09-06 10:11:49
-
Контактная информация:
Непрочитанное сообщение
mayor » 2008-09-06 18:45:33
zg писал(а):в шелле есть три стандартных файловых дескриптора
0 - STDIN
1 - STDOUT
2 - STDERR
то есть ввод, вывод на экран и вывод ошибок. Можно перенаправлять все три как хочешь и куда хочешь. Ввод при помощи ковеера (|) и <, остальные два с помощью > и >>. Можно также перенаправлять вывод из одного потока в другой для этого служит >&. Кострукция 2>&1 означает, что вывод ошибок будет направлен в STDOUT, то есть на экран, дальше идёт перенаправление STDOUT в /dev/null - псевдо устройство, которое принимает любую информацию безо всяких действий. Таким образом любой вывод на экран будет идти в /dev/null.
большое спс теперь я все понял, начинаю писать свой скрипт
mayor