[ Страница назад | Страница вперед | Содержание | Индекс | Домой | Юридическая информация | Поиск ]

Руководство пользователя: Операционная система и устройства


Команды оболочки Bourne

Когда вы вводите команду в оболочке Bourne, оболочка сначала выполняет предварительную обработку команды, делая все подстановки. Затем она выполняет команду, если соблюдены следующие условия:

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

  1. /usr/bin
  2. /etc
  3. /usr/sbin
  4. /usr/ucb
  5. $HOME/bin
  6. /usr/bin/X11
  7. /sbin
  8. Текущий каталог

Оболочка просматривает каталоги по очереди. Если в просматриваемом каталоге команда не найдена, оболочка переходит к следующему каталогу.

Примечание: Порядок просмотра каталогов определяется переменной PATH. Вы можете изменить его, задав другое значение переменной PATH.

Если вы укажете конкретный путь при запуске команды (например, /usr/bin/sort), то оболочка будет выполнять поиск только в указанном каталоге. Если имя команды содержит косую черту (/), то путь поиска не применяется.

Вы можете указать полный путь от корневого каталога (например, /usr/bin/sort). Вы можете также указать неполный путь (путь относительно текущего каталога). Например, если вы укажете:

bin/myfile

то оболочка будет искать каталог bin и его файл myfile в текущем каталоге.

Примечание: В оболочке с ограничениями команды, содержащие символ / (косая черта), не выполняются.

Для каждой выполненной команды оболочка запоминает ее расположение в пути поиска (во избежание выполнения впоследствии ненужных команд exec). Если команда находится в некорневом каталоге, то ее расположение должно определяться заново при каждом изменении текущего каталога. Оболочка "забывает" все известные ей расположения в случае изменения переменной PATH или запуска команды hash -r.

В этом разделе приведена информация по следующим темам:

Заключение символов в кавычки

