обясните 2 оператора

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
mayor
сержант
Сообщения: 215
Зарегистрирован: 2008-09-06 10:11:49
Контактная информация:

обясните 2 оператора

Непрочитанное сообщение 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
за который автору спс, все вроде понятно кроме вот этих операторов, если не трудно переведите вот это:

Код: Выделить всё

[ ! -f hour.txt ]
и вот это:

Код: Выделить всё

[ $? -eq 0 ]

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.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
Контактная информация:

Re: обясните 2 оператора

Непрочитанное сообщение mayor » 2008-09-06 11:44:51

Код: Выделить всё

[ ! -f hour.txt ]
- смысл этого понял, проверям есть ли такой файл (правда не понятно где ищем)

Аватара пользователя
mayor
сержант
Сообщения: 215
Зарегистрирован: 2008-09-06 10:11:49
Контактная информация:

Re: обясните 2 оператора

Непрочитанное сообщение mayor » 2008-09-06 11:52:37

Код: Выделить всё

[ $? -eq 0 ]
все понял проверяем равен ли результат нулю т.е. $? - это результат выполнения команды, и последняя непонятка: что мы делаем этим:

Код: Выделить всё

/dev/null 2>&1

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: обясните 2 оператора

Непрочитанное сообщение zg » 2008-09-06 11:56:56

mayor писал(а):что мы делаем этим:
глушим любой вывод на экран

Аватара пользователя
mayor
сержант
Сообщения: 215
Зарегистрирован: 2008-09-06 10:11:49
Контактная информация:

Re: обясните 2 оператора

Непрочитанное сообщение mayor » 2008-09-06 15:14:36

zg писал(а):
mayor писал(а):что мы делаем этим:
глушим любой вывод на экран
2>&1
деж про это прочитать? не могу найти, как понять что это типа чтобы в консоль вывод не ишол

Аватара пользователя
f_andrey
майор
Сообщения: 2651
Зарегистрирован: 2007-12-26 1:22:58
Откуда: СПб
Контактная информация:

Re: обясните 2 оператора

Непрочитанное сообщение f_andrey » 2008-09-06 15:21:47

mayor писал(а):
zg писал(а):деж про это прочитать? не могу найти, как понять что это типа чтобы в консоль вывод не ишол
А не марш читать ну или если лень найти и скачать толстую книжку по юниксу то купи и читай с бумаги, только чтоб книжка была потолше и именно по юниксу, можно конечно и по БСД но не линукс :oops:
Если ваша тема перенесена, то смотри http://forum.lissyara.su/viewtopic.php?f=1&t=32308

Аватара пользователя
mayor
сержант
Сообщения: 215
Зарегистрирован: 2008-09-06 10:11:49
Контактная информация:

Re: обясните 2 оператора

Непрочитанное сообщение mayor » 2008-09-06 15:51:05

конкретно... :smile: особенно если немецкий учил (в училище) но как могу читаю но до конца смысл уловить трудно, будем конечно читать, а сейчас просьба если не трудно - просто перевести значение какой смысл несет "2" и какой смысл несет "&1" чото не пойму этим переводом вывода, и закрываем тему

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: обясните 2 оператора

Непрочитанное сообщение zg » 2008-09-06 18:12:14

в шелле есть три стандартных файловых дескриптора
0 - STDIN
1 - STDOUT
2 - STDERR

то есть ввод, вывод на экран и вывод ошибок. Можно перенаправлять все три как хочешь и куда хочешь. Ввод при помощи ковеера (|) и <, остальные два с помощью > и >>. Можно также перенаправлять вывод из одного потока в другой для этого служит >&. Кострукция 2>&1 означает, что вывод ошибок будет направлен в STDOUT, то есть на экран, дальше идёт перенаправление STDOUT в /dev/null - псевдо устройство, которое принимает любую информацию безо всяких действий. Таким образом любой вывод на экран будет идти в /dev/null.

Аватара пользователя
mayor
сержант
Сообщения: 215
Зарегистрирован: 2008-09-06 10:11:49
Контактная информация:

Re: обясните 2 оператора

Непрочитанное сообщение mayor » 2008-09-06 18:45:33

zg писал(а):в шелле есть три стандартных файловых дескриптора
0 - STDIN
1 - STDOUT
2 - STDERR

то есть ввод, вывод на экран и вывод ошибок. Можно перенаправлять все три как хочешь и куда хочешь. Ввод при помощи ковеера (|) и <, остальные два с помощью > и >>. Можно также перенаправлять вывод из одного потока в другой для этого служит >&. Кострукция 2>&1 означает, что вывод ошибок будет направлен в STDOUT, то есть на экран, дальше идёт перенаправление STDOUT в /dev/null - псевдо устройство, которое принимает любую информацию безо всяких действий. Таким образом любой вывод на экран будет идти в /dev/null.
большое спс теперь я все понял, начинаю писать свой скрипт :smile: