Когда проект разрастается, скрипты превращаются в мешанину повторяющегося кода. Решение - выносить логику в отдельные .sh-файлы и подключать их как модули. Bash позволяет это делать просто и удобно с помощью source.
▪️ Пример структуры проекта:
project/
├── main.sh
├── lib/
│ ├── colors.sh
│ ├── network.sh
│ └── disk.sh
▪️ Как подключать:
#!/bin/bash
# main.sh
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/lib/colors.sh"
source "$SCRIPT_DIR/lib/network.sh"
source "$SCRIPT_DIR/lib/disk.sh"
log_info "Начинаем выполнение..."
check_network
check_disk_usage
▪️ Файл
colors.sh:
#!/bin/bash
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'
log_info() {
echo -e "${GREEN}[INFO]${NC} $*"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $*"
}
▪️ Файл
network.sh:
#!/bin/bash
check_network() {
if ! ping -c1 8.8.8.8 &>/dev/null; then
log_error "Нет подключения к интернету"
else
log_info "Сеть доступна"
fi
}
▪️ Файл
disk.sh:
#!/bin/bash
check_disk_usage() {
local usage
usage=$(df / | awk 'NR==2 {print $5}')
log_info "Использование диска: $usage"
}
⭐️ Рекомендации:
📍 ИспользуйSCRIPT_DIRдля относительных путей (надежно даже из cron);
📍 Разделяй модули по темам (log.sh, fs.sh, sys.sh и т.д.);
📍 Добавляйset -euo pipefailвmain.sh, но не обязательно в модулях - иначе они могут прерывать подключение.
BashTex 📱 #bash