Справочник по программированию на shell. Руководство снабжено серией хорошо прокомментированных примеров, поскольку




страница1/44
Дата15.08.2016
Размер5.54 Mb.
  1   2   3   4   5   6   7   8   9   ...   44

Advanced Bash-Scripting Guide

Искусство программирования на языке сценариев командной оболочки

Автор: Mendel Cooper



<thegrendel@theriver.com>

Перевод: Андрей Киселев



<kis_an@mail.ru>

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

Последнюю версию документа, в виде .bz2 архива, содержащем исходные тексты в формате SGML и HTML, вы найдете на домашней страничке автора. Там же вы найдете и change log.




Посвящения


Посвящается Аните -- источнику очарования

Содержание

Часть 1. Введение

1. Зачем необходимо знание языка Shell?

2. Для начала о Sha-Bang

2.1. Запуск сценария

2.2. Упражнения

Часть 2. Основы

3. Служебные символы

4. Переменные и параметры. Введение.

4.1. Подстановка переменных

4.2. Присваивание значений переменным

4.3. Переменные Bash не имеют типа

4.4. Специальные типы переменных

5. Кавычки

6. Завершение и код завершения

7. Проверка условий

7.1. Конструкции проверки условий

7.2. Операции проверки файлов

7.3. Операции сравнения

7.4. Вложенные условные операторы if/then

7.5. Проверка степени усвоения материала

8. Операции и смежные темы

8.1. Операторы

8.2. Числовые константы

Часть 3. Углубленный материал

9. К вопросу о переменных

9.1. Внутренние переменные

9.2. Работа со строками

9.3. Подстановка параметров

9.4. Объявление переменных: declare и typeset

9.5. Косвенные ссылки на переменные

9.6. $RANDOM: генерация псевдослучайных целых чисел

9.7. Двойные круглые скобки

10. Циклы и ветвления

10.1. Циклы

10.2. Вложенные циклы

10.3. Управление ходом выполнения цикла

10.4. Операторы выбора

11. Внутренние команды

11.1. Команды управления заданиями

12. Внешние команды, программы и утилиты

12.1. Базовые команды

12.2. Более сложные команды

12.3. Команды для работы с датой и временем

12.4. Команды обработки текста

12.5. Команды для работы с файлами и архивами

12.6. Команды для работы с сетью

12.7. Команды управления терминалом

12.8. Команды выполнения математических операций

12.9. Прочие команды

13. Команды системного администрирования

14. Подстановка команд

15. Арифметические подстановки

16. Перенаправление ввода/вывода

16.1. С помощью команды exec

16.2. Перенаправление для блоков кода

16.3. Область применения

17. Встроенные документы

Часть 4. Материал повышенной сложности

18. Регулярные выражения

18.1. Краткое введение в регулярные выражения

18.2. Globbing -- Подстановка имен файлов

19. Подоболочки, или Subshells

20. Ограниченный режим командной оболочки

21. Подстановка процессов

22. Функции

22.1. Сложные функции и сложности с функциями

22.2. Локальные переменные

23. Псевдонимы

24. Списки команд

25. Массивы

26. Файлы

27. /dev и /proc

27.1. /dev

27.2. /proc

28. /dev/zero и /dev/null

29. Отладка сценариев

30. Необязательные параметры (ключи)

31. Широко распространенные ошибки

32. Стиль программирования

32.1. Неофициальные рекомендации по оформлению сценариев

33. Разное

33.1. Интерактивный и неинтерактивный режим работы

33.2. Сценарии-обертки

33.3. Операции сравнения: Альтернативные решения

33.4. Рекурсия

33.5. "Цветные" сценарии

33.6. Оптимизация

33.7. Разные советы

33.8. Проблемы безопасности

33.9. Проблемы переносимости

33.10. Сценарии командной оболочки под Windows

34. Bash, версия 2

35. Замечания и дополнения

35.1. От автора

35.2. Об авторе

35.3. Инструменты, использовавшиеся при создании книги

35.3.1. Аппаратура

35.3.2. Программное обеспечение

35.4. Благодарности



Литература

A. Дополнительные примеры сценариев

B. Маленький учебник по Sed и Awk

B.1. Sed

B.2. Awk

C. Коды завершения, имеющие предопределенный смысл

D. Подробное введение в операции ввода-вывода и перенаправление ввода-вывода

E. Локализация

F. История команд

G. Пример файла .bashrc

H. Преобразование пакетных (*.bat) файлов DOS в сценарии командной оболочки

I. Упражнения

I.1. Анализ сценариев

I.2. Создание сценариев

J. Авторские права

Перечень таблиц

11-1. Идентификация заданий

30-1. Ключи Bash

33-1. Числовые значения цвета в escape-последовательностях

B-1. Основные операции sed

B-2. Примеры операций в sed

C-1. "Зарезервированные" коды завершения

