- •§2 Unix Shell – лабораторные работы
- •Лабораторная работа №2: Написание скриптов. Практика использования Unix Shell. Обработка журнальных файлов.
- •Некоторые базовые элементы и средства языка Unix Shell
- •Конструкции языка Shell
- •Написание скриптов Unix Shell
- •Exit – завершение скрипта и выход. В качестве необязательного параметра можно указать код возврата. Подробнее см. Man exit.
- •Задание для выполнения лаб. Работы №2
- •Контрольные вопросы
Задание для выполнения лаб. Работы №2
Напишите скрипт, создающий в текущем каталоге файлы с именами, переданными в качестве пераметров.
Зайдите в каталог /home/LOGS/CHEL_bio3k/squid. Там расположен журнальный файл прокси-сервера SQUID. ВНИМАНИЕ! Файл имеет ОЧЕНЬ большой размер! Работайте с ним аккуратно! Напишите скрипты (пп. 2 – 7). В каждом задании файл access.log можно читать только один раз. Промежуточные результаты нельзя сохранять во внешних файлах. Желательно сделать каждый скрипт одним конвейером.
Сколько запросов GET, POST, CONNECT, OPTIONS, HEAD и т.д. было выполнено всеми клиентами? Сколько это в % от общего числа запросов?
Найдите в выводе столбец, содержащий имя учетной записи на прокси-сервере и подведите статистику по суммарному количеству запросов, сделанных каждым пользователем. Упорядочить вывод по убыванию количества.
Для заданного пользователя (имя передается в качестве параметра скрипту) покажите информацию по количеству сделанных запросов: GET, POST, CONNECT и т.д. Выведите в порядке возрастания.
Посчитайте общее количество скачанной заданным пользователем (имя пользователя передается скрипту в качестве параметра) информации (поле №5 от начала).
Найдите столбец, содержащий информацию о HTTP-коде возврата прокси-сервера (2xx – успешно, 3xx – перенаправление, 4xx – ошибка, 5xx – ошибка конфигурации сервера). Модифицируйте п.5 таким образом, чтобы скрипт отображал по заданному пользователю суммарный объем успешно загруженных веб-страниц (2xx, 3xx) и суммарный объем сообщений об ошибках (4xx, 5xx)
Найдите клиентский IP-адрес (поле №3), с которого было сделано больше всего запросов? Больше всех запросов с ошибками (4xx,5xx)?
Контрольные вопросы
Как задать переменную? Массив? Как получить значение переменной? Длину в символах? Количество элементов массива?
Что такое переменные окружения? Зачем они нужны? Приведите примеры.
Что такое специальные переменные Shell? Приведите примеры использования.
Объясните смысл одинарных, двойных и обратных кавычек. В чем разница? Приведите примеры использования.
Как вычисляются арифметические выражения в Shell? Можно ли производить вычисления с плавающей точкой? Как? Приведите примеры.
Что такое перенаправление ввода-вывода? Как оно работает? Зачем применяется? Приведите примеры
Что такое конвейер? Зачем он нужен? Приведите примеры
Поясните смысл операторов ||, &&, {}, (), ;. Где удобнее всего их использовать?
Расскажите о достоинствах и недостатках размещения текста скриптов в файлах и программирования в командной строке.
Как можно удобно записать длинную цепочку команд с конвейерами при расположении текста скрипта в файле?
Как вставить комментарии в текст программы?
Приведите примеры разных способов запуска скрипта, расположенного в файле. В чем преимущества и недостатки каждого способа?
Приведите примеры использования test в скриптах.
Объясните конструкцию cat file | while read –a a; do echo “${a[2]}” done. Сделайте аналог без цикла.
Объясните конструкцию: for i in `ls -1 ~/*.txt`; do cat ${i}; done. Придумайте несколько аналогов.
