Приемы профессиональной работы в UNIX



             

УПРАВЛЕНИЕ ВРЕМЕНЕМ - часть 4


1. $ at 11:45 echo ^G^G It's almost lunch time

Без пятнадцати минут двенадцать дважды выдается звуковой сигнал (control-G) и выводится сообщение о ленче.

2. $ at 10:45 "if [ -s $MAIL ]; then echo ^G You have mail; fi"

Без пятнадцати одиннадцать проверяется, существует ли мой почтовый файл и есть ли в нем хотя бы один символ ($MAIL есть /usr/spool/mail/russ). Если это так, выдается звуковой сигнал и сообщение о том, что у меня есть почта.

3. $ at 17:00 "c; date; banner ' time to' ' go home'"

В пять часов вечера очищается экран (с помощью команды c, описанной далее в данной книге), печатается дата и выводится крупными буквами на весь экран сообщение "time to go home" ("пора домой"). С помощью апострофов в командной строке banner мы можем добиться вывода символа возврата каретки, чтобы разместить каждый набор слов в отдельной строке. Если какая-либо из этих команд не срабатывает (например, не найдена команда c), то и весь фоновый процесс оканчивается неудачей.

ПОЯСНЕНИЯ

Прежде всего at проверяет, правильно ли она была вызвана. Строки 4-8 делают проверку ошибок. В командной строке должны присутствовать по крайней мере два параметра: время и команда. Если это так, то счетчик позиционных параметров равен 2. Если этот счетчик меньше 2, произошла ошибка. В стандартный файл ошибок посылаются сообщения об ошибке с помощью переадресации в файловый дескриптор 2.

Переменная интерпретатора shell ITS инициализируется в строке 10. В ней устанавливается значение первого позиционного параметра ($1), которым является час:минута. Как только мы занесли это значение в переменную, оно больше не нужно нам в командной строке. Команда shift удаляет $1 из командной строки. Теперь командная строка состоит из вызывающей команды $0 (т.е. самой at) и остатка строки ($@ или $*). Вызывающая команда не вычисляется как часть остатка строки, поэтому вам не нужно заботиться об аргументе $0.

Далее at переходит к вечному циклу while в строках 12-21. Вечным этот цикл делает команда : (двоеточие). Это встроенная команда интерпретатора shell, которая ничего не делает кроме того, что всегда возвращает успешный статус выхода, заставляя тем самым цикл продолжаться. Команда true интерпретатора shell очень похожа и делает программу более наглядной. Мы же используем : вместо true, чтобы сократить издержки на порождение процесса для каждой итерации цикла. Команда : встроена в сам shell. True, напротив, является внешней командой в каталоге bin (так же, как ls), она должна быть найдена по файловому пути, выполниться и вернуть значение. Это занимает гораздо больше процессорного времени.

На каждой итерации цикла текущее время сверяется с назначенным временем, переданным из командной строки. Текущее время извлекается из команды date в строке 14. Обычно date выдает результат в таком формате:




Содержание  Назад  Вперед