Читаем Свободные программы и системы в школе полностью

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

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

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

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

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

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

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

.

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

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

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

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

вычисления которого оболочкой подставляется на место вхождения этой конструкции в командной строке (Рис. 1-72).

Рис. 1-72

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

Выражение состоит из переменных, констант и знаков операций. Стандартом определены операции, перечисленные в таблице на Рис. 1-73).

Рис. 1-73

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

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

Чаще всего арифметическое раскрытие применяется в команде присваивания, но его можно использовать в любом месте (например, для задания числового операнда команды или числового параметра ключа) (Рис. 1-74).

Рис. 1-74

Помимо конструкции арифметического раскрытия, существует стандартная команда «expr», также вычисляющая значение выражения (с несколько иным синтаксисом, в частности, использующим для проверки на равенство знака «=»), переданного ей в качестве аргумента, и выводящая его результат. Выражение при этом следует экранировать двойными кавычками «"» и «"».

Команду «expr» лучше не применять, если ее можно заменить командой «echo $((выражение))» (с учетом отличий в синтаксисе), но в чужих сценариях она может встретиться. Кроме того, она, в отличие от арифметического раскрытия, позволяет выполнять сравнение строк на равенство. Выполнить подстановку выводимого командой «expr» результата в командную строку можно посредством механизма обратных апострофов, обсуждающегося ниже.

Перейти на страницу:

Похожие книги

Недокументированные и малоизвестные возможности Windows XP
Недокументированные и малоизвестные возможности Windows XP

Книга содержит подробные сведения о таких недокументированных или малоизвестных возможностях Windows XP, как принципы работы с программами rundll32.exe и regsvr32.exe, написание скриптов сервера сценариев Windows и создание INF-файлов. Р' ней приведено описание оснасток, изложены принципы работы с консолью управления mmc.exe и параметрами реестра, которые изменяются с ее помощью. Кроме того, рассмотрено большое количество средств, позволяющих выполнить тонкую настройку Windows XP.Эта книга предназначена для опытных пользователей и администраторов, которым интересно узнать о нестандартных возможностях Windows. Тем более что довольно часто эти возможности позволяют обойти ограничения на те или иные функции Windows, установленные администратором. Р

Роман Александрович Клименко

ОС и Сети, интернет / ОС и Сети / Книги по IT