В мире Linux и системного администрирования умение писать bash-скрипты — это суперсила, которая превращает рутинные задачи в мгновенные операции. Представьте: вместо десятков повторяющихся команд — один файл, который делает всё за вас. Эта статья — ваш практический гид по созданию скриптов для реальных задач, от простых до продвинутых.
Почему именно Bash?
Bash (Bourne Again SHell) — это не просто командная оболочка, а полноценный язык программирования, встроенный практически в каждую Unix-подобную систему. Его сила — в прямом доступе ко всем системным утилитам, простоте синтаксиса и огромной мощности для автоматизации.
Каждый скрипт должен начинаться с шебанга (shebang) — #!/bin/bash. Это указывает системе, какой интерпретатор использовать для выполнения файла.
От теории к практике: примеры скриптов
1. Базовый скрипт: автоматическое резервное копирование
Создадим файл backup.sh:
#!/bin/bash
# Простой бэкап директории
BACKUP_DIR="/home/user/backups"
SOURCE_DIR="/home/user/documents"
DATE=$(date +%Y%m%d_%H%M%S)
tar -czf "$BACKUP_DIR/backup_$DATE.tar.gz" "$SOURCE_DIR"
echo "Резервная копия создана: backup_$DATE.tar.gz"
Этот скрипт создаёт сжатый архив указанной папки с timestamp в имени.
2. Мониторинг системы: проверка дискового пространства
#!/bin/bash
# Проверка заполненности диска с отправкой предупреждения
THRESHOLD=80
USAGE=$(df / | grep / | awk '{ print $5 }' | sed 's/%//g')
if [ $USAGE -gt $THRESHOLD ]; then
echo "ВНИМАНИЕ! Диск заполнен на ${USAGE}%" | mail -s "Дисковое предупреждение" admin@example.com
logger "Критическое заполнение диска: ${USAGE}%"
fi
3. Продвинутый пример: автоматизация обновлений с логированием
#!/bin/bash
# Полная автоматизация обновлений системы
LOG_FILE="/var/log/auto_update.log"
{
echo "=== Начало обновления $(date) ==="
apt-get update
apt-get upgrade -y
apt-get autoremove -y
apt-get autoclean
echo "=== Обновление завершено $(date) ==="
echo ""
} >> "$LOG_FILE" 2>&1
Используйте chmod +x script.sh чтобы сделать скрипт исполняемым. Для регулярного запуска добавьте скрипт в crontab: crontab -e.
Ключевые концепции для эффективных скриптов
- Переменные: Хранят данные для повторного использования
- Условия:
if-then-elseдля принятия решений - Циклы:
for,whileдля повторения операций - Аргументы:
$1,$2для передачи параметров - Функции: Группировка кода для многократного использования
Пример с аргументами и функциями:
#!/bin/bash
create_user() {
username=$1
useradd -m -s /bin/bash "$username"
echo "Пользователь $username создан"
}
if [ $# -eq 0 ]; then
echo "Использование: $0 имя_пользователя"
exit 1
fi
create_user "$1"
Лучшие практики
- Всегда добавляйте комментарии для сложных логик
- Проверяйте существование файлов и директорий перед работой с ними
- Используйте
set -eдля немедленного выхода при ошибках в критичных скриптах - Тестируйте скрипты на тестовых окружениях
- Ведите логирование всех важных операций
Интеграция с планировщиком задач
Настоящая мощь bash-скриптов раскрывается при использовании с cron. Пример записи в crontab для ежедневного бэкапа в 2:00 ночи:
0 2 * * * /home/user/scripts/backup.sh
FAQ: Часто задаваемые вопросы
Как запустить bash-скрипт?
Тремя способами: 1) ./script.sh (если файл исполняемый), 2) bash script.sh, 3) source script.sh (для выполнения в текущей сессии).
Чем отличается bash от sh?
Bash — расширенная версия sh с дополнительными возможностями. Для переносимости используйте #!/bin/sh, для мощности — #!/bin/bash.
Как отлаживать скрипты?
Используйте bash -x script.sh для пошагового выполнения с выводом команд или добавляйте set -x в начало скрипта.
Безопасно ли запускать скрипты из интернета?
Всегда проверяйте код неизвестных скриптов перед выполнением. Особое внимание уделяйте командам с sudo и операциям с файлами.
Можно ли писать сложные программы на bash?
Для сложной логики и больших проектов лучше использовать Python или Perl. Bash идеален для автоматизации системных задач и склеивания утилит.
Bash-скрипты — это мост между пользователем и мощью Linux. Начните с простых задач, постепенно усложняя свои скрипты, и вы откроете новый уровень эффективности работы с системой.