Shell обеспечивает различные механизмы настройки вашей рабочей среды. Мы уже упоминали ранее, что shell больше, чем команда интерпре - polpoz.ru o_O
Главная
Поиск по ключевым словам:
страница 1
Похожие работы
Shell обеспечивает различные механизмы настройки вашей рабочей среды. Мы уже упоминали - страница №1/1

Лабораторная работа 5

Оболочки в Linux
5 Установка среды

Shell обеспечивает различные механизмы настройки вашей рабочей среды. Мы уже упоминали ранее, что shell больше, чем команда интерпретации - это также мощный язык программирования. Но обсуждение программирования на shell увело бы нас далеко в сторону, а мы бы хотели познакомить вас с некоторыми способами упрощения вашей работы в UNIX за счет использования некоторых дополнительных полезных свойств shell.

Как мы упоминали ранее, различные оболочки используют различный синтаксис для написания своих программ. Например, Tcsh использует синтаксис, похожий на язык Си, в то время как shell Баурна имеет другой синтаксис. В этом разделе мы не будем заниматься их различиями, а рассмотрим примеры, используя синтаксис shell Баурна (прим. переводчика: как все обычно и делают).


5.1 Сценарии shell

прим. переводчика: применительно к программам этого типа в англоязычной литературе последнее время преимущественно используют слово script - "сценарий", хотя то, что под этим имеется в виду во многих книгах на русском называется "традиционно" как "программа на shell" или "командный файл"

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

/home/larry# cat chapter1 chapter2 chapter3 > book

/home/larry# wc -l book

/home/larry# lp book

об'единяют файлы, содержащие главы книги: chapter1, chapter2, chapter3 и помещают результат в файл book. Затем подсчитывается число строк в книге (в файле book) и отображается на дисплее и, наконец, печатается командой lp.

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

#!/bin/sh

# A shell script to create and print the book

cat chapter1 chapter2 chapter3 > book

wc -l book

lp book

Если этот сценарий будет помещен в файл makebook, то вы можете просто использовать далее команду



/home/larry# makebook

которая выполнит все команды сценария. Сценарии shell - это обычные текстовые файлы, которые вы можете создавать с помощью редактора вроде emacs или vi.

Давайте посмотрим на этот сценарий. Первая строка ``#!bin/sh/'' говорит о том, что этот файл есть сценарий и сообщает shell, как выполнить сценарий. В данном случае необходимо передать сценарий для выполнения команде bin/sh/, где bin/sh/ - сама программа shell. Почему это важно? В большинстве систем UNIX bin/sh/ - это shell Баурновского типа, например bash. Инициируя работу сценария shell выполняется, используя bin/sh/, при этом мы гарантируем, что сценарий будет выполняться именно под shell Баурновского типа (а не, скажем, под C shell). Этот сценарий будет выполняться под shell Баурна, даже если вы используете Tcsh (или какой-то другой C shell) как свою рабочую оболочку.

Вторая строка представляет из себя комментарий. Комментарии начинаются символом ``#'' и могут продолжаться до конца строки - они игнорируются shell и могут использоваться программистом для пояснений.

Остальные строки сценария - обычные команды в том виде, в каком бы вы их вводили прямо на выполнение. Shell читает каждую строку сценария и выполняет эту строку, как будто вы ввели эту строку в ответ на подсказку shell.

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

/home/larry# chmod u+x makebook

чтобы дать самому себе разрешение на выполнение shell-сценария makebook.




5.2 Перемещение shell и среда

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



ВНИМАНИЕ! Имейте в виду, что Tcsh, также, как и C shell, используют различные механизмы определения переменных, отличающиеся от используемых здесь. Здесь обсуждается shell Баурна. Когда вы присвоите значение переменной (используя оператор ``='' ), вы сможете получить это значение, добавив перед именем переменной символ ``$'', как это показано ниже

/home/larry# foo=``hello there''

Переменной foo присвоено значение ``hello there''. Теперь вы можете обратиться к этой переменной, добавив перед именем символ ``$''. Команда

/home/larry# echo $foo

hello there

/home/larry#

дает тот же самый результат, что и

/home/larry# echo ``hello there''

hello there

/home/larry#

