Шрифт:
$ mv /apps/bin /apps/dev/bin && rm -r /apps/bin
Каталог /apps/biп с помощью команды mv перемешается в каталог /apps/dev/bin. Если перемещение завершится удачно, то исходный каталог - /apps/biп — будет удален.
В следующем примере команда sort сортирует содержимое текстового файла quarter_end.txt, записывая результат в файл quarter, sorted. Если запись прошла успешно, полученный файл выводится на печать с помощью команды lp.
$ sort quarter_end.txt > quarter.sorted && lp quarter. sorted
6.2. Оператор ||
Рассмотрим общий формат оператора | |:
команда1 || команда2
Эта инструкция обрабатывается следующим образом: правый операнд интерпретируется только тогда, когда левый операнд равен false. Иными словами, вторая команда выполняется в том случае, если первая завершилась неуспешно.
Приведем простой пример, иллюстрирующий применение оператора | |:
$ cp wopper.txt oops.txt || echo "копирование не выполнено"
cp: wopper.txt: No such file or directory копирование не выполнено
Операция копирования завершилась неудачно (исходного файла не существует), поэтому была выполнена команда echo.
В следующем примере из файла acc.qtr извлекаются первое и пятое поля, а результат помещается во временный файл qtr.tmp. Если по какой-то причине извлечь нужные данные не удастся, пользователь dave получит электронное сообщение.
$ awk ' {print$1,$5}' acc.qtr > qtr.tmp || echo "Получить данные не удалось." | \
mail dave
6.3. Группирование команд с помощью скобок
Существует возможность объединить несколько команд в группу и выполнить ее как единое целое в текущем или порожденном интерпретаторе shell. Во втором случае создается копия текущего интерпретатора, а все изменения среды интерпретатора отменяются по завершении последней команды в группе.
Для выполнения группы команд в текущем интерпретаторе shell следует заключить их список в фигурные скобки, разделив команды точкой с запятой:
{команда1; команда2; …}
Чтобы выполнить группу команд в порожденном интерпретаторе shell, поступите аналогичным образом, но вместо фигурных скобок поставьте круглые скобки:
(команда1; команда2; …)
Сам по себе подобный метод применяется не часто. Обычно группа команд выполняется в составе более крупных конструкций с операторами && или. Результатом работы группы команд считается результат выполнения последней команды в группе.
Предположим, я выполняю сценарий comet, обрабатывающий файл month_end.txt, и в случае неудачного завершения сценария хочу прекратить работу интерпретатора shell. Простейший способ сделать это состоит в следующем:
$ comet month_end.txt || exit
Но можно также перед выходом из интерпретатора послать отвечающему за этот сценарий пользователю электронное сообщение:
$ comet month_end.txt || (echo "Привет! Твой сценарий не работает." | \
mail dave; exit)
Символ '\' в конце первой строки означает, что команда будет продолжена в следующей строке.
Вспомним рассмотренный ранее пример, в котором команда sort сортирует содержимое текстового файла quarter_end.txt, записывая результат в файл quarter.sorted с последующим выводом его на печать:
$ sort quarter_end.txt > quarter.sorted && lp quarter.sorted
Применив метод группировки команд, можно одновременно с печатью файла скопировать его в каталог /logs.
$ sort quarter_end.txt > quarter.sorted && \
(cp quarter.sorted /logs/quarter.sorted; lp quarter.sorted)
6.4. Заключение
При создании сложных инструкций большую роль играют операторы && и. Они позволяют выполнить указанную после них команду или группу команд только в том случае, если была (или не была) успешно выполнена предыдущая команда или группа команд.
ЧАСТЬ 2
Фильтрация текста
ГЛАВА 7
Регулярные выражения
При работе в UNIX или Linux часто используются регулярные выражения — мощное средство текстового поиска. Если, например, требуется найти слово, у которого первые два символа являются прописными буквами, а следующие четыре символа — цифрами, сформировать правильный шаблон поиска помогут регулярные выражения.