Идиомы bash - Карл Олбинг - E-Book

Идиомы bash E-Book

Карл Олбинг

0,0

Beschreibung

Сценарии на языке командной оболочки получили самое широкое распространение, особенно написанные на языках, совместимых с bash. Но эти сценарии часто сложны и непонятны. Сложность — враг безопасности и причина неудобочитаемости кода. Эта книга на практических примерах покажет, как расшифровывать старые сценарии и писать новый код, максимально понятный и легко читаемый. Авторы Карл Олбинг (Carl Albing) и Джей Пи Фоссен (JP Vossen) покажут, как использовать мощь и гибкость командной оболочки. Даже если вы умеете писать сценарии на bash, эта книга поможет расширить ваши знания и навыки. Независимо от используемой ОС — Linux, Unix, Windows или Mac — к концу книги вы научитесь понимать и писать сценарии на экспертном уровне. Это вам обязательно пригодится. Вы познакомитесь с идиомами, которые следует использовать, и такими, которых следует избегать.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern
Kindle™-E-Readern
(für ausgewählte Pakete)

Seitenzahl: 202

Veröffentlichungsjahr: 2024

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Карл Олбинг, Джей Пи Фоссен
Идиомы bash

Переводчик Л. Киселева

Карл Олбинг, Джей Пи Фоссен

Идиомы bash. — СПб.: Питер, 2023.

ISBN 978-5-4461-2307-0

© ООО Издательство "Питер", 2023

Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.

Оглавление

Вступление
Запуск bash
Управление версиями
Hello World
Условные обозначения
Использование исходного кода примеров
Благодарности
Bash
Рецензентам
O’Reilly
От Карла
От Джей Пи
От издательства
Глава 1. Идиома «большого» if
«Большой» if
Или ELSE...
Выполняем несколько команд
Еще о случае нескольких команд
Так делать не нужно!
В заключение: стиль и удобочитаемость
Глава 2. Язык циклов
Циклические конструкции
Явные значения
Почти как в Python
Кавычки и пробелы
Разработка и тестирование циклов for
Циклы while и until
В заключение: стиль и удобочитаемость
Глава 3. На всякий случай: оператор Case
Сделайте свой выбор
Применение на практике
Сценарии-обертки
Еще один важный момент
В заключение: стиль и удобочитаемость
Глава 4. Язык переменных
Ссылка на переменную
Дополнительные параметры
Условные подстановки
$RANDOM
Подстановка команд
В заключение: стиль и удобочитаемость
Глава 5. Выражения и арифметика
Арифметика
Составные команды
В заключение: cтиль и удобочитаемость
Глава 6. Функции
Вызов функций
Определение функций
Особые случаи
Функция printf
В заключение: стиль и удобочитаемость
Глава 7. Списки и хеши
Сходные черты
Списки
Хеши
Пример подсчета слов
В заключение: cтиль и удобочитаемость
Глава 8. Аргументы
Ваш первый аргумент
Поддержка ключей
Длинные ключи
HELP!
Отладочный и подробный режимы вывода
Версия
В заключение: стиль и удобочитаемость
Глава 9. Файлы и не только
Чтение файлов
Изменяем $IFS при чтении файлов
Имитации файлов
Настроечные каталоги
Организация библиотек
Shebang!
Строгий режим bash
Код выхода
Это ловушка!
Встроенные документы и строки
Код выполняется в интерактивном режиме?
В заключение
Глава 10. Помимо идиом: работа с bash
Приглашения к вводу
Получение ввода пользователя
Псевдонимы
Функции
Локальные переменные
Возможности Readline
Журналирование в bash
Обработка JSON с помощью jq
Поиск в списке процессов
Ротация старых файлов
Встроенная документация
Отладка в bash
Модульное тестирование в bash
В заключение
Глава 11. Разработка своего руководства по стилю
Удобочитаемость
Комментарии
Имена
Функции
Кавычки
Форматирование
Синтаксис
Другие рекомендации
Шаблон сценария
Другие руководства по стилю
Инструмент проверки оформления кода на bash
В заключение
Приложение. Руководство по стилю
Удобочитаемость
Комментарии
Имена
Функции
Кавычки
Форматирование
Синтаксис
Другие рекомендации
Шаблон сценария
Об авторах
Иллюстрация на обложке
Рекомендуем прочитать

