Книга Chris F.A. Johnson «Pro Bash Programming»
Программерская мудрость.
Поближе познакомиться с bash я собирался уже давно, все-таки использовать Линукс и не уметь пользоваться одним из основных его инструментов — странно (хотя это говорит о том, что Линукс стал совсем дружелюбным к пользователю). Сначала я начал читать перевод Advanced Bash-Scripting Guide, но все-таки хотелось найти что-то в более удобном формате для чтения по дороге на работу. Русскоязычных книг по bash мне так и не попались (не считая книг, где ему посвящены только отдельные главы), но зато наткнулся в электронном виде на книгу Chris F.A. Johnson «Pro Bash Programming. Scripting the GNU/Linux Shell». Чтением этой книги решил убить двух зайцев — и про (pro 🙂 ) bash получше узнать, и английский потренировать, благо в Pocketbook 902, на котором я читал эту книгу, есть словари, куда можно при случае заглянуть.
Сама книга оказалась довольно неплохой, правда, местами этой книге не хватает въедливости, как у той же Advanced Bash-Scripting Guide, про некоторые конструкции и команды хотелось бы почитать поподробнее, не заглядывая в документацию, но для начала Pro Bash Programming вполне сойдет. Ее структура — от простого к сложному, в приведенных примерах используются только те конструкции, которые уже были описаны раньше (использование неописанных конструкций раздражало в Advanced Bash-Scripting Guide, из-за чего он читался как справочник), а последние главы посвящены практическому применению того, что было изучено в первой половине книги. Приятно, что автор пишет, какая конструкция в какой версии bash появилась, а какие команды не входят в стандарт POSIX, чтобы можно было оценить требования к среде, где будет выполняться тот или иной скрипт.
Давайте теперь коротко пробежимся по содержанию книги.
Первая глава посвящена, разумеется, скрипту «Hello, World». Описывается, как можно создавать и запускать скрипты bash, рассказывается про некоторые стандартные программы Linux вроде type, mkdir, pwd и т.п. Кстати, приятной особенностью книги является то, что в конце каждой главы перечисляются термины, команды и инструменты, о которых рассказывается в этой главе. При желании потом можно сделать себе шпаргалку из команд. Правда, основной упор в книге сделан именно на команды bash, автор старался не злоупотреблять сторонними консольными программами (может быть и зря), которые обычно входят в дистрибутивы Линуксов. Хотя, разумеется, без некоторых команд вроде cat, grep и уже перечисленных выше не обошлось. Где возможно, автор пишет, какие операции можно делать и с помощью команд bash, и с помощью «сторонних» программ, перечисляя плюсы и минусы обоих случаев.
Вторая глава посвящена вводу, выводу и передаче информации. Здесь рассказывается про то, как скриптам и командам можно передавать параметры, как их обрабатывать, какие бывают стандартные переменные для работы с переданными параметрами (вроде $*, $$, $@ и $#). Здесь же рассказывается, как переданная скрипту строка разбивается на отдельные параметры, какие бывают перенаправления ввода/вывода (>, >>, <, |), что такое stdin, stdout и stderr, как к ним обращаться и перенаправлять.
Третья глава посвящена управляющим конструкциям — проверке условий и циклы. Здесь рассказывается про команду test и операции проверки условий […] и [[…]], операторы && , ||, if. case, while, until, for, break и continue, ну то есть обязательный набор любого уважающего себя языка программирования.
Две главы посвящены развертыванию и подстановке переменных. Это с одной стороны важная часть языка, и в то же время самая трудно запоминающаяся тема из-за особенностей синтаксиса, когда надо различать команды $(( … )), ${var%…},${var%%…}, ${var#…}, ${var?…} и еще кучу подобных. До этого я думал, что у Perl тяжелый синтаксис…
Завершают «теоретическую» часть книги главы про функции и массивы, после чего начинается вторая, практическая, половина книги, где описываются различные приемы использования bash. Начинается все с главы про строковые операции. Честно говоря, не ожидал, что некоторые простые в других языках операции вызывают такие трудности в bash.
Отдельная глава посвящена операциям с файлами. Здесь рассказывается, какие существуют способы чтения файлов построчно, какие существуют стандартные программы для работы с ними (вроде head, tail, grep, sed). Про grep и регулярные выражения толком ничего не сказано — им отведена всего одна страничка. Говорится, что есть такая утилита (язык) как awk для обработки текста, приводятся некоторые примеры, но толком про него тоже ничего не говорится. Еще одна глава посвящена способам отладки скриптов.
Довольно много места в книге отведено тому, какие задачи решал автор с использованием bash, в том числе приводятся некоторые функции, которые можно использовать в своих скриптах. Например, функция для создания меню или для рисования с помощью псевдографики игральных костей, рассказывается, как автор использует файлы настроек для чтения их из скриптов, и рассказывается про различные хаки над bash.
Одна глава посвящена обработке массивов и представлению их в bash, в том числе разным способам имитации многомерных массивов. Еще одна глава отводится способам выводу информации в консоль на произвольном месте экрана (в режиме канвы) с помощью ESC-последовательностей, а также перехвату нажатий функциональных клавиш.
Завершается книга описанием стандартных переменных оболочки (shell variables).
В целом целом книга оказалась полезной, с нее вполне можно начать изучение bash, хотя у меня все-таки осталось желание почитать что-нибудь еще на эту тему. Читается книга легко, там нет каких-то пространных предложений в стиле Толстого на английском, поэтому даже мне, изучавшему английский язык по MSDN и тому подобной документации, особых проблем с пониманием не было, в словарь приходилось заглядывать не часто (в среднем — один раз на страницу). А сама книжка небольшая — чуть больше 250 страниц.
PS. Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.
Аноним:
Зачем вообще нужен bash? Где его можно применить?
6 января 2012, 12:16 ппJenyay:
> Зачем вообще нужен bash? Где его можно применить?
В основном для выполнения каких-то небольших часто повторяемых действий, для которых писать отдельную программу не охота. Например, поиск фраз по файлам, какая-то множественная замена в файлах, групповое переименование. Для всего этого, конечно, можно найти программу с интерфейсом, но если это нужно делать часто, то проще написать один раз скрипт, а потом его запускать.
6 января 2012, 2:30 пп