3.    Использование конвейера.

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

Попробуйте получить список файлов и подкаталогов Вашего личного каталога, отсортированный в порядке обратном к лексикографическому. Для подобной сортировки у команды sort существует опция -r. Но ее одной недостаточно - нужно использовать и возможности shell. Можно применить уже полученные Вами знания:

ls > file-list

Эта командная строка перенаправила выходной поток команды ls в файл file-list. При желании Вы можете убедиться в этом с помощью команд cat или more.

Вторая команда сортирует содержимое файла file-list в указанном порядке и выводит его на экран:

sort -r file-list

Такой способ не самый быстрый и требует создания временного файла для сохранения результата работы команды ls.

shell предоставляет и другой вариант - использование "конвейера" (pipeline). "Конвейер" - это замечательное свойство shell, которое позволяет связать последовательность команд в конвейер, где stdout первой команды посылается прямо на stdin второй команды и так далее.

В нашем примере необходимо направить стандартный выходной поток команды ls в стандартный входной поток команды sort. Символ "|" обозначает конвейер. Поэтому Вам достаточно ввести:

ls | sort -r

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

Другой полезный пример.

Команда

ls /usr/bin

выдает на дисплей длинный список имен файлов, большинство из которых слишком быстро исчезают с экрана, и Вы не успеваете прочитать их. Подключите к просмотру перечня имен файлов каталога /usr/bin команду more:

ls /usr/bin | more

Теперь Вы можете постранично листать файл в свое удовольствие.

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

ls | sort -r | head -1

где head -1 просто выдает первую строку (-1) получаемого входного потока (в данном случае это отсортированный в обратном порядке перечень имен файлов текущего каталога, выданных командой ls).

4.   Перенаправление с добавлением.

Использование ">" для перенаправления выхода смертельно для файла, в который происходит перенаправление (если этот файл уже существует). Например,

ls > file-list

уничтожит прежнее содержимое файла file-list. Убедитесь, что теперь файл file-list содержит лишь список имен файлов и подкаталогов текущего каталога в алфавитном порядке, набрав команду

cat file-list

Если вместо ">" использовать символ перенаправления ">>", выходной поток будет добавлен к содержимому указанного файла (а не записан на место уже хранящейся в нем информации).

ls >> pokupki

В формате MS Word 97

1.    Продолжение работы с shell.

1.    Простейшие циклы shell.

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

for переменная in список_слов

do

команды

done

Например, для вывода на экран имен файлов по одному на строке достаточно задать следующий цикл:

for i in *

do

echo $i

done

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

Выходной поток цикла можно перенаправить в файл, используя символ перенаправления:

for i in *

do

echo $i

done > spisok

в результате будет создан файл spisok, содержащий список имен файлов текущего каталога по одному на строке. Проверьте, так ли это?

Выходной поток цикла можно направить и по конвейеру. Чтобы получить на экране отсортированный список файлов достаточно сделать следующее:

for i in *

do

echo $i

done | sort

Указав соответствующую опцию команды sort, Вы сможете отсортировать список в нужном Вам порядке.

Всю последовательность команд цикла можно запускать в фоновом режиме, указав в конце символ &. & применяется ко всякому циклу и конвейеру.

Можно использовать другой формат для цикла for. Единственное ограничение заключается в том, что do и done распознаются как ключевые слова только в том случае, если они появляются сразу после перевода строки или точки с запятой. В зависимости от размера цикла for иногда лучше помещать его на одной строке:

for i in список_значений; do команды; done

Список аргументов для цикла for часто получают путем выбора имен файлов по шаблону, но можно получать и любым другим способом, в частности, просто вводом аргументов.

Например, ранее Вы создали ряд программ для печати в несколько столбцов под именами 2, 3 и т.д. Все программы, кроме 2, являются связями с файлом 2. Поэтому, если скрипт 2 создан, то связи можно установить с помощью цикла for:

for i in 3 4 5 6 7 8; do ln 2 $i; done

Теперь Вы сможете выводить файлы в 3, 4, 5 , 6 , 7 и 8 столбцов.


Информация о работе «Практическая работа по предмету UNIX»
Раздел: Информатика, программирование
Количество знаков с пробелами: 81628
Количество таблиц: 1
Количество изображений: 0

Похожие работы

Скачать
47900
1
1

... KDE — свободная среда рабочего стола для UNIX-подобных операционных систем. Построена на основе кросс-платформенного инструментария разработки пользовательского интерфейса Qt. Работает преимущественно под UNIX-подобными операционными системами, которые используют графическую подсистему X Window System. Новое поколение технологии KDE 4 частично работает на Microsoft Windows и Mac OS X. В ...

Скачать
76498
0
7

... сокращает размер файла, но к связанным изображениям нельзя применять пиксельные эффекты. 3.         ОСОБЕННОСТИ РАЗРАБОТКИ ЭЛЕМЕНТОВ НАРУЖНОЙ РЕКЛАМЫ В ПАКЕТАХ ADOBE PHOTOSHOP Adobe Photoshop — растровый графический редактор, разработанный и распространяемый фирмой Adobe Systems. Этот продукт является лидером рынка в области коммерческих средств редактирования растровых изображений, и ...

Скачать
193894
73
12

аучного цикла является отсутствие возможности реальной постановки учебного, и лабораторного эксперимента. Хотя в настоящее время имеются разработки виртуальных лабораторных практикумов, однако окончательно решение проблемы требует пристального внимания специалистов различных профилей, в том числе и психолого-педагогического. 1.2 Роль технологии виртуальных приборов обучения в техническом вузе ...

Скачать
225728
6
0

... ориентированы на 32 разрядные шинные архитектуры компьютеров с процессорами 80386, 80486 или Pentium. Фирма Novell также подготовила варианты сетевой ОС NetWare, предназначенные для работы под управлением многозадачных, многопользовательских операционных систем OS/2 и UNIX. Версию 3.12 ОС NetWare можно приобрести для 20, 100 или 250 пользователей, а версия 4.0 имеет возможность поддержки до 1000 ...

0 комментариев


Наверх