Вступление

Вот как словарь Уэбстера определяет термин идиома:1

1. Специфический оборот речи, употребляющийся как единое целое, значение которого не определяется значением входящих в него слов (как, например, оборот «в подвешенном состоянии», означающий «неопределенность»). В данном обороте может иметь место нетипичное грамматическое использование слов (например, «дать дорогу»).

2а. Язык, свойственный народу, географической области, сообществу или классу, диалект.

2б. Синтаксическая, грамматическая или структурная форма, характерная для языка.

3. Стиль или форма художественного выражения, характерные для человека, периода или движения, средства или инструмента.

Почему для книги выбрано название «Идиомы bash»? Для простоты. Или, если хотите, чтобы было понятнее. В этой книге «простота» — синоним «понятности». Мы не собираемся убеждать вас в важности удобочитаемости: если это не первая книга по программированию, которую вы читаете, значит, уже должны это понимать. Удобочитаемость означает простоту чтения и понимания кода, особенно если он написан не вами. Не менее важно научиться писать код так, чтобы в будущем вы или кто-то другой смогли его понять. Очевидно, что эти аспекты являются разными сторонами одной медали, поэтому мы рассмотрим и идиомы, которые следует использовать, и такие, которых следует избегать.

Между нами говоря, мы считаем bash языком «управления». Для сложной обработки данных он малопригоден: ее можно реализовать, но код получится слишком сложным. Однако, если все инструменты, необходимые для обработки данных, уже имеются и требуется лишь «склеить» их, то bash подойдет на эту роль как нельзя лучше.

Если мы собираемся использовать bash только для управления, то зачем беспокоиться об идиомах или «структурной форме» языка? Программы развиваются, возможности ширятся, ситуация меняется, но нет ничего более постоянного, чем временное. Рано или поздно кому-то придется прочитать ваш код, понять его и изменить. Если он написан с использованием непонятных идиом, то сделать это будет намного сложнее.

Во многих отношениях bash не похож на другие языки. У него богатая история (некоторые могут сказать «багаж»), и есть причины, почему он выглядит и работает определенным образом. Мы не будем много говорить об этом. Если вам интересна эта тема, обратитесь к нашей книге «bash Cookbook»2. Сценарии командной оболочки «управляют миром», по крайней мере в мирах Unix и Linux (а Linux фактически управляет облачным миром), причем подавляющее большинство этих сценариев написаны на bash. Поддержание обратной совместимости с самыми первыми командными оболочками Unix часто критически важно, но накладывает некоторые... ограничения.

Теперь о «диалектах». Наиболее важным, особенно для обратной совместимости, является стандарт POSIX. Об этом тоже не будем много говорить, в конце концов эта книга посвящена идиомам bash, а не POSIX. Появление других диалектов возможно, когда программисты пишут код на bash в стиле другого известного им языка. Однако поток, имеющий смысл в C, может показаться бессвязным в bash.

Итак, в этой книге мы намерены продемонстрировать «стиль или форму... выражения, характерную» для bash (в духе третьего определения в словаре Уэбстера). Программисты на Python называют свой стиль pythonic. А мы бы хотели в этой книге показать стиль bashy.

К концу книги читатель приобретет следующие знания и навыки:

● научится писать полезный, гибкий, удобочитаемый и... стильный код на bash;

