Страница 1 из 1

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

Добавлено: 2008-09-06 10:22:22
mayor
нарыл у вас тут скриптик:

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

#! /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 ]

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

Добавлено: 2008-09-06 11:44:51
mayor

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

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

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

Добавлено: 2008-09-06 11:52:37
mayor

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

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

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

/dev/null 2>&1

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

Добавлено: 2008-09-06 11:56:56
zg
mayor писал(а):что мы делаем этим:
глушим любой вывод на экран

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

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

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

Добавлено: 2008-09-06 15:21:47
f_andrey
mayor писал(а):
zg писал(а):деж про это прочитать? не могу найти, как понять что это типа чтобы в консоль вывод не ишол
А не марш читать ну или если лень найти и скачать толстую книжку по юниксу то купи и читай с бумаги, только чтоб книжка была потолше и именно по юниксу, можно конечно и по БСД но не линукс :oops:

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

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

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

Добавлено: 2008-09-06 18:12:14
zg
в шелле есть три стандартных файловых дескриптора
0 - STDIN
1 - STDOUT
2 - STDERR

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

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

Добавлено: 2008-09-06 18:45:33
mayor
zg писал(а):в шелле есть три стандартных файловых дескриптора
0 - STDIN
1 - STDOUT
2 - STDERR

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