-->

Linux и UNIX: программирование в shell. Руководство разработчика

На нашем литературном портале можно бесплатно читать книгу Linux и UNIX: программирование в shell. Руководство разработчика, Тейнсли Дэвид-- . Жанр: Прочая компьютерная литература. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
Linux и UNIX: программирование в shell. Руководство разработчика
Название: Linux и UNIX: программирование в shell. Руководство разработчика
Дата добавления: 16 январь 2020
Количество просмотров: 440
Читать онлайн

Linux и UNIX: программирование в shell. Руководство разработчика читать книгу онлайн

Linux и UNIX: программирование в shell. Руководство разработчика - читать бесплатно онлайн , автор Тейнсли Дэвид

Данная книга является практическим руководством по программированию интерпретатора Bourne shell -cтандартного командного интерпретатора в UNIX, полностью совместимого с интерпретатором BASH shell в Linux. Книга предназначена для начинающих и опытных программистов и содержит множество полезных примеров, советов и подсказок. С ее помощью читатель сможет быстро научиться создавать shell–сценарии для реальных задач и ситуаций, возникающих в большинстве систем UNIX и Linux.

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

1 ... 15 16 17 18 19 20 21 22 23 ... 114 ВПЕРЕД
Перейти на страницу:

В этой главе рассматриваются следующие темы: в выполнение команды в зависимости от результата выполнения другой команды; в группирование команд.

Интерпретатор shell располагает операторами && и, которые группируют команды по принципу логического И/ИЛИ. Существуют также операторы () и {}, объединяющие заключенные в них команды в группу, выполняемую в текущем или порожденном интерпретаторе shell.

6.1. Оператор &&

Общий формат оператора && таков:

команда1 && команда2

Эта инструкция обрабатывается следующим образом: правый операнд интерпретируется только тогда, когда левый операнд равен TRUE. Иными словами, вторая команда выполняется в том случае, если первая завершилась успешно.

Рассмотрим простой пример:

$ cp justice.doc justice.bak && echo "копирование прошло успешно"

копирование прошло успешно

Сообщение, заданное в команде echo, появилось на экране, значит, команда cp успешно выполнила копирование файла. А вот более практичный пример:

$ 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 часто используются регулярные выражения — мощное средство текстового поиска. Если, например, требуется найти слово, у которого первые два символа являются прописными буквами, а следующие четыре символа — цифрами, сформировать правильный шаблон поиска помогут регулярные выражения.

В этой главе рассматриваются следующие темы:

   • создание шаблонов для поиска выражений, стоящих в начале или в конце строки;

   • создание шаблонов для поиска символов, встречающихся неопределенное число раз;

   • создание шаблонов для поиска специальных символов;

   • создание шаблонов для поиска символов из указанного набора или диапазона;

   • создание шаблонов для поиска символов, встречающихся указанное число раз подряд.

Регулярные выражения можно применять для фильтрации текстовых файлов или выходных данных команды либо сценария. Они представляют собой набор шаблонов, состоящих как из специальных, так и обычных символов.

Регулярные выражения в той или иной форме используются всеми основными текстовыми редакторами и утилитами, выполняющими фильтрацию текста. К сожалению, наборы поддерживаемых выражений несколько различаются от программы к программе, но существуют так называемые базовые регулярные выражения, которые во всех программах обрабатываются одинаково. Именно их мы и рассмотрим в настоящей главе. Единственное исключение -oператор { }, который поддерживается в программах sed и grep, но не в awk.

В табл. 7.1 перечислены метасимволы и операторы, применяемые в базовых регулярных выражениях.

Таблица 7.1. Метасимволы и операторы базовых регулярных выражений

^

Соответствует началу строки

$

Соответствует концу строки

[]

Соответствует любому символу из числа заключенных в скобки; чтобы задать диапазон символов, укажите первый символ диапазона, дефис и последний символ (например, вместо шаблона [12345] можно ввести

[1-5])

[^]

Соответствует любому символу, кроме тех, что указаны в скобках

Отменяет специальное значение следующего за ним метасимвола

.

Соответствует любому отдельному символу

*

Указывает на то, что предыдущий шаблон встречается ноль или более раз; в программах awk и egrep, где испольуются расширенные регулярные выражения, существует два дополнительных оператора:

1 ... 15 16 17 18 19 20 21 22 23 ... 114 ВПЕРЕД
Перейти на страницу:
Комментариев (0)
название