● узнает, как расшифровываются идиомы bash, такие как ${MAKEMELC,,} и ${PATHNAME##*/};

● освоит приемы, экономящие время и обеспечивающие согласованность при автоматизации задач;

● сможет удивить и впечатлить коллег идиомами bash;

● узнает, как идиомы bash помогают сделать код чистым и лаконичным.

Запуск bash

Мы предполагаем, что вы уже имеете опыт программирования на bash и нет нужды рассказывать, где его найти или как установить. Конечно, bash есть почти во всех дистрибутивах Linux, и он уже установлен по умолчанию или может быть установлен практически в любой операционной системе. Получить версию для Windows можно с помощью Git for Windows3 подсистемы Windows для Linux (Windows Subsystem for Linux, WSL) или другими способами.

bash на Mac

Обратите внимание на версию bash, которая по умолчанию устанавливается в Mac: она довольно старая и не поддерживает многие новые идиомы версий 4.0 и выше. Более свежую версию можно получить с помощью MacPorts, Homebrew или Fink. По информации от Apple4, проблема в том, что новые версии bash используют GPLv3, что является проблемой для macOS.

Apple также сообщает, что macOS Catalina и более новые версии будут использовать Zsh в качестве интерактивной оболочки и оболочки входа по умолчанию. Zsh в значительной мере совместима с bash, но некоторые примеры в этой книге потребуют изменений. Командная оболочка bash на компьютерах Mac не исчезнет (по крайней мере, пока), причем использование Zsh в качестве оболочки по умолчанию не повлияет на строку «shebang» (см. раздел «Shebang!» в главе 9), но имейте в виду, что если не обновить версию bash, вы застрянете в каменном веке.

Мы отметили примеры сценариев, несовместимые с Zsh, комментарием: «Не работает в Zsh 5.4.2!».

bash в контейнерах

Будьте осторожны, используя Docker и другие создатели контейнеров, где /bin/sh ссылается не на bash, а /bin/bash может вообще не существовать! Это особенно актуально для ограниченных окружений, включая системы интернета вещей и промышленные контроллеры.

/bin/sh может ссылаться на bash (согласно POSIX), но также на Ash, Dash, BusyBox (которым чаще всего является Dash) или что-то еще. Будьте внимательны (см. раздел «Shebang!» в главе 9) и убедитесь, что bash действительно установлен, или придерживайтесь стандарта POSIX и избегайте «башизмов».

Управление версиями

Очень надеемся, что вы используете какую-либо систему управления версиями. Если да, то можете пропустить этот абзац. Если нет, то внедрите их в свою работу, прежде чем продолжать чтение. Мы посвятили этому вопросу целое приложение в «bash Cookbook»5, но вообще в интернете можно найти огромный объем информации о таких системах, в том числе от одного из авторов этой книги6.

Hello World

Во многих трудах нужно добраться до конца главы 1, 2 или даже 3, прежде чем вы узнаете, как вывести на экран «Hello World». Мы же перейдем к этому вопросу немедленно! Впрочем, поскольку вы уже писали код на bash и храните его в системе управления версиями (верно?), то говорить об echo 'Hello, World' было бы довольно глупо, а потому и не будем. Упс.

Условные обозначения

В этой книге используются следующие условные обозначения.

Курсив

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

Моноширинный шрифт

Обозначает листинги программ, а также используется внутри абзацев для переменных, функций, баз данных, типов данных, переменных среды, операторов и ключевых слов, имен файлов и их расширений.

Моноширинный полужирный шрифт

Обозначает элементы, которые пользователь должен ввести самостоятельно.

Моноширинный курсив

Обозначает текст, который должен быть заменен значениями, введенными пользователем или определяемыми контекстом.

Шрифт без засечек

Используется для обозначения URL, адресов электронной почты, названий кнопок и других элементов интерфейса, а также каталогов.

Этот рисунок указывает на совет или предложение.

Этот рисунок указывает на общее примечание.

Этот рисунок указывает на предупреждение.

Использование исходного кода примеров

Вспомогательные материалы (примеры кода, упражнения и т.д.) доступны для загрузки по адресу:https://github.com/vossenjp/bashidioms-examples. Если у вас возникнут вопросы технического характера по использованию примеров кода, направляйте их по электронной почте на адрес [email protected].

В общем случае все примеры кода из книги вы можете использовать в своих программах и в документации. Вам не нужно обращаться в издательство за разрешением, если вы не собираетесь воспроизводить существенные части программного кода. Если вы разрабатываете программу и используете в ней несколько фрагментов кода из книги, вам не нужно обращаться за разрешением. Но для продажи или распространения примеров из книги вам потребуется разрешение от издательства O’Reilly. Вы можете отвечать на вопросы, цитируя данную книгу или примеры из нее, но для включения существенных объемов программного кода из книги в документацию вашего продукта потребуется разрешение.

Мы рекомендуем, но не требуем добавлять ссылку на первоисточник при цитировании. Под ссылкой на первоисточник мы подразумеваем указание авторов, издательства и ISBN.

За получением разрешения на использование значительных объемов программного кода из книги обращайтесь по адресу [email protected].

1https://oreil.ly/pgx8b.

2https://learning.oreilly.com/library/view/bash-cookbook-2nd/9781491975329/.

3https://gitforwindows.org/.

4https://oreil.ly/2PZRm.

5https://github.com/vossenjp/bashidioms-examples/blob/main/bcb2-appd.pdf.

6https://oreil.ly/fPHy8.

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

Bash

Спасибо GNU Software Foundation и Брайану Фоксу (Brian Fox) за создание bash. Благодарим также Чета Рэми (Chet Ramey), поддерживающего и совершенствующего bash, начиная с версии 1.14, которая вышла в первой половине 1990-х. Все вы дали нам отличный инструмент.

Рецензентам

Большое спасибо рецензентам: Дугу Макилрою (Doug McIlroy), Яну Миеллу (Ian Miell), Кертису Олду (Curtis Old) и Полу Тронконе (Paul Troncone), которые помогли значительно улучшить книгу! Все они дали ценные отзывы, а в некоторых случаях предложили альтернативные решения, указав на проблемы, которые мы упустили из виду. Если в этой книге есть ошибки или упущения, то это не их, а наша вина.

O’Reilly

Спасибо всем сотрудникам издательства O’Reilly, без которых эта книга не появилась бы на свет, а если и появилась бы, то по содержанию и оформлению была бы беднее.

Спасибо Майку Лукидесу (Mike Loukides) за оригинальную идею и то, что предложил и доверил реализовать ее нам. Спасибо Сюзанне «Зан» МакКуэйд (Suzanne «Zan» McQuade), что помогла воплотить идею в жизнь. Огромная благодарность Николь Таше (Nicole Taché) и Кристен Браун (Kristen Brown) за правки и то, что терпели нас в ходе долгой работы над книгой и ее подготовки к печати. Особое спасибо Нику Адамсу (Nick Adams) из Tools за исправление наших многочисленных (и порой вопиющих) ошибок в AsciiDoc, а также помощь в вопросах, не связанных с набором. Спасибо литературному редактору Ким Сандовал (Kim Sandoval), составителю индекса Шерил Ленсер (Cheryl Lenser), корректору Лиз Уилер (Liz Wheeler), дизайнерам Дэвиду Футато (David Futato) и Карен Монтгомери (Karen Montgomery), а также другим сотрудникам O’Reilly.

От Карла

Спасибо Джей Пи за его работу, внимание к деталям и готовность к сотрудничеству. Спасибо всем сотрудникам O’Reilly за помощь в издании этой книги.

Эту книгу я посвящаю моей супруге Синтии, которая мирилась с моими писательскими амбициями и достаточно убедительно делала вид, что ей интересно, о чем я пишу. Моя работа над этой книгой направлена, как говорят в Бетельском университете, во славу Божию и на благо моих ближних.

От Джей Пи

Спасибо Карлу за его работу; похоже, нам снова удалось уложиться в график. Спасибо Майку за то, что опять привел все в движение, и Николь за ее труд, а также терпеливое отношение к нашим работе, жизни и неумению правильно распределять время.

Эту книгу я посвящаю моей супруге Карен — «исполнительному вице-президенту», отвечающему за все. Спасибо за твою невероятную поддержку, терпение и понимание, без тебя я бы не состоялся в жизни. Наконец, спасибо Кейт и Сэму за то, что нормально воспринимали мой ответ: «Если вы не истекаете кровью и не горите, то не мешайте: я занят книгой».

От издательства

Ваши замечания, предложения, вопросы отправляйте по адресу [email protected](издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.