![]() |
![]() |
![]() |
Вход на сайт Навигация по сайту Любить и уважать Бонус-счастливчики
|
Содержимое файла "Цели работы222.doc" (без форматирования) Цели работы: Продолжить изучение командного интерпретатора shell. Изучить простые регулярные выражения. Приобрести навыки автоматизированной обработки текстовой информации. Домашнее задание 1. Команда sort (sort [options] [files]) - сортировка строк в указанных файлах. Выполняется сравнение указанных полей для каждой пары строк либо, если поля не заданы, посимвольное сравнение в машинно-определяемой последовательности. 2. Команда read ( read [options] variablel [variable2...]) - прочитать одну строку со стандартного потока ввода и присвоить слова-строки соответствующим переменным, а все лишние слова добавить к последней переменной. Если задана только одна переменная, она станет равной всей прочитанной строке. Код возврата - 0, если не встретился символ EOF. 3. Команда echo (echo [options] [string]) - печать строки на стандартный вывод с завершающим символом новой строки. Если строка (string) опущена, печатается символ новой строки. Некоторые управляющие символы: - \с - подавление символа новой строки; - \n - cимвол новой строки; - \t - горизонтальная табуляция. 4. Команда find (find [pathnames] [conditions]) - инструмент для отбора определенных групп файлов. Выполняет обход дерева каталогов, начиная с pathname и отбирает файлы, удовлетворяющие перечисленным критериям (conditions). По умолчанию дерево каталогов начинается с текущего каталога. Критерий print автоматически включается по умолчанию, если не заданы никакие другие критерии. Критерии отбора могут быть: сгруппированы путем заключения их в экранированные скобки \(\), инвертированы с помощью символа ! (\!для интерпретатора С shell), заданы списком альтернатив (разделение с помощью -о) или повторены (наложением дополнительных ограничений на поиск. Рассмотрим пример: find /logs –name ‘log.[0-9][0-9][0-9]’ -atime +7 exec rm {}\; -name pattern - найти файлы, имена которых соответствуют шаблону (pattern). При использовании специальных символов необходимо экранировать их кавычками или символом \; -atime +п |—п \ п - найти файлы, обращение к которым в последний раз производилось более чем п (+п) дней назад либо менее чем п (-п) дней назад, либо ровно п дней назад. Следует помнить, что работа find меняет время последнего обращения для каталогов, указанных в командной строке. -exec command {}\; - выполнить команду command для всех файлов, отобранных find (при условии успешного завершения find, т.е. возврата 0). При выполнении command фигурные скобки заменяются именем текущего файла. Параметр завершается экранированным символом точка с запятой \;. Значит, в рассмотренном примере выполняется поиск файлов в каталоге /logs, имена которых соответствуют шаблону ‘log.[0-9][0-9][0-9]’, обращение к которым в последний раз производилось более чем 7 (+7) дней назад. И для отобранных файлов должна быть выполнена команда rm - удаление. 5. Команда grep (grep [options] pattern [files] ) – поиск в перечисленных файлах строки текста, соответствующей регулярному выражению pattern. Код завершения: 0 - если найдена хотя бы одна строка, удовлетворяющая критерию поиска, 1 - если такие строки не найдены, 2 - если произошла ошибка. При работе с grep регулярные выражения заключаются в кавычки. (Если шаблон содержит символ $, необходимо использовать одинарные кавычки, например '$200', либо экранировать символ $: "\$200"). 6. awk – язык сценариев, средство обработки текста и инструмент фильтрации командного интерпретатора shell. Основная задача утилиты – просмотр текстового файла или строки с целью нахождения в них информации, соответствующей заданному критерию отбора. После выборки нужных данных можно применить к ним функции, выполняющие обработку текста. Сложные сценарии awk обычно применяются для форматирования отчетов на базе текстовых файлов. Рассмотрим пример выборки командой awk текстовых полей: df | awk ‘{print $1 “\t” $3}’ > /tmp/test; df [options ] [name ] - oтображение количества свободного дискового пространства на всех подмонтированных файловых системах либо для системы с определенным именем (name), df не отображает информацию по неподмонтированным файловым системам. В данном случае информация, полученная командой df обрабатывается командой awk, при чем awk выделяет и выводит только первый и третий столбцы (‘{print $1 “\t” $3}’), после чего результат сохраняется в файл /tmp/test. Работа в лаборатории 1. Написать скрипт, требующий ввода вашего имени и имен соседей в интерактивном режиме (команда read). Вывод приветствия – команда echo, используя символы \n, \t, \с. #!/bin/sh echo Vvedite svou familiyu read x echo Vvedite familiyu pervogo soseda read y echo Vvedite familiyu vtorogo soseda read z echo -e \"Privet "<$x>"!\" '\n\r'\"Privet "<$y>"!\" '\n\r'\"Privet "<$z>"!\" В результате работы скрипта, приветствия будут выведены в следующей форме: "Privet < Kuznecov>!" "Privet < Gragdanov>!" "Privet Если в последней строке скрипта заменить управляющие символы '\n\r' на '\t' echo -e \"Privet "<$x>"!\" '\t'\"Privet "<$y>"!\" '\t'\"Privet "<$z>"!\" приветствия будут выведены в одну строку, но между ними будет выполнена горизонтальная табуляция. 2. Дополнить скрипт командой sort, для вывода имен в алфавитном порядке. #!/bin/sh echo Vvedite svou familiyu read x echo Vvedite familiyu pervogo soseda read y echo Vvedite familiyu vtorogo soseda read z echo -e \"Privet "<$x>"!\" '\n\r'\"Privet "<$y>"!\" '\n\r'\"Privet "<$z>"!\" | sort >/root/Documents/spisok #sort /root/Documents/spisok cat /root/Documents/spisok При этом содержимое файла /root/Documents/spisok: "Privet < Kalnev >!" "Privet < Gragdanov >!" "Privet < Kuznecov>!" 3. Поиск файлов. 1) Найти файлы в домашнем каталоге с расширением txt. Используем команду find в формате: find /home/andrey –name “*.txt” 2) Найти файлы в домашнем каталоге, которые начинаются на букву К и длиной 3 символа. find /home/and –name ‘[K][0-9a-zA-Z][0-9a-zA-Z]’ 3) Найти файлы, имя которых состоит из двух любых букв и двух любых цифр. find /home –name ‘[a-zA-Z][a-zA-Z][0-9][0-9]’ Данная команда найдем файлы по указанному шаблону без учета расширения. Для поиска, включая расширение find /home –name ‘[a-zA-Z][a-zA-Z][0-9][0-9].*’ 4) Найти файлы в каталоге /etc доступные только для чтения всем пользователям. В данном случае необходимо использовать команду find с критерием отбора –perm. –perm nnn - найти файлы, восьмеричное значение прав доступа которых (например, rwx) в точности совпадает с ппп (например, -rw-rw-r - соответствует значению 664). Следовательно find /etc –perm -444 4. С помощью команды cat объединить в один три файла. Можно объединить несколько файлов в один новый при помощи оператора перенаправления > или добавить файлы в конец уже существующего при помощи >>. Копирование файлов в один: cat ch1 ch2 ch3 > common Добавление к файлу: cat notes1notes2 >> notes 5. Поэкспериментировать с файлами из каталогов /proc и /etc, используя команды awk и grep. Научиться выделять нужные строки по шаблону. Научиться выделять колонки из файлов. Рассмотрим файл /proc/stat, содержимое которого cpu 2265 0 1179 1621635 2844 53 130 cpu0 2265 0 1179 1621635 2844 53 130 intr 16343245 16281075 20822 0 0 10 0 140 0 1 0 0 22 34490 0 4678 2007 ctxt 1221272 btime 1178972570 processes 2158 procs_running 1 procs_blocked 0 Теперь выделим первый и шестой столбец и запишем их в файл /root/test сat stat | awk ‘{print $1 “\t” $6}’ > /root/test Содержимое /root/test: cpu 2844 cpu0 2844 intr 0 ctxt btime processes procs_running procs_blocked Перейдем к поиску строк. Например, необходимо найти строки, в которых содержится символ с. Для этого используем команду grep grep”c” stat > /root/test1 В этом случае в /root/test1 содержится cpu 2322 0 1195 1724832 3572 54 130 cpu0 2322 0 1195 1724832 3572 54 130 ctxt 1290689 processes 2201 procs_running 2 procs_blocked 0 Выделим строки, которые начинаются с символа с grep”^c” stat > /root/test2 Содержимое файла /root/test2: cpu 2319 0 1194 1719296 3572 54 130 cpu0 2319 0 1194 1719296 3572 54 130 ctxt 1286789 Для поиска строк можно использовать и утилиту awk. Например, необходимо найти строку, в первом поле которой есть слово cpu awk ‘$1 == “cpu”’ /proc/stat > /root/test3 При этом содержимое /root/test3 выглядит следующим образом: cpu 2322 0 1195 1724832 3572 54130 6. Написать скрипт, определяющий, установлен на ПК CD- или DVD-привод. #!/bin/sh df > /root/res2 if [ $# -eq 0 ] then echo -e Pri zapuske vvedite ustroystva, kotorie simvoliziruyut '\n\r'DVD-privod i CD-privod sootvetstvenno! exit 1 fi grep $1 /root/res2 > /root/s if [ $? -ne 0 ] then echo DVD-privod ne podmontirovan!!! else echo Podmontirovan DVD-privod!!! fi grep $2 /root/res2 > /root/s if [ $? -ne 0 ] then echo CD-privod ne podmontirovan!!! else echo Podmontirovan CD-privod!!! fi Команда df выдает информацию только по подмонтированным файловым системам. В данном случае эта информация перенаправляется в файл /root/res2. Затем команда grep ищет соответствие введенным параметрам в данном файле. В случае обнаружения слова, код возврата команды grep равен нулю, выдается сообщение о том, что подмонтирован соответствующий привод. В противном случае код возврата команды ненулевой, выдается сообщение о том, что соответствующий привод не подмонтирован. Выводы В ходе лабораторной работы мы продолжили изучение командного интерпретатора shell. Мы ознакомились с работой команд sort, read, echo, find, grep и приобрели навыки работы с простыми регулярными выражениями, разнообразными шаблонами и критериями поиска. Кроме того, мы научились применять приемы автоматизированной обработки текстовой информации, приобрели начальные знания о языке сценариев awk, который является наряду с другими системами одним из важнейших инструментов фильтрации в интерпретаторе shell. |
Посетителей: 36, из них зарегестрированных: 0, гостей: 36 Зарегистрированные пользователи: Подробно | Страница сгенерирована за 0.0659 сек. |