"Искусство программирования на языке сценариев командной оболочки" - читать интересную книгу автора (Купер Мендель)
Искусство программирования на языке сценариев командной оболочки Часть 1. Введение Глава 1. Зачем необходимо знание языка Shell? Глава 2. Для начала о Sha-Bang Пример 2-1. cleanup: Сценарий очистки лог-файлов в /var/log Пример 2-2. cleanup: Расширенная версия предыдущего сценария. 2.1. Запуск сценария 2.2. Упражнения Часть 2. Основы Глава 3. Служебные символы Пример 3-1. Вложенные блоки и перенаправление ввода-вывода Пример 3-2. Сохранение результата исполнения вложенного блока в файл Пример 3-3. Запуск цикла в фоновом режиме Пример 3-4. Резервное архивирование всех файлов, которые были изменены в течение последних суток Глава 4. Переменные и параметры. Введение. 4.1. Подстановка переменных Пример 4-1. Присваивание значений переменным и подстановка значений переменных 4.2. Присваивание значений переменным Пример 4-2. Простое присваивание Пример 4-3. Присваивание значений переменным простое и замаскированное 4.3. Переменные Bash не имеют типа Пример 4-4. Целое число или строка? 4.4. Специальные типы переменных Пример 4-5. Позиционные параметры Пример 4-6. wh, whois выяснение имени домена Пример 4-7. Использование команды shift Глава 5. Кавычки Пример 5-1. Вывод "причудливых" переменных Пример 5-2. Экранированные символы Глава 6. Завершение и код завершения Пример 6-1. завершение / код завершения Пример 6-2. Использование символа ! для логической инверсии кода возврата Глава 7. Проверка условий 7.1. Конструкции проверки условий Пример 7-1. Что есть "истина"? Пример 7-2. Эквиваленты команды test -- /usr/bin/test, [ ], и /usr/bin/[ Пример 7-3. Арифметические выражения внутри (( )) 7.2. Операции проверки файлов Пример 7-4. Проверка "битых" ссылок 7.3. Операции сравнения Пример 7-5. Операции сравнения Пример 7-6. Проверка -- является ли строка пустой Пример 7-7. zmost 7.4. Вложенные условные операторы if/then 7.5. Проверка степени усвоения материала Глава 8. Операции и смежные темы 8.1. Операторы Пример 8-1. Наибольший общий делитель Пример 8-2. Арифметические операции Пример 8-3. Построение сложных условий, использующих amp;amp; и || 8.2. Числовые константы Пример 8-4. Различные представления числовых констант Часть 3. Углубленный материал Глава 9. К вопросу о переменных 9.1. Внутренние переменные Пример 9-1. $IFS и пробельные символы Пример 9-2. Ограничения времени ожидания ввода Пример 9-3. Еще один пример ограничения времени ожидания ввода от пользователя Пример 9-4. Ограничение времени ожидания команды read Пример 9-5. Я -- root? Пример 9-6. arglist: Вывод списка аргументов с помощью переменных $* и $@ Пример 9-7. Противоречия в переменных $* и $@ Пример 9-8. Содержимое $* и $@, когда переменная $IFS -- пуста Пример 9-9. Переменная "подчеркивание" 9.2. Работа со строками Пример 9-10. Вставка пустых строк между параграфами в текстовом файле Пример 9-11. Преобразование графических файлов из одного формата в другой, с изменением имени файла 9.2.1. Использование awk при работе со строками Пример 9-12. Альтернативный способ извлечения подстрок 9.2.2. Дальнейшее обсуждение 9.3. Подстановка параметров Пример 9-13. Подстановка параметров и сообщения об ошибках Пример 9-14. Подстановка параметров и сообщение о "порядке использования" Пример 9-15. Длина переменной Пример 9-16. Поиск по шаблону в подстановке параметров Пример 9-17. Изменение расширений в именах файлов: 9.4. Объявление переменных: declare и typeset Пример 9-20. Объявление переменных с помощью инструкции declare 9.5. Косвенные ссылки на переменные Пример 9-21. Косвенные ссылки Пример 9-22. Передача косвенных ссылок в awk 9.6. $RANDOM: генерация псевдослучайных целых чисел Пример 9-23. Генерация случайных чисел Пример 9-24. Выбор случайной карты из колоды Пример 9-25. Имитация бросания кубика с помощью RANDOM Пример 9-26. Переустановка RANDOM Пример 9-27. Получение псевдослучайных чисел с помощью awk 9.7. Двойные круглые скобки Пример 9-28. Работа с переменными в стиле языка C Глава 10. Циклы и ветвления 10.1. Циклы Пример 10-1. Простой цикл for Пример 10-2. Цикл for с двумя параметрами в каждом из элементов списка Пример 10-3. Fileinfo: обработка списка файлов, находящегося в переменной Пример 10-4. Обработка списка файлов в цикле for Пример 10-5. Цикл for без списка аргументов Пример 10-6. Создание списка аргументов в цикле for с помощью операции подстановки команд Пример 10-7. grep для бинарных файлов Пример 10-8. Список всех пользователей системы Пример 10-9. Проверка авторства всех бинарных файлов в текущем каталоге Пример 10-10. Список символических ссылок в каталоге Пример 10-11. Список символических ссылок в каталоге, сохраняемый в файле Пример 10-12. C-подобный синтаксис оператора цикла for Пример 10-13. Работа с командой efax в пакетном режиме Пример 10-14. Простой цикл while Пример 10-15. Другой пример цикла while Пример 10-16. Цикл while с несколькими условиями Пример 10-17. C-подобный синтаксис оформления цикла while Пример 10-18. Цикл until 10.2. Вложенные циклы Пример 10-19. Вложенный цикл 10.3. Управление ходом выполнения цикла Пример 10-20. Команды break и continue в цикле Пример 10-21. Прерывание многоуровневых циклов Пример 10-22. Передача управление в начало внешнего цикла Пример 10-23. Живой пример использования "continue N" 10.4. Операторы выбора Пример 10-24. Использование case Пример 10-25. Создание меню с помощью case Пример 10-26. Оператор case допускает использовать подстановку команд вместо анализируемой переменной Пример 10-27. Простой пример сравнения строк Пример 10-28. Проверка ввода Пример 10-29. Создание меню с помощью select Пример 10-30. Создание меню с помощью select в функции Глава 11. Внутренние команды Пример 11-1. printf в действии Пример 11-2. Ввод значений переменных с помощью read Пример 11-3. Пример использования команды read без указания переменной для ввода Пример 11-4. Ввод многострочного текста с помощью read Пример 11-5. Обнаружение нажатия на курсорные клавиши Пример 11-6. Чтение командой read из файла через перенаправление Пример 11-7. Смена текущего каталога Пример 11-8. Команда let, арифметические операции. Пример 11-9. Демонстрация команды eval Пример 11-10. Принудительное завершение сеанса Пример 11-11. Шифрование по алгоритму "rot13" Пример 11-12. Замена имени переменной на ее значение, в исходном тексте программы на языке Perl, с помощью eval Пример 11-13. Установка значений аргументов с помощью команды set Пример 11-14. Изменение значений позиционных параметров (аргументов) Пример 11-15. "Сброс" переменной Пример 11-16. Передача переменных во вложенный сценарий awk, с помощью export Пример 11-17. Прием опций/аргументов, передаваемых сценарию, с помощью getopts Пример 11-18. "Подключение" внешнего файла Пример 11-19. Пример (бесполезный) сценария, который подключает себя самого. Пример 11-21. Сценарий, который запускает себя самого 11.1. Команды управления заданиями Пример 11-22. Ожидание завершения процесса перед тем как продолжить работу Пример 11-23. Сценарий, завершающий себя сам с помощью команды kill Глава 12. Внешние команды, программы и утилиты 12.1. Базовые команды Пример 12-1. Создание оглавления диска для записи CDR, с помощью команды ls 12.2. Более сложные команды Пример 12-2. Badname, удаление файлов в текущем каталоге, имена которых содержат недопустимые символы и пробелы. Пример 12-3. Удаление файла по его номеру inode Пример 12-4. Использование команды xargs для мониторинга системного журнала Пример 12-5. copydir, копирование файлов из текущего каталога в другое место, с помощью xargs Пример 12-6. Пример работы с expr 12.3. Команды для работы с датой и временем Пример 12-7. Команда date 12.4. Команды обработки текста Пример 12-8. Частота встречаемости отдельных слов Пример 12-9. Какие из файлов являются сценариями? Пример 12-10. Генератор 10-значных случайных чисел Пример 12-11. Мониторинг системного журнала с помощью tail Пример 12-12. Сценарий-эмулятор "grep" Пример 12-13. Поиск слов в словаре Пример 12-14. toupper: Преобразование символов в верхний регистр. Пример 12-15. lowercase: Изменение имен всех файлов в текущем каталоге в нижний регистр. Пример 12-16. du: Преобразование текстового файла из формата DOS в формат UNIX. Пример 12-17. rot13: Сверхслабое шифрование по алгоритму rot13. Пример 12-18. Более "сложный" шифр Пример 12-20. Пример форматирования списка файлов в каталоге Пример 12-21. nl: Самонумерующийся сценарий. 12.5. Команды для работы с файлами и архивами Пример 12-23. Распаковка архива rpm Пример 12-24. Удаление комментариев из файла с текстом программы на языке C Пример 12-25. Исследование каталога /usr/X11R6/bin Пример 12-26. "Расширенная" команда strings Пример 12-27. Пример сравнения двух файлов с помощью cmp. Пример 12-28. Утилиты basename и dirname Пример 12-29. Проверка целостности файла Пример 12-30. Декодирование файлов 12.6. Команды для работы с сетью Пример 12-31. Сценарий, отправляющий себя самого по электронной почте 12.7. Команды управления терминалом 12.8. Команды выполнения математических операций Пример 12-32. Ежемесячные выплаты по займу Пример 12-33. Перевод чисел из одной системы счисления в другую Пример 12-34. Пример взаимодействия bc со "встроенным документом" Пример 12-35. Вычисление числа "пи" Пример 12-36. Преобразование чисел из десятичной в шестнадцатиричную систему счисления Пример 12-37. Разложение числа на простые множители Пример 12-38. Расчет гипотенузы прямоугольного треугольника 12.9. Прочие команды Пример 12-39. Использование seq для генерации списка аргументов цикла for Пример 12-40. Использование getopt для разбора аргументов командной строки Пример 12-41. Захват нажатых клавиш Пример 12-42. Надежное удаление файла Пример 12-43. Генератор имен файлов Пример 12-44. Преобразование метров в мили Пример 12-45. Пример работы с m4 Глава 13. Команды системного администрирования Пример 13-1. Установка символа "забоя" Пример 13-2. невидимый пароль: Отключение эхо-вывода на терминал Пример 13-3. Пример 13-4. Использование команды pidof при остановке процесса Пример 13-5. Проверка образа CD Пример 13-6. Создание файловой системы в обычном файле Пример 13-7. Добавление нового жесткого диска Пример 13-8. Сценарий killall, из каталога /etc/rc.d/init.d Глава 14. Подстановка команд Пример 14-1. Глупая выходка Пример 14-2. Запись результатов выполнения цикла в переменную Глава 15. Арифметические подстановки Глава 16. Перенаправление ввода/вывода 16.1. С помощью команды exec Пример 16-1. Перенаправление stdin с помощью exec Пример 16-2. Перенаправление stdout с помощью exec Пример 16-3. Одновременное перенаправление устройств, stdin и stdout, с помощью команды exec 16.2. Перенаправление для блоков кода Пример 16-4. Перенаправление в цикл while Пример 16-5. Альтернативная форма перенаправления в цикле while Пример 16-6. Перенаправление в цикл until Пример 16-7. Перенаправление в цикл for Пример 16-8. Перенаправление устройств (stdin и stdout) в цикле for Пример 16-9. Перенаправление в конструкции if/then Пример 16-10. Файл с именами "names.data", для примеров выше 16.3. Область применения Пример 16-11. Регистрация событий Глава 17. Встроенные документы Пример 17-1. dummyfile: Создание 2-х строчного файла-заготовки Пример 17-2. broadcast: Передача сообщения всем, работающим в системе, пользователям Пример 17-3. Вывод многострочных сообщений с помощью cat Пример 17-4. Вывод многострочных сообщений с подавлением символов табуляции Пример 17-5. Встроенные документы и подстановка параметров Пример 17-6. Отключение подстановки параметров Пример 17-7. Передача пары файлов во входящий каталог на "Sunsite" Пример 17-8. Встроенные документы и функции Пример 17-9. "Анонимный" Встроенный Документ Пример 17-10. Блочный комментарий Пример 17-11. Встроенная справка к сценарию Часть 4. Материал повышенной сложности Глава 18. Регулярные выражения 18.1. Краткое введение в регулярные выражения 18.2. Globbing -- Подстановка имен файлов Глава 19. Подоболочки, или Subshells Пример 19-1. Область видимости переменных Пример 19-2. Личные настройки пользователей Пример 19-3. Запуск нескольких процессов в подоболочках Глава 20. Ограниченный режим командной оболочки Пример 20-1. Запуск сценария в ограниченном режиме Глава 21. Подстановка процессов Глава 22. Функции Пример 22-1. Простая функция 22.1. Сложные функции и сложности с функциями Пример 22-2. Функция с аргументами Пример 22-3. Наибольшее из двух чисел Пример 22-4. Преобразование чисел в римскую форму записи Пример 22-6. Сравнение двух больших целых чисел Пример 22-7. Настоящее имя пользователя 22.2. Локальные переменные Пример 22-8. Область видимости локальных переменных 22.2.1. Локальные переменные делают возможной рекурсию. Пример 22-9. Использование локальных переменных при рекурсии Глава 23. Псевдонимы Пример 23-1. Псевдонимы в сценарии Пример 23-2. unalias: Объявление и удаление псевдонимов Глава 24. Списки команд Пример 24-1. Проверка аргументов командной строки с помощью "И-списка" Пример 24-2. Еще один пример проверки аргументов с помощью "И-списков" Пример 24-3. Комбинирование "ИЛИ-списков" и "И-списков" Глава 25. Массивы Пример 25-1. Простой массив Пример 25-2. Форматирование стихотворения Пример 25-3. Некоторые специфичные особенности массивов Пример 25-4. Пустые массивы и пустые элементы Пример 25-5. Копирование и конкатенация массивов Пример 25-6. Старая, добрая: "Пузырьковая" сортировка Пример 25-7. Вложенные массивы и косвенные ссылки Пример 25-8. Пример реализации алгоритма Решето Эратосфена Пример 25-9. Эмуляция структуры "СТЕК" ("первый вошел -- последний вышел") Пример 25-10. Исследование математических последовательностей Пример 25-11. Эмуляция массива с двумя измерениями Глава 26. Файлы Глава 27. /dev и /proc 27.1. /dev 27.2. /proc Пример 27-1. Поиск файла программы по идентификатору процесса Пример 27-2. Проверка состояния соединения Глава 28. /dev/zero и /dev/null Пример 28-1. Удаление cookie-файлов Пример 28-2. Создание файла подкачки (swapfile), с помощью /dev/zero Пример 28-3. Создание электронного диска Глава 29. Отладка сценариев Пример 29-1. Сценарий, содержащий ошибку Пример 29-2. Пропущено ключевое слово Пример 29-3. test24 Пример 29-4. Проверка условия с помощью функции "assert" Пример 29-5. Ловушка на выходе Пример 29-6. Удаление временного файла при нажатии на Control-C Пример 29-7. Трассировка переменной Глава 30. Необязательные параметры (ключи) Глава 31. Широко распространенные ошибки Пример 31-1. Западня в подоболочке Пример 31-2. Передача вывода от команды echo команде read, по конвейеру Глава 32. Стиль программирования 32.1. Неофициальные рекомендации по оформлению сценариев Глава 33. Разное 33.1. Интерактивный и неинтерактивный режим работы 33.2. Сценарии-обертки Пример 33-1. сценарий-обертка Пример 33-2. Более сложный пример сценария-обертки Пример 33-3. Сценарий-обертка вокруг сценария awk Пример 33-4. Сценарий на языке Perl, встроенный в Bash-скрипт Пример 33-5. Комбинирование сценария Bash и Perl в одном файле 33.3. Операции сравнения: Альтернативные решения 33.4. Рекурсия Пример 33-6. Сценарий (бесполезный), который вызывает себя сам Пример 33-7. Сценарий имеющий практическую ценность), который вызывает себя сам 33.5. "Цветные" сценарии Пример 33-8. "Цветная" адресная книга Пример 33-9. Вывод цветного текста 33.6. Оптимизация 33.7. Разные советы Пример 33-10. Необычный способ передачи возвращаемого значения Пример 33-11. Необычный способ получения нескольких возвращаемых значений Пример 33-12. Передача массива в функцию и возврат массива из функции Пример 33-13. Игры с анаграммами 33.8. Проблемы безопасности 33.9. Проблемы переносимости 33.10. Сценарии командной оболочки под Windows Глава 34. Bash, версия 2 Пример 34-1. Расширение строк Пример 34-2. Косвенные ссылки на переменные -- новый метод Пример 34-3. Простая база данных, с применением косвенных ссылок Пример 34-4. Массивы и другие хитрости для раздачи колоды карт в четыре руки Глава 35. Замечания и дополнения 35.1. От автора 35.2. Об авторе 35.3. Инструменты, использовавшиеся при создании книги 35.3.1. Аппаратура 35.3.2. Программное обеспечение 35.4. Благодарности Литература Приложение A. Дополнительные примеры сценариев Пример A-1. manview: Просмотр страниц руководств man Пример A-2. mailformat: Форматирование электронных писем Пример A-3. rn: Очень простая утилита для переименования файлов Пример A-4. blank-rename: переименование файлов, чьи имена содержат пробелы Пример A-5. encryptedpw: Передача файла на ftp-сервер, с использованием пароля Пример A-6. copy-cd: Копирование компакт-дисков с данными Пример A-7. Последовательности Коллаца (Collatz) Пример A-8. days-between: Подсчет числа дней между двумя датами Пример A-9. Создание "словаря" Пример A-10. Расчет индекса "созвучности" Пример A-11. "Игра "Жизнь"" Пример A-12. Файл с первым поколением для игры "Жизнь" Пример A-13. behead: Удаление заголовков из электронных писем и новостей Пример A-14. ftpget: Скачивание файлов по ftp Пример A-15. Указание на авторские права Пример A-16. password: Генератор случайного 8-ми символьного пароля Пример A-17. fifo: Создание резервных копий с помощью именованных каналов Пример A-18. Генерация простых чисел, с использованием оператора деления по модулю (остаток от деления) Пример A-19. tree: Вывод дерева каталогов Пример A-20. Функции для работы со строками Пример A-21. Directory information Пример A-22. Объектно ориентированная база данных Приложение B. Маленький учебник по Sed и Awk B.1. Sed B.2. Awk Приложение C. Коды завершения, имеющие предопределенный смысл Приложение D. Подробное введение в операции ввода-вывода и перенаправление ввода-вывода Приложение E. Локализация Приложение F. История команд Приложение G. Пример файла .bashrc Пример G-1. Пример файла .bashrc Приложение H. Преобразование пакетных (*.bat) файлов DOS в сценарии командной оболочки Пример H-1. VIEWDATA.BAT: пакетный файл DOS Пример H-2. viewdata.sh: Результат преобразования VIEWDATA.BAT в сценарий командной оболочки Приложение I. Упражнения I.1. Анализ сценариев I.2. Создание сценариев Приложение J. Авторские права
Искусство программирования на языке сценариев командной оболочки Данное руководство не предполагает наличие у читателя познаний в области программирования на языке сценариев, однако, быстро восполняет этот недостаток, постепенно, шаг за шагом раскрывая мудрость и красоту UNIX. Это руководство может рассматриваться как учебник, предназначенный для самостоятельного изучения или как справочник по программированию на shell. Руководство снабжено серией хорошо прокомментированных примеров, поскольку лучший путь к изучению языка сценариев -- это написание сценариев.
Advanced Bash-Scripting Guide
Автор: Мендель Купер (Mendel Cooper [email protected] )
Перевод: Андрей Киселев lt;[email protected] ;
Посвящения
Посвящается Аните -- источнику очарования