|
Искусство программирования на языке сценариев командной оболочки
Мендель Купер thegrendel@theriver.com;
- Часть 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. Благодарности
|
|