Эти переменные являются внутренними для shell. Это означает, что только shell имеет доступ к этим переменным. Это может быть полезно для сценариев; если вам надо сохранить информацию о имени файла, вы, например, можете поместить его в переменную. Команда set может показать вам перечень всех определенных переменных shell.

Shell позволяет экспортировать переменные в среду. Среда - это множество переменных, к которым могут иметь доступ все выполняемые команды. Определив однажды переменную внутри shell (прим. переводчика: определить - здесь означает "присвоить значение"), командой export вы можете передать ее среде.



ВНИМАНИЕ! Здесь вновь есть отличие между Bash и Tcsh. При использовании Tcsh используется другой синтаксис для помещения переменных в среду (используется команда setenv). Дополнительную информацию можно найти в Руководстве по Tcsh.

Среда очень важна в системах UNIX. Она позволяет конфигурировать некоторые команды за счет установки переменных, о которых знают команды.

Вот небольшой пример. Переменная среды PAGER используется командой man. Она указывает команду, которая используется в свою очередь командой man для просмотра Руководства на экране. Если вы установите в качестве значения PAGER имя другой команды, то эта команда вместо будет обеспечивать просмотр вместо more (которая применялась по умолчанию).

Присвойте PAGER значение ``cat''. Выдача на экран руководства будет вся разом, а не поэкранно, как это делала команда more.

/home/larry# PAGER=cat

Теперь экспортируйте PAGER в среду.

/home/larry# export PAGER

Попробуйте команду man ls. Руководство промелькнет по вашему экрану без (желательных) задержек.

Теперь, если присвоить PAGER значение ``more'', то для выдачи на экран будет использоваться команда more.

/home/larry# PAGER=more

Обратим внимание на то, что нам не надо заново использовать команду export после изменения значения PAGER. Необходимо только раз экспортировать переменную; любые изменения, которые будут происходить после этого, будут отражаться в среде.

Страницы Руководства для конкретных команд содержат информацию о том, использует ли команда какие-то переменные среды. Например, Руководство по команде man говорит о том, что для определения режима выдачи страницы руководства на экран используется переменная PAGER. Некоторые команды совместно используют переменные среды, например, многие команды используют переменную среды EDITOR для указания используемого редактора.

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

/home/larry/papers# echo $HOME

/home/larry

Другая интересная переменная среды - PS1, которая определяет главную подсказки shell. Например,

/home/larry# PS1=``Your command, please: ''

Your command, please:

Для переустановки подсказки обратно в нормальное состояние (когда она показывает текущий рабочий каталог, после которого следует значек ``#''), выполните следующее:

Your command, please: PS1=``\w# ''

/home/larry#

В Руководстве bash есть подробное описание синтаксиса, используемого при установке подсказки.




5.2.1 Переменная среды PATH

Когда вы используете команду ls, как shell находит соответствующий выполняемый файл (программу) для ls? На самом деле в большинстве систем ls находится в /bin/ls. shell использует переменную среды PATH ("ТРОПА") для указания возможного местоположения выполняемых файлов соответствующих команд.

Например, ваша переменная PATH может иметь значение

/bin:/usr/bin:/usr/local/bin:.

Это список каталогов (в которых shell будет искать команду), отделяемых друг от друга двоеточием ``:''. Когда вы используете команду ls, shell прежде всего проверяет наличие /bin/ls, затем /usr/bin/ls и т.д.

Обратите внимание на то, что переменная PATH не помогает находить обычные файлы. Например, если вы используете команду

/home/larry# cp foo bar

shell не использует PATH для нахождения местопребывания файлов foo и bar - предполагается, что эти имена однозначно определяют место. shell использует PATH только для нахождения команды cp.



Это экономит вам массу времени; это означает, что вы не обязаны помнить, где находятся выполняемые файлы команд. Во многих системах выполняемые файлы разбросаны во многих местах, таких как /usr/bin, /bin или /usr/local/bin. Вместо того, чтобы писать полное имя команды (вроде /usr/bin/cp), вы просто указываете в PATH перечень каталогов, которые бы вы хотели, чтобы shell автоматически просматривал.

Обратите внимание, что PATH содержит ``.'', что означает "текущий рабочий каталог".


izumzum.ru