русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

ПОСЛЕДОВАТЕЛЬНОСТЬ ДЕЙСТВИЙ ИНТЕРПРЕТАТОРА SHELL


Дата добавления: 2013-12-23; просмотров: 766; Нарушение авторских прав


ИНТЕРПРЕТАТОР SHELL

Просмотр файла

Редактирование нескольких файлов

Восстановление потерянного файла

Если случайно произошло прерывание работы редактора vi, то не производится запись текста из буфера обратно в файл. Но vi сохраняет копию буфера. Когда вы вновь зарегистрируетесь в системе UNIX, вы можете восстановить файл с помощью опции -r. Введите:

vi -r filename<CR>

Все или почти все изменения, которые вы выполнили до прерывания, вновь появятся в буфере vi, и вы снова сможете продолжить редактирование файла или записать буфер в файл и завершить работу с vi.

Если вы хотите редактировать в одном сеансе более одного файла, то введите команду vi, указав имя каждого файла:

vi file1 file2<CR>

vi ответит, сколько файлов вы будете редактировать.

Например:

2 files to edit

После того, как вы отредактировали первый файл, запишите все изменения из буфера в файл file1:

:w<CR>

Система ответит на эту команду сообщением в низу экрана. В нем она напечатает имя файла, число строк и символов в этом файле. Затем вы можете начать редактировать следующий файл, задав команду:

:n<CR>

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

Один из способов просмотра файла, это воспользоваться командами прокрутки и поиска. Однако вы можете защитить себя от случайного внесения изменений в файл во время сеанса редактирования. Чтобы воспользоваться опцией "только чтение", вызовите редактор следующим образом:

view file<CR>

В табл. 12 приведены специальные опции редактора vi.

Таблица 12Специальные опции vi

Опция Функция
vi file1 file2 file3<CR> Ввести три файла (file1 file2 и file3) в буфер vi для редактирования
:w<CR> Записать текущий файл и начать
:n<CR> редактирование следующего файла
vi -r file1<CR> Восстановить изменения, сделанные в файле file1
view file<CR> Осуществить просмотр файла с помощью опции "только чтение" чтобы предотвратить случайные изменения в файле file

 




Shell выполняет определенную последовательность действий по интерпретации команд для каждой прочитанной им строки. Зная эту последовательность, можно изолировать многие проблемы на соответствующем уровне. Иногда на определенном шаге этой последовательности могут появиться странные вхождения символов. Поэтому важно знать, когда изменяются значения переменных.

Один из примеров относится к раскрытию имени файла и символу звездочки. Shell НЕ раскрывает метасимволы во время присвоения значений. Оператор F=* означает в действительности, что переменной F присваивается один символ. Когда выполняется шаг 7 последовательности действий, звездочка раскрывается как метасимвол имени файла, превращаясь во все имена файлов в текущем каталоге. Это можно продемонстрировать на примере команды "echo $F". Для того чтобы сохранить литеральное значение звездочки, нужно экранировать ее, что защитит ее от шага 7. Получается команда echo "$F". А для того чтобы вообще подавить значение переменной F, следует исключить шаг 3 - подстановку параметров. Указывая команду echo '$F', вы печатаете буквы $F, а не значение переменной F.

Действия выполняются в таком порядке:

1. Чтение входа и синтаксический разбор

2. Словесное сопровождение разбора

3. Подстановка параметров

4. Подстановка команд

5. Переназначение ввода-вывода

6. Обработка внутренних разделителей полей

7. Раскрытие имени файла

8. Трассировка выполнения

9. Обработка переменных среды

10. Выполнение команды

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

1. Командная строка или логическая конструкция читается с терминала или из файла данных. Чтение останавливается при обнаружении следующих символов: точки с запятой (;), символа фоновой задачи (&), логического и (&&), логического или (||) либо символа новой строки (\n). Выполняется разбор введенных данных на слова с учетом пробелов и табуляций.

2. Если в текущем интерпретаторе shell установлен флаг многословности (-v), то прочитанная строка отображается на стандартное устройство регистрации ошибок.

3. Выполняется подстановка параметров. Сюда входит подстановка позиционных параметров, подстановка переменных и подстановка специальных выражений. Параметры всегда имеют префикс в виде денежного знака ($).

4. Выполняется подстановка команд. Это относится ко всем командам, взятым в символы ударения (`). Такая команда вычисляется и выполняется, а результирующий текст заменяет исходное выражение в полной командной строке. Выполняемая команда может содержать последовательные команды, конвейеры или команды, сгруппированные в скобках. Любые лишние пробелы, табуляции или символы новой строки, появившиеся в результате выполнения команды, впоследствии удаляются при обработке внутренних разделителей полей. Если нужно сохранить эти лишние символы, необходимо применить двойные кавычки вокруг всего выражения.

5. Проверяется переназначение ввода-вывода. Если таковое имеется, исходный дескриптор файла (0, 1 или 2) закрывается, а затем открывается повторно с новым значением. Вновь открытый дескриптор файла занимает в файловом вводе-выводе то же место, что и закрытый файловый дескриптор. Символы переназначения удаляются из командной строки.

6. Поскольку командная строка могла измениться по сравнению со своим исходным состоянием в результате подстановок, она вновь разбирается на слова с учетом переменной среды IFS. Эта переменная содержит разделители между полями, которые отделяют слова друг от друга в командной строке. Каждый символ командной строки, который занесен в IFS, заменяется на пробел, чтобы разграничить слова. Все неэкранированные пробелы, табуляции, символы новой строки и нулевые аргументы удаляются из командной строки. Все экранированные значения переменных защищены от разбора, выполняемого в соответствии с IFS. Для того чтобы увидеть значение IFS, необходимо вывести такой конвейер команд, например:

echo "<$IFS>" | od -bc

7. Далее shell ищет все слова, для которых требуется раскрытие имени файла (метасимвола). Делается попытка сопоставить образец с файлами текущего каталога. Если подходящие файлы найдены, они заменяют выражение в командной строке. Если соответствия не обнаружено, метасимволы остаются в этом выражении. Все присвоения переменным защищены от раскрытия метасимволов. Типичным примером является команда "ls z*". Если имена каких-либо файлов начинаются с буквы z, эти имена перечисляются. В противном случае печатается сообщение "z* not found".

8. Если установлен флаг трассировки выполнения (-x), то командная строка отображается на стандартное устройство регистрации ошибок перед тем, как она будет фактически выполнена. Если это командная строка, то она выводится с префиксом "+", если же это просто присвоение значения переменной, префикса нет.

9. На этом шаге всем переменным присваиваются значения, затем в соответствии с переменной среды PATH ищется местонахождение команды. Присвоение значений переменным происходит справа налево вдоль командной строки. Поиск по переменной PATH, наоборот, происходит слева направо. Если имя найдено, то полное маршрутное имя заменяет вызов команды в командной строке. Если переменная PATH имеет пустое значение, подразумевается текущий каталог. Если в каком-либо месте исходного имени команды имеется косая черта (/), то переменная PATH не просматривается, а считается, что указано полное маршрутное имя.

10. Наконец, команда выполняется. Если это встроенная команда, текущий shell отрабатывает ее. В противном случае делается попытка загрузить команду в память, как если бы это была скомпилированная программа. Если эта попытка успешна, команда выполняется посредством системного вызова exec. Если загрузка команды не удалась, то считается, что это командный файл еще одного интерпретатора shell, и порождаемый shell читает этот командный файл в качестве своих данных.



<== предыдущая лекция | следующая лекция ==>
Специальные опции для vi | 


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.