H-1. Ключевые слова/переменные/операторы пакетных файлов DOS и их аналоги командной оболочки

H-2. Команды DOS и их эквиваленты в UNIX

Перечень приложений

2-1. cleanup: Сценарий очистки лог-файлов в /var/log

2-2. cleanup: Расширенная версия предыдущего сценария.

3-1. Вложенные блоки и перенаправление ввода-вывода

3-2. Сохранение результата исполнения вложенного блока в файл

3-3. Запуск цикла в фоновом режиме

3-4. Резервное архивирование всех файлов, которые были изменены в течение последних суток

4-1. Присваивание значений переменным и подстановка значений переменных

4-2. Простое присваивание

4-3. Присваивание значений переменным простое и замаскированное

4-4. Целое число или строка?

4-5. Позиционные параметры

4-6. wh, whois выяснение имени домена

4-7. Использование команды shift

5-1. Вывод "причудливых" переменных

5-2. Экранированные символы

6-1. завершение / код завершения

6-2. Использование символа ! для логической инверсии кода возврата

7-1. Что есть "истина"?

7-2. Эквиваленты команды test -- /usr/bin/test, [ ], и /usr/bin/[

7-3. Арифметические выражения внутри (( ))

7-4. Проверка "битых" ссылок

7-5. Операции сравнения

7-6. Проверка -- является ли строка пустой

7-7. zmost

8-1. Наибольший общий делитель

8-2. Арифметические операции

8-3. Построение сложных условий, использующих && и ||

8-4. Различные представления числовых констант

9-1. $IFS и пробельные символы

9-2. Ограничения времени ожидания ввода

9-3. Еще один пример ограничения времени ожидания ввода от пользователя

9-4. Ограничение времени ожидания команды read

9-5. Я -- root?

9-6. arglist: Вывод списка аргументов с помощью переменных $* и $@

9-7. Противоречия в переменных $* и $@

9-8. Содержимое $* и $@, когда переменная $IFS -- пуста

9-9. Переменная "подчеркивание"

9-10. Вставка пустых строк между параграфами в текстовом файле

9-11. Преобразование графических файлов из одного формата в другой, с изменением имени файла

9-12. Альтернативный способ извлечения подстрок

9-13. Подстановка параметров и сообщения об ошибках

9-14. Подстановка параметров и сообщение о "порядке использования"

9-15. Длина переменной

9-16. Поиск по шаблону в подстановке параметров

9-17. Изменение расширений в именах файлов:

9-18. Поиск по шаблону при анализе произвольных строк

9-19. Поиск префиксов и суффиксов с заменой по шаблону

9-20. Объявление переменных с помощью инструкции declare

9-21. Косвенные ссылки

9-22. Передача косвенных ссылок в awk

9-23. Генерация случайных чисел

9-24. Выбор случайной карты из колоды

9-25. Имитация бросания кубика с помощью RANDOM

9-26. Переустановка RANDOM

9-27. Получение псевдослучайных чисел с помощью awk

9-28. Работа с переменными в стиле языка C

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-19. Вложенный цикл

10-20. Команды break и continue в цикле

10-21. Прерывание многоуровневых циклов

10-22. Передача управление в начало внешнего цикла

10-23. Живой пример использования "continue N"

10-24. Использование case

10-25. Создание меню с помощью case

10-26. Оператор case допускает использовать подстановку команд вместо анализируемой переменной

10-27. Простой пример сравнения строк

10-28. Проверка ввода

10-29. Создание меню с помощью select

10-30. Создание меню с помощью select в функции

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-20. Команда exec

11-21. Сценарий, который запускает себя самого

11-22. Ожидание завершения процесса перед тем как продолжить работу

11-23. Сценарий, завершающий себя сам с помощью команды kill

12-1. Создание оглавления диска для записи CDR, с помощью команды ls

12-2. Badname, удаление файлов в текущем каталоге, имена которых содержат недопустимые символы и пробелы.

12-3. Удаление файла по его номеру inode

12-4. Использование команды xargs для мониторинга системного журнала

12-5. copydir, копирование файлов из текущего каталога в другое место, с помощью xargs

12-6. Пример работы с expr

12-7. Команда date

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-19. Отформатированный список файлов.

12-20. Пример форматирования списка файлов в каталоге

12-21. nl: Самонумерующийся сценарий.

12-22. Пример перемещения дерева каталогов с помощью cpio

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-31. Сценарий, отправляющий себя самого по электронной почте

12-32. Ежемесячные выплаты по займу

12-33. Перевод чисел из одной системы счисления в другую

12-34. Пример взаимодействия bc со "встроенным документом"

12-35. Вычисление числа "пи"

12-36. Преобразование чисел из десятичной в шестнадцатиричную систему счисления

12-37. Разложение числа на простые множители

12-38. Расчет гипотенузы прямоугольного треугольника

12-39. Использование seq для генерации списка аргументов цикла for

12-40. Использование getopt для разбора аргументов командной строки

12-41. Захват нажатых клавиш

12-42. Надежное удаление файла

12-43. Генератор имен файлов

12-44. Преобразование метров в мили

12-45. Пример работы с m4

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-1. Глупая выходка

14-2. Запись результатов выполнения цикла в переменную

16-1. Перенаправление stdin с помощью exec

16-2. Перенаправление stdout с помощью exec

16-3. Одновременное перенаправление устройств, stdin и stdout, с помощью команды exec

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-11. Регистрация событий

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. Встроенная справка к сценарию

19-1. Область видимости переменных

19-2. Личные настройки пользователей

19-3. Запуск нескольких процессов в подоболочках

20-1. Запуск сценария в ограниченном режиме

22-1. Простая функция

22-2. Функция с аргументами

22-3. Наибольшее из двух чисел

22-4. Преобразование чисел в римскую форму записи

22-5. Проверка возможности возврата функциями больших значений

22-6. Сравнение двух больших целых чисел

22-7. Настоящее имя пользователя

22-8. Область видимости локальных переменных

22-9. Использование локальных переменных при рекурсии

23-1. Псевдонимы в сценарии

23-2. unalias: Объявление и удаление псевдонимов

24-1. Проверка аргументов командной строки с помощью "И-списка"

24-2. Еще один пример проверки аргументов с помощью "И-списков"

24-3. Комбинирование "ИЛИ-списков" и "И-списков"

25-1. Простой массив

25-2. Форматирование стихотворения

25-3. Некоторые специфичные особенности массивов

25-4. Пустые массивы и пустые элементы

25-5. Копирование и конкатенация массивов

25-6. Старая, добрая: "Пузырьковая" сортировка

25-7. Вложенные массивы и косвенные ссылки

25-8. Пример реализации алгоритма Решето Эратосфена

25-9. Эмуляция структуры "СТЕК" ("первый вошел -- последний вышел")

25-10. Исследование математических последовательностей

25-11. Эмуляция массива с двумя измерениями

27-1. Поиск файла программы по идентификатору процесса

27-2. Проверка состояния соединения

28-1. Удаление cookie-файлов

28-2. Создание файла подкачки (swapfile), с помощью /dev/zero

28-3. Создание электронного диска

29-1. Сценарий, содержащий ошибку

29-2. Пропущено ключевое слово

29-3. test24

29-4. Проверка условия с помощью функции "assert"

29-5. Ловушка на выходе

29-6. Удаление временного файла при нажатии на Control-C

29-7. Трассировка переменной

31-1. Западня в подоболочке

31-2. Передача вывода от команды echo команде read, по конвейеру

33-1. сценарий-обертка

33-2. Более сложный пример сценария-обертки

33-3. Сценарий-обертка вокруг сценария awk

33-4. Сценарий на языке Perl, встроенный в Bash-скрипт

33-5. Комбинирование сценария Bash и Perl в одном файле

33-6. Сценарий (бесполезный), который вызывает себя сам

33-7. Сценарий имеющий практическую ценность), который вызывает себя сам

