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

на главную

Жанры

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

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

Шрифт:

Класс [:space:]– - соответствует пробельным символам (пробел и горизонтальная табуляция).

Класс [:upper:]– - соответствует набору символов алфавита в верхнем регистре. Эквивалентно выражению [A-Z].

Класс [:xdigit:]– - соответствует набору шестнадцатиричных цифр. Эквивалентно выражению [0-9A-Fa-f].

Вообще, символьные классы POSIX требуют заключения в кавычки или двойные квадратные скобки ([[ ]]).

bash$ grep [[:digit:]] test.file

abc=723

Эти

символьные классы могут использоваться, с некоторыми ограничениями, даже в операциях подстановки имен файлов (globbing).

bash$ ls -l ?[[:digit:]][[:digit:]]?

– rw-rw-r-- 1 bozo bozo 0 Aug 21 14:47 a33b

Примеры использования символьных классов в сценариях вы найдете в Пример 12-14 и Пример 12-15.

Sed, awk и Perl, используемые в сценариях в качестве фильтров, могут принимать регулярные выражения в качестве входных аргументов. См. Пример A-13 и Пример A-19.

Книга "Sed & Awk" (авторы Dougherty и Robbins) дает полное и ясное представление о регулярных выражениях (см. раздел Литература).

18.2. Globbing -- Подстановка имен файлов

Bash, сам по себе, не распознает регулярные выражения. Но в сценариях можно использовать команды и утилиты, такие как sed и awk, которые прекрасно справляются с обработкой регулярных выражений.

Фактически, Bash может выполнять подстановку имен файлов, этот процесс называется "globbing", но при этом не используется стандартный набор регулярных выражений. Вместо этого, при выполнении подстановки имен файлов, производится распознавание и интерпретация шаблонных символов. В число интерпретируемых шаблонов входят символы * и ?, списки символов в квадратных скобках и некоторые специальные символы (например ^, используемый для выполнения операции отрицания). Применение шаблонных символов имеет ряд важных ограничений. Например, если имена файлов начинаются с точки (например так: .bashrc), то они не будут соответствовать шаблону, содержащему символ * [ 48 ] . Аналогично, символ ? в операции подстановки имен файлов имеет иной смысл, нежели в регулярных выражениях.

48

Подстановка таких имен файлов возможна, но только при условии, что символ точки будет явно присутствовать в шаблоне.

~/[.]bashrc # Не будет соответствовать имени ~/.bashrc

~/?bashrc # То же самое.

# Метасимволы не могут соответствовать символу точки при подстановке имен файлов.

~/.[b]ashrc # Имя ~./bashrc будет соответствовать данному шаблону

~/.ba?hrc # Аналогично.

~/.bashr* # Аналогично.

# Установка ключа "dotglob" отключает такое поведение интерпретатора.

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

bash$ ls -l

total 2

– rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1

– rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1

– rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1

– rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh

– rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt

bash$ ls -l t?.sh

– rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh

bash$ ls -l [ab]*

– rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1

– rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1

bash$ ls -l [a-c]*

– rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1

– rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1

– rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1

bash$ ls -l [^ab]*

– rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1

– rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh

– rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt

bash$ ls -l {b*,c*,*est*}

– rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1

– rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1

– rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt

bash$ echo *

a.1 b.1 c.1 t2.sh test1.txt

bash$ echo t*

t2.sh test1.txt

Даже

команда echo может интерпретировать шаблонные символы в именах файлов.

См. также Пример 10-4.

Глава 19. Подоболочки, или Subshells

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

Сценарий может, так же, запустить другой дочерний процесс, в своей подоболочке. Это позволяет сценариям распараллелить процесс обработки данных по нескольким задачам, исполняемым одновременно.

Список команд в круглых скобках

( command1; command2; command3; ... )

Список команд, в круглых скобках, исполняется в подоболочке.

Значения переменных, определенных в дочерней оболочке, не могут быть переданы родительской оболочке. Они недоступны родительскому процессу. Фактически, они ведут себя как локальные переменные.

Пример 19-1. Область видимости переменных

#!/bin/bash

# subshell.sh

echo

outer_variable=Outer

(

inner_variable=Inner

echo "Дочерний процесс, \"inner_variable\" = $inner_variable"

echo "Дочерний процесс, \"outer\" = $outer_variable"

)

echo

if [ -z "$inner_variable" ]

then

echo "Переменная inner_variable не определена в родительской оболочке"

else

echo "Переменная inner_variable определена в родительской оболочке"

fi

echo "Родительский процесс, \"inner_variable\" = $inner_variable"

# Переменная $inner_variable не будет определена

# потому, что переменные, определенные в дочернем процессе,

# ведут себя как "локальные переменные".

echo

exit 0

См. также Пример 31-1.

+

Смена текущего каталога в дочернем процессе (подоболочке) не влечет за собой смену текущего каталога в родительской оболочке.

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

Поступь Империи

Ланцов Михаил Алексеевич
7. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Поступь Империи

Мастер Разума

Кронос Александр
1. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
6.20
рейтинг книги
Мастер Разума

Сиротка 4

Первухин Андрей Евгеньевич
4. Сиротка
Фантастика:
фэнтези
попаданцы
6.00
рейтинг книги
Сиротка 4

Провинциал. Книга 7

Лопарев Игорь Викторович
7. Провинциал
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Провинциал. Книга 7

Ненаглядная жена его светлости

Зика Натаэль
Любовные романы:
любовно-фантастические романы
6.23
рейтинг книги
Ненаглядная жена его светлости

Книга пяти колец

Зайцев Константин
1. Книга пяти колец
Фантастика:
фэнтези
6.00
рейтинг книги
Книга пяти колец

Ваше Сиятельство

Моури Эрли
1. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ваше Сиятельство

Болотник 3

Панченко Андрей Алексеевич
3. Болотник
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Болотник 3

Темный Охотник 3

Розальев Андрей
3. КО: Темный охотник
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Охотник 3

Семья. Измена. Развод

Высоцкая Мария Николаевна
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Семья. Измена. Развод

Восход. Солнцев. Книга X

Скабер Артемий
10. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга X

По осколкам твоего сердца

Джейн Анна
2. Хулиган и новенькая
Любовные романы:
современные любовные романы
5.56
рейтинг книги
По осколкам твоего сердца

Барон диктует правила

Ренгач Евгений
4. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон диктует правила

Неудержимый. Книга XII

Боярский Андрей
12. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XII