Добавить в корзинуПозвонить
Найти в Дзене
Герман Геншин

4 неприлично простых приёма, после которых ваши Bash-скрипты станут чистыми и понятными

Вы давно крутитесь в Bash или только осваиваете консоль? Всё равно найдутся трюки, которые удивят и вас. Порой именно простые советы буквально переворачивают привычный подход к написанию скриптов. Делюсь четырьмя приёмами, которые наведут порядок в ваших Bash-хаках — и писать будет приятно, и читать. Пайплайн — это цепочка команд, соединённых символом "|", когда каждая следующая команда получает результат предыдущей. Обычно пайплайны выглядят так: В целом, такой вариант работает, но читать тяжеловато — всё сливается в одну строку, а разобраться непросто. Пример выше: глубокий обход текущей папки с подсчётом числа владельцев файлов. Команда специально растянута — чтобы показать всю суть пайплайна. Но куда изящней такой вариант: find . -type f -printf '%u\n' | sort | uniq --count. Читая код или текст, мы непроизвольно выискиваем знакомые паттерны. Скорее всего, вы сразу ищете глазами "|", чтобы понять, где заканчивается одна команда и начинается другая. Но когда всё идёт впритык, приход
Оглавление

Вы давно крутитесь в Bash или только осваиваете консоль? Всё равно найдутся трюки, которые удивят и вас. Порой именно простые советы буквально переворачивают привычный подход к написанию скриптов. Делюсь четырьмя приёмами, которые наведут порядок в ваших Bash-хаках — и писать будет приятно, и читать.

Записывайте пайплайны по строкам — мозг скажет спасибо

Пайплайн — это цепочка команд, соединённых символом "|", когда каждая следующая команда получает результат предыдущей. Обычно пайплайны выглядят так:

В целом, такой вариант работает, но читать тяжеловато — всё сливается в одну строку, а разобраться непросто.

Пример выше: глубокий обход текущей папки с подсчётом числа владельцев файлов. Команда специально растянута — чтобы показать всю суть пайплайна. Но куда изящней такой вариант: find . -type f -printf '%u\n' | sort | uniq --count.

Читая код или текст, мы непроизвольно выискиваем знакомые паттерны. Скорее всего, вы сразу ищете глазами "|", чтобы понять, где заканчивается одна команда и начинается другая. Но когда всё идёт впритык, приходится тратить лишние секунды на распознавание. Попробуйте вместо этого так:

Вертикальная вереница "|", как ступеньки, сразу делит команду на понятные блоки. Мозгу проще схватить суть.

Да и редактировать такую конструкцию удобнее: большинство редакторов позволяют быстро двигать или удалять целые строки — никакой путаницы.

Дробите код на "кирпичики" — и собирайте что угодно из них

Давайте разложим нашу команду на части — чтобы её легко было читать, менять и многократно использовать.

Код, который можно собирать по кусочкам (composable), — как из конструктора: простые функции складываются в сложные, и каждый элемент можно заменить отдельно.

Сначала пишем функцию, которая выдаёт "сырые" значения. Дальше — подключаем по необходимости преобразования:

Следующий шаг — вытащить нужные нам данные:

Теперь — посчитать, сколько чего получилось:

И чуть улучшаем итоговое сообщение:

Дальше — соединяем все эти кирпичики в новый пайплайн:

-2

Такой код читать куда приятнее, и каждую часть можно моментально поменять или подстроить. Например:

-3

В функции "clarify_date" используются регулярные выражения и POSIX-классы символов.

Признаюсь, я чуть усложнил пример — чтобы нагляднее показать приём. В настоящих скриптах обычно стартуют с крупной функции, а по ходу дела уже дробят её на части.

Заменяйте if-else на case, если можно — особенно при обработке команд

Switch/case — одно из моих любимых решений! Куча if-else только путает, а case выглядит аккуратно, и всё сразу понятно. Для обработки аргументов скрипта почти всегда ставлю в конце case — как диспетчер функций.

Когда диспетчер строится из "собираемых" функций, итоговый код читается почти как псевдокод:

Вся логика на виду — чтобы поменять результат, правишь одну-две строки.

Кстати, у меня была отдельная статья про case-диспетчер — там расписал максимально живой, “идиоматичный” способ работы с CLI-аргументами. Если объединить этот подход с тем, что выше — получите компактный, читаемый и очень гибкий диспетчер.

Однострочные проверки для коротких условий — и конец мусору

Чем короче и проще код, тем легче его воспринимать. Особенно если речь про короткие условия — простейшие if обычно идут плотно друг за другом и сильно захламляют скрипт:

Если "ветвлений" везде много, устаёшь уже на втором экране. Мне важно, чтобы код глазами просто проскакивался — поэтому для assert-проверок выбираю такой стиль:

Перед "}" обязательно ставьте точку с запятой, иначе Bash не простит.

Обычно такие однострочные проверки я пишу в начале скрипта и функций. Сразу видно — это just assert, всё понятно без комментариев, и никакой лишней воды.

-4

3 приёма обработки ошибок в Bash, которыми я пользуюсь всегда

Прокачайте Bash-навыки: три надёжных способа не пропустить ни одной ошибки в ваших скриптах.

Главное для читаемости — узнаваемые паттерны. Глаза их быстро пропускают, а внимание сосредотачивается только на сути.

Подпишитесь на рассылку — только коротко, по делу, и про Bash

То, как вы пишете свой код, не менее важно, чем сама логика. Для меня эстетика — это не каприз, а инструмент. К тому же, этот подход подтверждён наукой: человек куда проще воспринимает визуально стройный, структурированный код, чем хаос без формата — так же, как красивый интерфейс проще в работе.

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

Пишите плотно и прозрачно, вводите свои визуальные маркеры, и ваш скрипт станет таким же дружелюбным, как лучшие приложения.

-5

Хватит множить копипасту: разберитесь с Bash-функциями и забудьте про рутину

Освойте функции в Bash — и больше не тратьте время на однообразные действия: только эффективные, живые скрипты.

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь

Также подписывайтесь на нас в: