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

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

Жанры

Прикладные свободные программы и системы в школе
Шрифт:

Любой одиночный символ обозначается точкой (.), а не вопросительным знаком, как при «глоббинге» имен файлов.

Квадратные скобки ([ и ]) так же, как и при «глоббинге», используются для задания списков и диапазонов.

Знак каретки (^) имеет специальное значение в первой позиции внутри квадратных скобок. В этом случае он означает отрицание: /[А-Яа-я]/ соответствует «любой букве русского алфавита», а /[^А-Яа-я]/ – «любому символу, кроме букв русского алфавита». Чтобы включить его в список, достаточно поместить его в любую другую позицию: /[~`^]/ – это «тильда, апостроф или знак каретки».

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

также: точка (.), знак равенства (=) и двоеточие (:).

Каретка в начале выражения означает начало строки: ^T найдет заглавное «Т», начинающее строку. Подобно этому знак доллара ($) в конце выражения означает конец строки.

Звездочка тоже используется в значении «нуля или более вхождений символа», но по-другому – для этого она должна следовать за таким символом. Шаблон /A*/ соответствует «A», «AA», «AAA» и т.д. Звездочка может следовать и за выражением, например, /[А-Яа-я]*/ означает «любую последовательность букв русского алфавита». Любая последовательность любых символов может быть обозначена /.*/.

Обратная косая черта (\, «бэкслэш») «экранирует» следующий за нею символ, то есть отменяет его специальное значение. /\./ означает точку, /\*/ – звездочку, а /\\/ – обратную косую черту. Обратная косая черта, за которой следует цифра, также имеет специальное значение, которое здесь не рассматривается.

Кроме того, регулярные выражения могут включать скобочные конструкции. В качестве скобок используются последовательности \( и \) (это совершенно нелогичное обратное (не отменяющее специальное значение следующего символа, а, наоборот, придающее ему специальное значение) значение бэкслэша обусловлено чисто историческими причинами: скобочные выражения вводились в синтаксис регулярных выражений, когда он уже устоялся). Например, шаблон /\(аб\)*/ соответствует строкам «аб», «абаб», «абабаб» и т.д. Скобочные конструкции могут быть вложенными.

1.10 Элементы программирования оболочки

В предыдущих главах мы рассматривали язык оболочки с точки зрения, в основном, непосредственного исполнения вводимых команд. Теперь взглянем на него под другим углом: как на универсальный язык программирования, а на оболочку – как на интерпретирующую реализацию этого языка.

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

Все эти средства присутствуют в стандартном языке оболочки [61] . Его особенностью явяется возможность использовать команды (стандартные и нестандартные) ОС в качестве своего рода «вызовов функций» (хотя и определение, и вызов функции также присутствуют в языке как отдельный механизм).

При попытках реализовать «простые программы из учебников» на языке оболочки результат часто оказывается не самым изящным. Однако этот язык очень хорошо приспособлен для решения административных и системных задач. В большинстве открытых ОС значительная часть самой системы написана на этом языке.

61

Поскольку открытые системы являются многозадачными, декомпозируя задачу, решаемую сценарием, на несколько сценариев и используя системную многозадачность, можно реализовать определенный параллелизм в исполнении сценариев. Описание соответствующих приемов и команды «wait», позволяющей организовать синхронизацию («рандеву») потоков исполнения, выходит за рамки настоящего курса.

Пределы главы позволяют лишь бегло представить

механизмы языка оболочки, проиллюстрировав их несколькими примерами.

Комментарии и указание оболочки

Часть любой строки, начинающаяся со знака «#» вплоть до символа новой строки является комментарием и не исполняется оболочкой. Как и в других языках программирования, комментарии предназначены для передачи какой-либо неочевидной из текста самой программы информации ее читателю.

Во многих системах (включая «ГНУ/Линукс») специальная нестандартная форма комментария может использоваться также для передачи ядру системы информации о том, какую именно оболочку использовать для интерпретации сценария. Такой комментарий имеет вид символов «#!», за которыми слитно следует имя исполняемого файла (обычно «/bin/sh», «/bin/bash» или «/usr/bin/bash»), и должен начинать файл сценария, то есть находиться в первой строке.

Информация из специального комментария востребуется только если файлу сценария придан атрибут исполняемого, а его выполнение инициировано указанием имени файла в качестве команды ОС. Если сценарий запускается на выполнение явным вызовом дополнительного экемпляра оболочки (например, «/usr/bin/bash <сценарий»), специальный комментарий игнорируется. Эта строка почти всегда присутствует при публикации сценариев, чтобы было понятно, используется ли язык стандартной оболочки («sh»), ее расширения («bash», «zsh», «ksh») или не вполне совместимые со стандартом диалекты (такие, как «tcsh») [62] .

62

На самом деле, в специальном комментарии может быть указан любой исполняемый файл, способный интерпретировать текстовые файлы. Возможно, читатель сталкивался с ним в начале программ, например, на языке Перл.

Переменные и присваивание значений

Конструкция, состоящая из имени переменной и ее значения, разделенных знаком равенства («=») без промежутков, за которой не следует никакой команды, является определением переменной оболочки. Переменная, определенная таким способом, не оказывает влияния на поведение последующих команд.

Чтобы значение переменной передавалась всем вызываемым командам, ее следует сделать передаваемой (экспортировать ее) командой «export» с именем переменной в качестве аргумента.

Для того, чтобы присвоить переменной новое значение, ее просто переопределяют; определение, таким образом, выступает и в качестве оператора присваивания.

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

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

«Арифметические» и «логические» выражения

Выражения обычно вводятся в программу с использованием конструкции арифметического раскрытия выражений «$((выражение))». Заключенная в двойные круглые цепочка символов интерпретируется как арифметическое или логическое выражение, результат вычисления которого оболочкой подставляется на место вхождения этой конструкции в командной строке (Рис. 1-72).

Рис. 1-72
Поделиться:
Популярные книги

Алый бант в твоих волосах

Седов Павел
1. Алый бант
Любовные романы:
эро литература
5.00
рейтинг книги
Алый бант в твоих волосах

Надуй щеки! Том 3

Вишневский Сергей Викторович
3. Чеболь за партой
Фантастика:
попаданцы
дорама
5.00
рейтинг книги
Надуй щеки! Том 3

Все ведьмы – стервы, или Ректору больше (не) наливать

Цвик Катерина Александровна
1. Все ведьмы - стервы
Фантастика:
юмористическая фантастика
5.00
рейтинг книги
Все ведьмы – стервы, или Ректору больше (не) наливать

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

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

Зайти и выйти

Суконкин Алексей
Проза:
военная проза
5.00
рейтинг книги
Зайти и выйти

Измена. Право на счастье

Вирго Софи
1. Чем закончится измена
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Право на счастье

Любовь Носорога

Зайцева Мария
Любовные романы:
современные любовные романы
9.11
рейтинг книги
Любовь Носорога

Ученик

Губарев Алексей
1. Тай Фун
Фантастика:
фэнтези
5.00
рейтинг книги
Ученик

Архил...? Книга 2

Кожевников Павел
2. Архил...?
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Архил...? Книга 2

Отморозки

Земляной Андрей Борисович
Фантастика:
научная фантастика
7.00
рейтинг книги
Отморозки

Замуж второй раз, или Ещё посмотрим, кто из нас попал!

Вудворт Франциска
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Замуж второй раз, или Ещё посмотрим, кто из нас попал!

Господин следователь. Книга седьмая

Шалашов Евгений Васильевич
7. Господин следователь
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Господин следователь. Книга седьмая

Предатель. Ты променял меня на бывшую

Верди Алиса
7. Измены
Любовные романы:
современные любовные романы
7.50
рейтинг книги
Предатель. Ты променял меня на бывшую

Идеальный мир для Лекаря 13

Сапфир Олег
13. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 13