Скрипт отработал с ошибкой, но не остановился и удалил половину нужных файлов? Или CI/CD пайплайн споткнулся о пустую переменную? Я отжал воду из огромных справочников и оставил ровно 50 самых хардкорных и важных конструкций Bash, которые жизненно необходимы.
1. Безопасность и запуск (Strict Mode)Эти настройки — стандарт де-факто для любых production-скриптов. Они отлавливают ошибки на раннем этапе.
# Указать интерпретатор (лучшая практика переносимости)
#!/usr/bin/env bash
# Сделать скрипт исполняемым
chmod +x script.sh
# "Strict Mode" (выход при ошибке, ошибке переменной или в пайплайне)
set -euo pipefail
# Выйти немедленно при ошибке
set -e
# Режим отладки (выводить команды перед выполнением)
set -x
2. Продвинутая работа с переменнымиЗащита от пустых значений, которые могут сломать автоматизацию.
# Присвоить значение (строго без пробелов вокруг =)
VAR=value
# Безопасное чтение с кавычками (предотвращает word splitting)
"$VAR"
# Использовать по умолчанию, если переменная не задана (важно для Docker)
${VAR:-default}
# Назначить значение по умолчанию, если VAR не задана
${VAR:=default}
# Выйти с ошибкой, если переменная не задана (failsafe для деплоя)
${VAR:?error msg}
# Сделать переменную доступной только для чтения (константа)
readonly VAR
# Экспортировать переменную для дочерних процессов
export VAR
3. Системные переменныеИдентификаторы процессов и аргументы функций.
# Имя скрипта
$0
# Позиционные параметры (аргументы 1-9)
$1..$9
# Количество переданных аргументов
$#
# Все аргументы безопасно как отдельные слова
$@
# Статус выхода последней команды (0 - успех, иное - ошибка)
$?
# PID текущего процесса shell
$$
4. Парсинг строк (без вызова awk/sed)Молниеносные встроенные манипуляции с путями и текстом.
# Удалить самое короткое совпадение паттерна с начала
${VAR#pattern}
# Удалить самое короткое совпадение с конца (удобно для расширений файлов)
${VAR%pattern}
# Заменить все вхождения подстроки
${VAR//old/new}
# Перевести все символы в нижний регистр
${VAR,,}
5. Условия и мощные проверкиИспользуй `[[ ]]` вместо старого `[ ]` — это безопаснее и поддерживает регулярные выражения.
# Проверить существование файла и вывести результат
if [[ -f "file.txt" ]]; then echo "exists"; fi
# Проверка по регулярному выражению
=~
# Конструкция case (идеально для стартовых скриптов systemd)
case "$1" in start) echo "Starting";; stop) echo "Stopping";; *) echo "Usage: $0 {start|stop}";; esac
# Файл существует и является обычным
-f file
# Файл существует и является директорией
-d file
# Строка пустая
-z string
# Строка не пустая
-n string
# Строковое равенство и неравенство
==
!=
# Числовое равенство и неравенство
-eq
-ne
6. Массивы и словариНезаменимо для перебора IP-адресов, списков серверов и портов.
# Объявить индексированный массив
arr=(a b c)
# Получить все элементы массива
${arr[@]}
# Узнать количество элементов в массиве
${#arr[@]}
# Объявить ассоциативный массив (словарь)
declare -A map
# Добавить значение по ключу
map[key]="value"
7. Математика, Ввод/Вывод и СигналыФорматирование вывода для дашбордов и правильная очистка мусора за скриптом.
# Арифметика: сложение
$((a + b))
# Арифметическое присваивание
let "a += 5"
# Прочитать строку в массив
read -r -a items <<< "a b c"
# Форматированный вывод (надежнее чем echo)
printf "Name: %s, Age: %d\n" "$name" "$age"
# Многострочный ввод (Here document) для генерации конфигов
cat <<EOF
Lines of text go here.
Variables like $HOME are expanded.
$ EOF
# Завершить скрипт с кодом успеха
exit 0
# Завершить скрипт с кодом ошибки
exit 1
# Выполнить очистку (например, удалить лок-файл) при любом выходе
trap ' rm -f /tmp/mylock' EXIT
Теперь твой код готов к нагрузкам. Сохраняй шпаргалку, чтобы не плодить костыли, и применяй правильный синтаксис!
❗️❗️❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
⭐️ Зеркало в MAX
#Linux #Bash #DevOps #Sysadmin #ShellScripting #CLI