🧨 Твои скрипты падают на проде? 43 команды Bash, которые спасут твою репутацию — 27 мая 2026 г. в 05:57:02.087
🧨 Твои скрипты падают на проде? 43 команды Bash, которые спасут твою репутацию Скрипт отработал с ошибкой, но не остановился и удалил половину нужных файлов? Или 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 #Linux #Bash #DevOps #Sysadmin #ShellScripting #CLI

