Pure Bash Bible - Магия bash без внешних зависимостей

28 Nov, 2023

Это архивный репозиторий и может быть устаревшим.

41,698
🔱 3,629
👥 3

Когда последний раз вы писали bash-скрипт и думали: "Нужно вызвать sed/awk/grep, но так не хочется добавлять лишние зависимости"? Знакомое чувство? Тогда Pure Bash Bible — именно то, что вам нужно.

Что это за проект?

Pure Bash Bible — это коллекция приемов и функций, реализующих популярные операции (работа со строками, файлами, массивами) средствами чистого bash, без вызова внешних утилит. Автор проекта — Dylan Araps, известный создатель neofetch.

Основная цель: сделать скрипты быстрее (вызов внешних программ в bash дорогой) и переносимее (не нужно проверять, установлен ли awk на целевой системе).

Почему это круто?

  1. Скорость — встроенные методы bash работают быстрее вызова внешних утилит
  2. Переносимость — скрипт будет работать везде, где есть bash
  3. Обучение — глубже понимаем возможности bash

Топ-5 фич, которые вас удивят

1. Работа со строками без sed/awk

# Обрезаем пробелы в начале и конце строки
trim_string() {
    : "${1#"${1%%[![:space:]]*}"}"
    : "${_%"${_##*[![:space:]]}"}"
    printf '%s\n' "$_"
}

2. Разделение строки по разделителю

Альтернатива cut и awk -F:

split() {
   IFS=$'\n' read -d "" -ra arr <<< "${1//$2/$'\n'}"
   printf '%s\n' "${arr[@]}"
}

3. Проверка, содержит ли строка подстроку

Без вызова grep:

Реклама
if [[ $var == *sub_string* ]]; then
    printf '%s\n' "sub_string is in var."
fi

4. Чтение файла в массив

Альтернатива mapfile для старых версий bash:

while read -r line; do
    file_data+=("$line")
done < "file"

5. Генерация UUID v4

Чистый bash без сторонних утилит:

uuid() {
    C="89ab"
    for ((N=0;N<16;++N)); do
        B="$((RANDOM%256))"
        case "$N" in
            6)  printf '4%x' "$((B%16))" ;;
            8)  printf '%c%x' "${C:$RANDOM%${#C}:1}" "$((B%16))" ;;
            3|5|7|9) printf '%02x-' "$B" ;;
            *) printf '%02x' "$B" ;;
        esac
    done
    printf '\n'
}

Когда это особенно полезно?

  • Контейнеры — когда нужно минимизировать образ
  • Встроенные системы — где нет места для полноценного набора утилит
  • Скрипты инициализации — которые выполняются до полной загрузки системы
  • Кросс-платформенные скрипты — которые должны работать на разных UNIX-системах

Что внутри?

Проект охватывает:

  • Строковые операции (trim, split, case conversion)
  • Работу с массивами
  • Файловые операции
  • Цвета и форматирование вывода
  • Арифметические операции
  • Трюки с переменными

Как начать использовать?

  1. Клонируйте репозиторий:
git clone https://github.com/dylanaraps/pure-bash-bible.git
  1. Импортируйте нужные функции в свой скрипт:
source pure-bash-bible/strings.sh
  1. Или копируйте отдельные функции по мере необходимости.

Pure Bash Bible — must have для:

  • Системных администраторов
  • Девопсов, работающих с разными окружениями
  • Любителей bash, желающих глубже изучить язык
  • Авторов переносимых скриптов

Проект активно развивается, имеет 35k+ звёзд на GitHub и лицензию MIT. Если вы пишете на bash — держите эту библию под рукой!

Совет: Автор также выпустил книгу по bash, которую можно приобрести на Leanpub.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.