русс | укр

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

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

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

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


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

Командные строки и конвейеры


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


Использование кавычек

Имеется несколько символов, которые имеют в Shell специальное значение. Это <, >, *, ?, [ и ]. Чтобы отменить специальное значение этих символов, требуется заключать их особым образом в одинарные (') или двойные (") кавычки. То же действие в отношении одиночного символа выполняет обратная наклонная черта (\). (Обратные одинарные кавычки (`) используются только для командной подстановки в Shell и не отменяют специальных значений символов.)

Все символы, заключенные в одинарные кавычки, воспринимаются как обычные текстовые символы. Например, строка:

 

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

 

только присваивает переменной echostuff значение

 

echo $? $*; ls *| wc

 

но не вызывает выполнение ни одной из команд.

Внутри двойных кавычек специальное значение сохраняется только у некоторых символов - это $, \, ` и ". В результате внутри двойных кавычек имеет место подстановка значений переменных и команд. Однако, сами по себе двойные кавычки никак не влияют на подставляемые команды, и поэтому такие символы, как *, сохраняют свое специальное значение.

Чтобы отменить специальное значение символа $ и одинарных и двойных кавычек внутри двойных кавычек, перед ними требуется дополнительно указывать символ \. Вне двойных кавычек указание символа \ перед специальным символом адекватно заключению этого специального символа в одинарные кавычки. Символ \, стоящий перед символом новой строки, обозначает игнорирование этого символа.

Благодаря этому можно продлевать командную строку.

Ниже приводятся несколько примеров использования кавычек:

 

Ввод Интерпретация
'`' обратная кавычка
'"' двойная кавычка
'`echo one`' одно слово "`echo one`"
"\"" двойная кавычка
"`echo one`" слово one
"`" cинтаксическая ошибка
one two два слова one и two
"one two" одно слово "one two"
'one two' одно слово "one two"
'one * two' одно слово "one * two"
"one * two" одно слово "one * two"
`echo one` одно слово "one"

 



 

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

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

nroff -mm text| col| lpr

 

Здесь nroff - это форматер текста, имеющийся в Системе Обработки Текстов UNIX, col - преобразует вывод для конкретного типа дисплея и lpr осуществляет печать текста. Флаг -mm обозначает одну из наиболее часто употребляемых опций форматирования, и text - это имя файла, который должен быть отформатирован. Следующие примеры демонстрируют множество возможностей, которые могут быть получены комбинированием команд описанными выше способами. Попробуйте выполнить их :

* who

Печатает на экране список зарегистрированных в системе пользователей.

* who >> log

Добавляет список загруженных пользователей в конец файла log.

* who| wc -l

Печатает количество зарегистрированных пользователей.

* who| pr

Постранично печатает список пользователей.

* who| sort

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

* who| grep bob

Печатает список пользователей, чьи имена содержат слово

bob.

 

* who| grep bob| sort| pr

Печатает постранично в алфавитном порядке список пользователей, чьи имена содержат слово bob.

 

* { date;who | wc -l; } >> log

Добавляет в файл log текущую дату и количество зарегистрированных в системе пользователей. Обратите внимание на пробелы после левой фигурной скобки и перед правой фигурной скобкой.

 

* who| sed -e 's/ .*//'| sort| uniq -d

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

Команда who сама по себе не имеет возможности получать все эти результаты - их можно получить только объединив who с другими командами. Команда who в этих примерах служит как источник информации. В качестве упражнения замените "who|" на "</etc/passwd" и убедитесь в том, что файл может также быть использован как источник данных. Помните, что аргументы переадресации могут находиться в любом месте в командной строке, даже в самом ее начале. Это значит, что конвейер

< infile >outfile sort| pr

аналогичен

sort < infile |pr >outfile

 



<== предыдущая лекция | следующая лекция ==>
Зарезервированные слова | Позиционные параметры (переменные)


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


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

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

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


 


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

 
 

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

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