🧨 Твои скрипты падают на проде? 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 -x2. Продвинутая работа с переменными
Защита от пустых значений, которые могут сломать автоматизацию.
# Присвоить значение (строго без пробелов вокруг =)
VAR=value# Безопасное чтение с кавычками (предотвращает word splitting)
"$VAR"# Использовать по умолчанию, если переменная не задана (важно для Docker)
${VAR:-default}# Назначить значение по умолчанию, если VAR не задана
${VAR:=default}# Выйти с ошибкой, если переменная не задана (failsafe для деплоя)
${VAR:?error msg}# Сделать переменную доступной только для чтения (константа)
readonly VAR# Экспортировать переменную для дочерних процессов
export VAR3. Системные переменные
Идентификаторы процессов и аргументы функций.
# Имя скрипта
$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
-ne6. Массивы и словари
Незаменимо для перебора 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