Некоторые символы для оболочки являются специальными. Иногда возникает необходимость указать такие специальные символы как обычные. Для этого следует заключить строку символов в одинарные (') или двойные кавычки (") или поставить обратную косую черту (\) перед одним символом.

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

stuff='echo $? $*; ls * | wc'

присвоит строку символов echo $? $*; ls * | wc переменной stuff. Оболочка не будет выполнять команды echo, ls и wc, а также раскрывать переменные $? и $* и специальный символ * (звездочка).

Будучи заключенными в двойные кавычки, символы $ (знак доллара), ` (обратная кавычка) и " (двойная кавычка) сохраняют свое специальное значение, в то время как все остальные символы воспринимаются как обычные. Таким образом, в строке, заключенной в двойные кавычки, выполняется подстановка команд и переменных. Кроме того, кавычки не влияют на команды, полученные в результате подстановки в строке, заключенной в кавычки, поэтому специальные символы в таких командах сохраняют свое значение.

Рассмотрим следующую последовательность строк:

ls *

файл1 файл2 файл3

message="Этот каталог содержит `ls * ` " 

echo $message

Этот каталог содержит файл1 файл2 файл3

Приведенный пример показывает, что специальный символ * (звездочка) был раскрыт при подстановке команды.

Если необходимо отменить специальное значение символов $ (знак доллара), ` (обратная кавычка) и " (двойная кавычка) в строке, заключенной в двойные кавычки, поставьте перед символом знак \ (обратная косая черта). Если двойные кавычки не применяются, то постановка обратной косой черты перед символом эквивалентна заключению символа в одинарные кавычки. Следовательно, обратная косая черта, стоящая перед символом перехода на новую строку (т.е. обратная косая черта в конце строки), скрывает символ перехода на новую строку и позволяет продолжить команду на следующей физической строке.

Обработка сигналов

Оболочка игнорирует сигналы INTERRUPT и QUIT для выполняемой команды, если команда оканчивается символом & (амперсанд), т.е. если команда выполняется в фоновом режиме. В остальных случаях значения сигналов наследуются от родительской оболочки, за исключением сигнала SEGMENTATION VIOLATION (нарушение сегментации). Дополнительная информация приведена в справке по встроенной команде оболочки Bourne trap.

Составные команды оболочки Bourne

Составными называются следующие команды:

Если не указано противное, вывод составной команды - это значение, выданное последней простой командой.

Зарезервированные слова

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

for            do              done
case           esac
if             then             fi
elif           else
while          until
{              }
(              )


forИдентификатор [inСлово . . .]do Списокdone Присваивает параметру Идентификатор одно или несколько слов, заданных параметром Слово (по одному слову поочередно), и запускает команды, перечисленные в параметре Список. Если вы опустите inСлово . . ., то команда for запустит команды, перечисленные в параметре Список, для каждого заданного позиционного параметра; обработка будет завершена, когда все позиционные параметры будут использованы.
caseСлово in Шаблон [|Шаблон] . . . )Список;; [Шаблон [|Шаблон] . . . )Список;;]. . . esac Запускает команды, перечисленные в параметре Список и связанные с первым из параметров Шаблон, соответствующим значению параметра Слово. В шаблонах применяется тот же формат и обозначения, что и в подстановке имен файлов, за исключением того, что символы / (косая черта), начальная точка или точка, стоящая сразу за косой чертой, могут служить символами подстановки.
if Список then Список [elif Список then Список] . . . [else Список] fi Запускает команды, перечисленные в параметре Список после команды if. Если команда возвращает нуль, то оболочка запускает команды, перечисленные в параметре Список после команды then. Иначе оболочка запускает команды, перечисленные в параметре Список после команды elif (если последняя указана). Если результирующим значением будет ноль, то оболочка запустит команды, перечисленные в параметре Список после следующей команды then. В противном случае оболочка запустит команды, перечисленные в параметре Список после команды else (если последняя указана). Если команды else - Список и then - Список отсутствуют, то команда if возвращает нулевое значение.
while Список do Список done Запускает команды, перечисленные в параметре Список после команды while. Если последняя команда в параметре Список команды while возвращает нуль, оболочка выполняет команды, перечисленные в параметре Список команды do. Выполнение цикла по всем спискам продолжается до тех пор, пока последняя команда из параметра Список команды while не возвратит ненулевое значение. Если команды в параметре Список команды do отсутствуют, то команда while возвращает нулевое значение.
until Списокdo Список done Запускает команды, перечисленные в параметре Список после команды until. Если последняя команда в параметре Список команды until возвращает ненулевое значение, оболочка выполняет команды, перечисленные в параметре Список команды do. Выполнение цикла по всем спискам продолжается до тех пор, пока последняя команда из параметра Список команды until не возвратит нуль. Если команды в параметре Список команды do отсутствуют, то команда until возвращает нулевое значение.
(Список) Запускает команды, перечисленные в параметре Список, в подоболочке.
{Список; } Запускает команды, перечисленные в параметре Список, в текущей оболочке, не запуская подоболочку.
Имя () {Список} Определяет функцию, указанную в параметре Имя. Тело функции образует список команд в фигурных скобках в параметре Список.

Встроенные команды оболочки Bourne

Особые команды встроены в оболочку Bourne и выполняются как ее процессы. Если не указано противное, вывод команд записывается в файл с дескриптором 1 (stdout) с результирующим кодом 0 (ноль), если команда не содержит синтаксических ошибок. Разрешается перенаправление ввода и вывода.

Полный перечень встроенных команд в алфавитном порядке приведен в разделе Список встроенных команд оболочки Bourne.

Следующие особые команды обрабатываются несколько иначе, чем остальные встроенные команды:

:
(двоеточие) exec shift
. (точка)     exit
times
break         export          trap
continue      readonly        wait
eval          return

Оболочка Bourne обрабатывает эти команды следующим образом:

Описание особых команд

В оболочке Bourne предусмотрены следующие особые встроенные команды:

