Чтение онлайн

на главную - закладки

Жанры

Искусство программирования на языке сценариев командной оболочки

Купер Мендель

Шрифт:

# Показывает, что ошибок не возникало.

# Такая методика создания блочных комментариев

#+ может использоваться для комментирования блоков кода во время отладки.

# Это экономит силы и время, т.к. не нужно втавлять символ "#" в начале каждой строки,

#+ а затем удалять их.

: << DEBUGXXX

for file in *

do

cat "$file"

done

DEBUGXXX

exit 0

Еще одно остроумное применение встроенных документов -- встроенная справка к сценарию.

Пример 17-11. Встроенная

справка к сценарию

#!/bin/bash

# self-document.sh: сценарий со встроенной справкой

# Модификация сценария "colm.sh".

DOC_REQUEST=70

if [ "$1" = "-h" -o "$1" = "--help" ] # Request help.

then

echo; echo "Порядок использования: $0 [directory-name]"; echo

sed --silent -e '/DOCUMENTATIONXX$/,/^DOCUMENTATION/p' "$0" |

sed -e '/DOCUMENTATIONXX/d'; exit $DOC_REQUEST; fi

: << DOCUMENTATIONXX

Сценарий выводит сведения о заданном каталоге в виде таблице.

– ------------------------------------------------------------

Сценарию необходимо передать имя каталога. Если каталог не

указан или он недоступен для чтения, то выводятся сведения

о текущем каталоге.

DOCUMENTATIONXX

if [ -z "$1" -o !
– r "$1" ]

then

directory=.

else

directory="$1"

fi

echo "Сведения о каталоге "$directory":"; echo

(printf "PERMISSIONS LINKS OWNER GROUP SIZE MONTH DAY HH:MM PROG-NAME\n" \

; ls -l "$directory" | sed 1d) | column -t

exit 0

Для встроенных документов, во время исполнения, создаются временные файлы, но эти файлы удаляются после открытия и недоступны для других процессов.

bash$ bash -c 'lsof -a -p $$ -d0' << EOF

> EOF

lsof 1213 bozo 0r REG 3,5 0 30386 /tmp/t1213-0-sh (deleted)

Некоторые утилиты не могут работать внутри встроенных документов.

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

Часть 4. Материал повышенной сложности

Итак, мы вплотную подошли к изучению очень сложных и необычных аспектов написания сценариев. В этой части мы попытаемся "сбросить покров тайны" и заглянуть за пределы известного нам мира (представьте себе путешествие по территории, не отмеченной на карте).

Глава 18. Регулярные выражения

Для того, чтобы полностью реализовать потенциал командной оболочки, вам придется овладеть Регулярными Выражениями. Многие команды и утилиты, обычно используемые в сценариях, такие как grep, expr, sed и awk, используют Регулярные Выражения.

18.1. Краткое введение в регулярные выражения

Выражение -- это строка символов. Символы, которые имеют особое назначение, называются метасимволами. Так, например, кавычки могут выделять прямую речь, т.е. быть метасимволами для строки, заключенной в эти кавычки. Регулярные выражения -- это набор символов и/или метасимволов, которые наделены особыми свойствами [ 46 ] .

46

В качестве простейшего регулярного выражения можно привести строку, не содержащую никаких

метасимволов.

Основное назначение регулярных выражений -- это поиск текста по шаблону и работа со строками.

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

Выражение "1133*" -- означает 11 + один или более символов "3" + любые другие символы: 113, 1133, 113312, и так далее.

Точка -- .
– - означает не менее одного любого символа, за исключением символа перевода строки (\n) [ 47 ] .

47

[47]Поскольку с помощью sed, awk и grep обрабатывают одиночные строки, то обычно символ перевода строки не принимается во внимание. В тех же случаях, когда производится разбор многострочного текста, метасимвол "точка" будет соответствовать символу перевода строки.

#!/bin/bash

sed -e 'N;s/.*/[&]/' << EOF # Встроенный документ

line1

line2

EOF

# OUTPUT:

# [line1

# line2]

echo

awk '{ $0=$1 "\n" $2; if (/line.1/) {print}}' << EOF

line 1

line 2

EOF

# OUTPUT:

# line

# 1

# Спасибо S.C.

exit 0

Выражение "13." будет означать 13 + по меньшей мере один любой символ (включая пробел): 1133, 11333, но не 13 (отсутствуют дополнительные символы).

Символ -- ^ -- означает начало строки, но иногда, в зависимости от контекста, означает отрицание в регулярных выражениях.

Знак доллара -- $ -- в конце регулярного выражения соответствует концу строки.

Выражение "^$" соответствует пустой строке.

Символы ^ и $ иногда еще называют якорями, поскольку они означают, или закрепляют, позицию в регулярных выражениях.

Квадратные скобки -- [...] -- предназначены для задания подмножества символов. Квадратные скобки, внутри регулярного выражения, считаются одним символом, который может принимать значения, перечисленные внутри этих скобок..

Выражение "[xyz]" -- соответствует одному из символов x, y или z.

Выражение "[c-n]" соответствует одному из символов в диапазоне от c до n, включительно.

Выражение "[B-Pk-y]" соответствует одному из символов в диапазоне от B до P или в диапазоне от k до y, включительно.

Выражение "[a-z0-9]" соответствует одному из символов латиницы в нижнем регистре или цифре.

Выражение "[^b-d]" соответствует любому символу, кроме символов из диапазона от b до d, включительно. В данном случае, метасимвол ^ означает отрицание.

Поделиться:
Популярные книги

Жалкая

Макинтайер Эмили
3. Долго и Несчастливо
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Жалкая

Беглец

Бубела Олег Николаевич
1. Совсем не герой
Фантастика:
фэнтези
попаданцы
8.94
рейтинг книги
Беглец

Академия проклятий. Книги 1 - 7

Звездная Елена
Академия Проклятий
Фантастика:
фэнтези
8.98
рейтинг книги
Академия проклятий. Книги 1 - 7

Измена. Верни мне мою жизнь

Томченко Анна
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Верни мне мою жизнь

Измена

Рей Полина
Любовные романы:
современные любовные романы
5.38
рейтинг книги
Измена

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Сердце для стража

Каменистый Артем
5. Девятый
Фантастика:
фэнтези
боевая фантастика
9.20
рейтинг книги
Сердце для стража

Черный Маг Императора 11

Герда Александр
11. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Черный Маг Императора 11

Имя нам Легион. Том 3

Дорничев Дмитрий
3. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 3

Жена фаворита королевы. Посмешище двора

Семина Дия
Фантастика:
фэнтези
5.00
рейтинг книги
Жена фаворита королевы. Посмешище двора

Как я строил магическую империю 5

Зубов Константин
5. Как я строил магическую империю
Фантастика:
попаданцы
аниме
фантастика: прочее
фэнтези
5.00
рейтинг книги
Как я строил магическую империю 5

Блуждающие огни 2

Панченко Андрей Алексеевич
2. Блуждающие огни
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Блуждающие огни 2

Ратник

Ланцов Михаил Алексеевич
3. Помещик
Фантастика:
альтернативная история
7.11
рейтинг книги
Ратник

Маленькая слабость Дракона Андреевича

Рам Янка
1. Танцы на углях
Любовные романы:
современные любовные романы
эро литература
5.25
рейтинг книги
Маленькая слабость Дракона Андреевича