33-8. "Цветная" адресная книга

33-9. Вывод цветного текста

33-10. Необычный способ передачи возвращаемого значения

33-11. Необычный способ получения нескольких возвращаемых значений

33-12. Передача массива в функцию и возврат массива из функции

33-13. Игры с анаграммами

34-1. Расширение строк

34-2. Косвенные ссылки на переменные -- новый метод

34-3. Простая база данных, с применением косвенных ссылок

34-4. Массивы и другие хитрости для раздачи колоды карт в четыре руки

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. Объектно ориентированная база данных

G-1. Пример файла .bashrc

H-1. VIEWDATA.BAT: пакетный файл DOS

H-2. viewdata.sh: Результат преобразования VIEWDATA.BAT в сценарий командной оболочки


Часть 1. Введение


Shell -- это командная оболочка. Но это не просто промежуточное звено между пользователем и операционой системой, это еще и мощный язык программирования. Программы на языке shell называют сценариями, или скриптами. Фактически, из скриптов доступен полный набор команд, утилит и программ UNIX. Если этого недостаточно, то к вашим услугам внутренние команды shell -- условные операторы, операторы циклов и пр., которые увеличивают мощь и гибкость сценариев. Shell-скрипты исключительно хороши при программировании задач администрирования системы и др., которые не требуют для своего создания полновесных языков программирования.

Содержание

1. Зачем необходимо знание языка Shell?

2. Для начала о Sha-Bang

2.1. Запуск сценария

2.2. Упражнения


  1   2   3   4   5   6   7   8   9   ...   44


База данных защищена авторским правом ©uverenniy.ru 2016
обратиться к администрации

    Главная страница