Встроенные команды  
: Возвращает нуль.
. Файл Считывает и выполняет команды из файла, указанного в параметре Файл, после чего возвращает к исходному уровню. Подоболочка не запускается. Каталог указанного файла определяется по пути поиска, заданного переменной PATH.
break [ n ] Прерывает внешний цикл команды for, while или until, если он выполняется. Если вы укажете переменную n, то команда break прервет n уровней циклов.
continue [ n ] Возобновляет следующий внешний цикл команды for, while или until. Если вы укажете переменную n, то команда возобновит цикл n-го уровня.
cdКаталог] Переходит к каталогу Каталог. Если Каталог не указан, будет использовано значение переменной оболочки HOME. Путь к каталогу Каталог определяется переменной оболочки CDPATH. Переменная CDPATH - это список альтернативных имен каталогов, перечисленных через двоеточие. Пустой путь (путь по умолчанию) соответствует текущему каталогу. Этот пустой путь указан сразу после знака равенства в операторе присвоения или между двоеточиями-разделителями в списке путей. Если Каталог начинается с символа / (косая черта), то путь поиска не применяется. В противном случае, поиск выполняется в каждом каталоге, указанном в переменной CDPATH.

Примечание: В оболочке с ограничениями команду оболочки cd запускать нельзя.
echoСтрока . . . ] Записывает строки символов в устройство стандартного вывода. Информация о применении и параметрах приведена в справке по команде echo. Флаг -n не поддерживается.
eval [ Аргумент . . . ] Считывает аргументы в качестве входных данных оболочки и запускает сформированные команды.
exec [ Аргумент . . . ] Запускает команду, указанную в параметре Аргумент, вместо данной оболочки, не создавая новый процесс. Допустимы аргументы ввода и вывода; если других аргументов нет, то с их помощью можно изменять входные или выходные данные оболочки. Эту команду не рекомендуется выполнять в начальной оболочке.
exit [ n ] Завершает работу оболочки с результирующим значением, указанным в параметре n. Если этот параметр не указан, то значением выхода будет результат выполнения последней команды (работу оболочки можно также завершить нажатием клавиш Ctrl-D). В качестве n допустимы значения от 0 до 255 включительно.
export [ Имя . . . ] Помечает указанные имена для автоматического экспортирования в среды выполняемых впоследствии команд. Если параметр Имя опущен, то команда export выдает список всех имен, экспортированных в данной оболочке. Имена функций экспортировать нельзя.
hash [ -r ][ Команда . . . ] Находит и запоминает расположение в пути поиска всех команд, указанных в параметре Команда. Флаг -r удаляет всю хранящуюся в оболочке информацию о расположениях. Если ни флаг, ни команды не указаны, то оболочка выдаст информацию о командах, расположения которых известны, в следующем формате:

Запуски   Стоимость   Команда

В колонке Запуски указано, сколько раз оболочка запускала команду. В колонке Стоимость указан объем работы, который потребовался на поиск команды в пути поиска. В колонке Команда указан путь к команде. В некоторых случаях необходимо повторно определить путь к команде, например, если путь относительный, т.е. указан от текущего каталога, а текущий каталог изменился. Команды, для которых может потребоваться такая операция, помечены символом * (звездочка) рядом с колонкой Запуски. Значение в колонке Стоимость увеличивается при каждом вычислении пути.
pwd Показывает текущий каталог. Описание опций приведено в справке по команде pwd.
read [ Имя  . . . ] Считывает одну строку из стандартного ввода. Первое слово в этой строке присваивается первому параметру Имя, второе - второму параметру Имя и т.д.; последнему параметру Имя присваиваются все оставшиеся слова. Если команда не обнаруживает символ конца файла, то она возвращает нуль.
readonly [ Имя . . . ] Помечает имя, указанное в параметре Имя, как доступное только для чтения. Сбросить значение имени нельзя. Если Имя не указано, то команда readonly выдает список всех имен, доступных только для чтения.
return [ n ] Завершает работу функции со значением возврата n. Если переменная n опущена, то функция возвратит состояние последней команды, которую она выполнила. Эта команда применима только к функциям оболочки.
set [ Флаг [ Аргумент ] . . . ] Задает один или несколько следующих флагов:

