Прикладные свободные программы и системы в школе - [34]
«Арифметические» и «логические» выражения
Выражения обычно вводятся в программу с использованием конструкции арифметического раскрытия выражений «$((выражение))». Заключенная в двойные круглые цепочка символов интерпретируется как арифметическое или логическое выражение, результат вычисления которого оболочкой подставляется на место вхождения этой конструкции в командной строке (Рис. 1-72).
Выражение интерпретируется как если бы оно было заключено в двойные кавычки «"» и «"», т.е. раскрываются имена переменных, предваренные знаком доллара «$», но специальное значение прочих символов (например, звездочки) отменяется.
Выражение состоит из переменных, констант и знаков операций. Стандартом определены операции, перечисленные в таблице на Рис. 1-73).
Знакомые с языком «Си» легко узнают в этом списке список стандартных операций этого языка за исключением унарных инкрементов и декрементов (префиксных и постфиксных), функции «sizeof()». В отличие от стандарта «Си», стандарт на язык оболочки требует определения этих операций лишь на длинных беззнаковых целых.
Поскольку руководства и справочники по «Си» общедоступны, разбирать операции подробно мы не будем. Они, в основном, соответствуют общепринятой математической и программистской нотации для выражений, за исключением представления символа равенства сочетанием «==», а не символом «=».
Чаще всего арифметическое раскрытие применяется в команде присваивания, но его можно использовать в любом месте (например, для задания числового операнда команды или числового параметра ключа) (Рис. 1-74).
Помимо конструкции арифметического раскрытия, существует стандартная команда «expr», также вычисляющая значение выражения (с несколько иным синтаксисом, в частности, использующим для проверки на равенство знака «=»), переданного ей в качестве аргумента, и выводящая его результат. Выражение при этом следует экранировать двойными кавычками «"» и «"».
Команду «expr» лучше не применять, если ее можно заменить командой «echo $((выражение))» (с учетом отличий в синтаксисе), но в чужих сценариях она может встретиться. Кроме того, она, в отличие от арифметического раскрытия, позволяет выполнять сравнение строк на равенство. Выполнить подстановку выводимого командой «expr» результата в командную строку можно посредством механизма обратных апострофов, обсуждающегося ниже.
При настоятельной необходимости применить в сценарии численные методы, включающие работу с вещественными числами в представлении с плавающим десятичным знаком, можно воспользоваться стандартной командой вычисления выражения с произвольной точностью «bc», которая обладает также внутренними возможностями сценирования. Ее описание выходит за рамки этого курса.
Генерация кодов возврата
Обычно директивные языки для определения условий в операторах условного и циклического исполнения применяют механизм выражений. Язык оболочки в этом плане достаточно эксцентричен, и использует с этой целью механизм кодов возврата (переменной «$?») команды ОС. Дополнительную путаницу вводит то, что в открытых системах успешный код возврата — ноль, который, таким образом, соответствует логическому значению «истинно», в то время, как в «логических» выражениях, обсуждавшихся выше, используется соглашение «Си» (ноль, наоборот, соответствует значению «ложно», а «истинно» — любому ненулевому значению).
(Отсутствие простого механизма согласования между раскрытием арифметических выражений и условиями условного и циклического исполнения, различие в синтаксисе а) раскрываемых выражений, б) команды «expr» и в) обсуждаемой ниже команды «test» являются серьезными недостатками языка оболочки, заметно усложняющими его освоение даже опытными программистами.)
Хотя условие условного или циклического исполнения может задаваться самыми разными командами (поскольку любая команда завершается с каким-либо кодом возврата), чаще всего в соответствующих операторах используется команда «test». Эта команда вычисляет переданное ей в виде набора аргументов выражение и завершается с кодом возврата «0» (ноль), если оно истинно, «1», если оно ложно и «2», если выражение содержит синтаксическую ошибку. Она настолько важна для программирования оболочки, что для нее введено особое сокращение: вместо подачи команды «test» с аргументами можно просто заключить аргументы в квадратные скобки «[» и «]», отделив их от первого и последнего аргумента промежутками (Рис. 1-75).
В качестве аргументов команды «test» могут выступать константы, переменные и символические обозначения операций, а также круглые скобки, позволяющие менять приоритет исполнения операций. Обратите внимание, что выражение передается команде в виде совокупности аргументов, а не в виде одного аргумента, поэтому аргументы должны разделяться промежутками, заключать выражение целиком в кавычки нельзя, а любые специальные символы должны экранироваться.
Командой «test» поддерживаются операции, перечисленные в таблице на Рис. 1-76. Они различаются по типу (точнее, по интерпретации) операндов, но все возвращают «логические» (в указанном выше смысле) значения.
Курс лекций, включенных в брошюру, знакомит читателя с популярными свободными программами и системами, полезными при преподавании информатики в средней школе. В обзор вошли основы открытых операционных систем, сведения о пакете «офисных» программ OpenOffice.org, коммуникационном пакете Mozilla, графическом редакторе GIMP, современных графических средах GNOME и KDE и других программах.Для преподавателей информатики и методистов, а также для студентов и аспирантов соответствующих специальностей.© 2002-3, Максим Отставнов.© 2002, Андрей Добровольский (раздел 3.1).Использован текст лекций, публиковавшихся автором в приложении к газете «Первое сентября» «Информатика» (http://inf.1september.ru) в 2002-3 г., материалы брошюры «Прикладные свободные программы в школе» (М.: 2003 г.), а также фрагменты статей, ранее публиковавшихся в журналах «Компьютерра» и «Домашний компьютер».Материалы, представленные в этой книге, также доступны в Интернет на странице www.otstavnov.com/fsft на условиях Свободной лицензии ГНУ на документацию (GNU FDL)
n1`Глава 2 из отчета Фонда Новая экономика Министерству экономического развития и торговли по теме «Анализ результатов и разработка предложений по созданию механизмов поддержки (в том числе за счет средств федерального бюджета) проектов по использованию ИКТ в экономике, социальной сфере, государственном управлении на региональном и муниципальном уровнях власти». Работа выполнена в рамках ФЦП «Электронная Россия». Дается очерк перспектив модели коммерческого программного обеспечения, известной как свободное программное обеспечение (СПО), в части удовлетворения потребности государственных органов и организаций в компьютерных программах, в сравнении с альтернативной (несвободной) моделью.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.