Обратите внимание на применение двойных кавычек, которые позволяют в потоке данных вывода указывать пробелы.
Для использования даты в качестве части имени файла проще всего воспользоваться подстановкой. Введите переменную, значением которой является заново отформатированная дата, и присоедините эту переменную к имени файла. Этим именем и будет назван журнальный файл.
В следующем примере создаются два журнальных файла. Для одного файла дата указывается в формате дд, мм, гг, а для другого — в формате дд, чч, мм.
Сценарий имеет вид:
$ pg log
#!/bin/sh
# регистрация
#
MYDATE=`date +%d%m%y`
#присоединение MYDATE к переменной LOGFILE, которая содержит действительное #имя файла регистрации.
LOGFILE=/logs/backup_log.$MYDATE
#создание файла
>$LOGFILE
MVTTIME= `date +%d%R` LOGFILE2=/logs/admin_log.$MYTIME
# создание файла
>$LOGFILE2
При выполнении этого сценария создаются два журнальных файла.
backup_log.09069 9 admin_log.09l6:18
При рассмотрении специальных переменных уже обсуждалась переменная $$ Она содержит ID или номер процесса, выполняющегося в текущий момент. Эти сведения применяются при создании временных файлов в текущем сценарии, поскольку ID процесса уникален в рамках сценария. Достаточно лишь создать файл и присоединить к нему символ $$, После завершения можно удалить все файлы, имеющие символ $$ в качестве расширения. Интерпретатор shell оценивает переменную $$ как текущий ID процесса и удаляет эти файлы, но оставляет файлы, к которым присоединен ID процесса.
В командной строке введите следующую команду:
$ echo $$
281
Это значение ID процесса приведено для примера; в вашем случае, скорее всего, будет получено другое значение. Если создать новый сеанс и ввести эту же команду, получится другой номер, поскольку будет запущен иной процесс.
$ echo $$
382
Ниже приводится сценарий, который создает два временных файла, обрабатывает и затем удаляет их.
$ pg tempfiles
#!/bin/sh
#tempfiles
#именование временных файлов
HOLD1=/tmp/hold1.$$
HOLD2=/tmp/hold2.$$
#выполнение определенной обработки с помощью этих файлов
df -tk > $HOLD1
cat $HOLD1 > $HOLD2
# удаление файлов
rm /tmp/*.$$
При выполнении этого сценария создаются следующие два файла.
hold1.408 hold2.408
Когда указывается команда rm /tmp/*.$$, интерпретатор shell в действительности выполняет команду rm /tmp/*.408.
Важно помнить, что ID процесса является уникальным только в конкретный момент времени. Например, если приведенный выше сценарий выполнить снова, получим новый ID процесса, поскольку речь идет о другом процессе.
Благодаря использованию даты можно отслеживать файлы, созданные для специальных целей. Помимо этого, значительно облегчается очистка файлов на базе определенных дат, поскольку с первого взгляда видно, какие файлы создавались раньше, а какие позже.
Временные файлы создаются легко и быстро; кроме того, они являются уникальными для данного процесса. После того как сценарий завершает обработку, их несложно удалить без искажения остальной информации.
26.2. Сигналы
Сигнал относится к типу сообщений, которые пересылаются из системы для информирования команды или сценария о совершении какого‑либо события. Обычно речь идет об ошибках, связанных с функционированием памяти, о проблемах с доступом к информации или об определенных пользовательских попытках прекратить процесс. Сигналы представлены числами. Ниже приводится список наиболее распространенных сигналов и их значений.
Номер сигнала | Название сигнала | Значение |
1 | SIGHUP | "Зависание" или прекращение выполнения родительского процесса |
2 | SIG1NT | Прерывание с помощью клавиатуры; обычно используется комбинация клавиш [Ctrl+C] |
3 | SIGQUIT | Завершение выполнения с помощью клавиатуры |
9 | SIGKILL | Прекращение выполнения определенного процесса |
11 | SIGSEGV | Нарушение сегментации (память( |
15 | SIGTERM | Завершение выполнения программы (завершение выполнения программы, заданное по умолчанию) |