-a

Помечает для экспортирования все переменные, для которых выполняется присвоение. Если присвоение предшествует имени команды, то атрибут экспортирования действует только в данной среде выполнения команды, за исключением случаев, когда присвоение предшествует одной из особых встроенных команд. В последнем случае, атрибут экспортирования остается действительным и после обработки встроенной команды. Если присвоение не предшествует имени команды или если аргумент получен в результате выполнения команды getopts или read, то атрибут экспортирования остается действительным, пока переменная не будет сброшена.

-e
Немедленно завершает работу, если для команды выполнены все перечисленные ниже условия:
  • Команда завершает работу с положительным значением выхода.
  • Команда не входит в составной список команды while, until или if.
  • Команда не участвует в проверке по спискам AND или OR.
  • Команда не является командой конвейера, перед которой стоит зарезервированное слово ! (восклицательный знак).

-f
Отключает подстановку имен файлов.

-h
Находит и запоминает команды, вызываемые внутри определений функций. (Обычно поиск этих команд происходит при выполнении функции. Более подробные сведения приведены в справке по команде hash.

-k
Помещает в среду выполнения команды все параметры ключевых слов, а не только те, которые предшествуют имени команды.

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

-t
Завершает работу после считывания и выполнения одной команды.

-u
Рассматривает незаданную переменную как ошибку и немедленно завершает работу при подстановке переменных. Работа интерактивной оболочки при этом не завершается.

-v
Показывает входные строки оболочки по мере их считывания.

-x
Показывает команды и их аргументы перед выполнением.

--
Не изменяет ни один из флагов. Это полезно при указании позиционного параметра $1 в строке, начинающейся со знака дефис (-).
 

Указание плюса (+) вместо дефиса (-) сбрасывает флаги. Эти флаги можно также задать в командной строке оболочки. Специальная переменная $- содержит текущий набор флагов.

Любой Аргумент, указанный в команде set, становится позиционным параметром и присваивается $1, $2 и т.д. по порядку. Если флаг и Аргумент опущены, команда set выдает все имена и значения текущих переменных оболочки.

shift [n] Сдвигает аргументы командной строки влево, т.е. переприсваивает значения позиционных параметров, аннулируя текущее значение $1 и присваивая значение $2 параметру $1, значение $3 - параметру $2 и т.д. Если в командной строке указано больше 9 аргументов, то 10-й присваивается параметру $9, а остальные остаются неприсвоенными (до следующей команды shift). Если аргументов 9 или меньше, то команда shift сбрасывает позиционный параметр с наибольшим номером, которому присвоено значение.

Позиционный параметр $0 никогда не сдвигается. Команда shift n - это сокращенная форма записи n команд последовательного сдвига. Значение параметра n по умолчанию равно 1.

testВыражение | [ Выражение ] Вычисляет условные выражения. Описание флагов и параметров приведено в справке по команде test. Флаг -h не поддерживается встроенной командой тестирования в bsh.
times Показывает общее время, которое заняло выполнение пользовательских и системных процессов в оболочке.
trap [ Команда ] [ n] . . .  Запускает команду, указанную в параметре Команда, когда оболочка принимает один или несколько сигналов, заданных параметром n. Порядок запуска команд trap определяется номерами сигналов. Любая попытка задать прерывание (trap) по сигналу, проигнорированному при входе в текущую оболочку, будет неудачной.

Примечание:Оболочка просматривает параметр Команда первый раз, когда прерывание устанавливается, а второй раз - когда оно происходит.

Если команда опущена, то все прерывания, указанные в параметре n, сбрасываются к их текущим значениям. Если указана пустая строка, то сигнал игнорируется оболочкой и выполняемыми ей командами. Если параметр n равен нулю, то указанная команда выполняется при выходе из оболочки. Если ни команда, ни сигнал не заданы, то команда trap выдает список команд, связанных с номерами сигналов.

type [Имя . . . ] Для каждого имени, заданного в поле Имя, указывает способ обработки его оболочкой как имени команды.
ulimit [-HS] [ -c | -d | -f | -m | -s | -t] [limit] Показывает или настраивает выделенные ресурсы оболочки. Предусмотрено два режима просмотра параметров ресурсов оболочки: по отдельности для каждого ресурса или для группы ресурсов. Режим по умолчанию - просмотр ресурсов, которым присвоено "мягкое" значение (нижняя граница), в группе.

Значения ресурсов оболочки зависят от ИД пользователя текущей оболочки. "Жесткий" уровень ресурса может задать только пользователь текущей оболочки с правами доступа root. Если у вас нет прав доступа root, то попытка установить "жесткий" уровень ресурса приведет к ошибке. По умолчанию пользователь root задает и "жесткий", и "мягкий" уровни конкретного ресурса. По этой причине, пользователь root должен быть осторожен при указании флагов -S, -H или флагов по умолчанию для установки ограничений. Пользователи, не имеющие прав доступа root, могут задавать только "мягкую" границу ресурса. После того, как ограничение снижено пользователем без прав доступа root, его нельзя увеличить, даже до первоначального системного значения.

Для того чтобы задать ограничение на ресурс, выберите соответствующий флаг и ограничение для нового ресурса, которое должно быть целым числом. За один раз можно задать только одно ограничение на ресурс. Если вы укажете несколько флагов ресурсов, результаты будут непредсказуемыми. По умолчанию команда ulimit с одним новым значением в командной строке задает размер файла оболочки. Флаг -f необязателен.

Допустимы следующие флаги команды ulimit:

-c
Задает или показывает сегмент ядра оболочки.

-d
Задает или показывает сегмент данных оболочки.

-f
Задает или показывает размер файла оболочки.

-H
Задает или показывает "жесткую" границу ресурса (доступен только пользователю root)

-m
Задает или показывает объем памяти оболочки.

-s
Задает или показывает сегмент стека оболочки.

-S
Задает или показывает "мягкую" границу ресурса.

-t
Задает или показывает максимальное время CPU для оболочки.
umask [nnn] Определяет права доступа к файлу. Это значение, совместно с правами доступа создающего процесса, определяет права доступа к создаваемому файлу. Значение по умолчанию: 022. Если значение не указано, команда umask показывает текущее значение.
unset [Имя . . .] Сбрасывает переменные и функции, имена которых перечислены в параметре Имя. Сбросить переменные оболочки PATH, PS1, PS2, MAILCHECK и IFS нельзя.
wait [n] Ожидает завершения дочернего процесса, номер которого указан в параметре n, и возвращает состояние выхода этого процесса. Если параметр n опущен, то оболочка ожидает завершения всех текущих активных дочерних процессов и возвращает нуль.

Подстановка команд в оболочке Bourne

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

today=`date`

присваивает строку, задающую текущую дату, переменной today. Следующая операция присвоения сохраняет в переменной files количество файлов в текущем каталоге:

files=`ls | wc -l`

Вы можете выполнить подстановку команд в любой команде, создающей стандартный вывод.

Если вы хотите указать вложенные подстановки, поставьте обратную косую черту (\) перед каждой из открывающих обратных кавычек, например:

logmsg=`echo Ваш начальный каталог: \`pwd\``

Кроме того, вы можете присваивать значения переменным оболочки косвенно с помощью особой команды read. Эта команда считывает строку из стандартного ввода (с клавиатуры) и последовательно присваивает ее слова любым указанным переменным. Например, команда:

read first init last

считывает строку:

И. П. Иванов

то результат будет тем же, как если бы вы ввели:

first=И. init=П. last=Иванов

Особая команда read присваивает все лишние слова последней переменной.


[ Страница назад | Страница вперед | Содержание | Индекс | Домой | Юридическая информация | Поиск ]