Bash (Bourne Again SHell) - это язык командной строки и сценариев (скриптов), используемый для взаимодействия с Unix-подобными операционными системами. Он был создан в 1989 году Брайаном Фоксом в рамках проекта GNU как свободная замена оригинальной оболочки Bourne shell (sh).
Bash в основном используется в Linux, macOS и Unix-системах и является оболочкой по умолчанию в большинстве дистрибутивов Linux. Он позволяет пользователям выполнять команды, автоматизировать задачи и писать скрипты, объединяющие системные утилиты, программы и логику.
Bash широко применяется для:
- Системного администрирования (управление пользователями, резервное копирование, мониторинг)
- Управления серверами и VPS
- Автоматизации задач
- DevOps-процессов (CI/CD-пайплайны, Docker, cron)
- Инструментов разработки (сборка проектов, настройка окружения).
Скрипты Bash особенно удобны для автоматизации, работы с файлами и управления процессами, поэтому знание Bash является важным навыком для разработчиков, DevOps-инженеров и системных администраторов.
Основы языка Bash
Basics
#!/usr/bin/env bash # Указывает, что скрипт должен выполняться с помощью Bash
bash script.sh # Запуск скрипта через интерпретатор Bash
chmod +x script.sh # Делает файл исполняемым
./script.sh # Запуск исполняемого скрипта
# Это комментарий # Строка с # не выполняется
Variables (Переменные)
NAME="Aleksei" # Объявление переменной (без пробелов!)
echo $NAME # Вывод значения переменной
echo "${NAME}" # Безопасный вывод переменной
DATE=$(date) # Сохранение результата команды date в переменную
Input / Output (Ввод / вывод)
read VAR # Читает ввод пользователя в переменную VAR
read -p "Имя: " NAME # Выводит приглашение и читает ввод
echo "Hello $NAME" # Вывод текста с подстановкой переменной
Script Arguments (Аргументы скрипта)
$0 # Имя скрипта
$1 # Первый аргумент
$2 # Второй аргумент
$@ # Все аргументы
$# # Количество аргументов
Conditionals (Условия)
if [ "$A" = "test" ]; then # Проверка: равна ли переменная A значению "test"
echo "Match" # Выполняется, если условие истинно
elif [ "$A" != "test" ]; then # Иначе если A не равно "test"
echo "No match"
fi # Конец условия
Часто используемые проверки
-f file # Файл существует
-d dir # Каталог существует
-z "$VAR" # Переменная пустая
-n "$VAR" # Переменная не пустая
Loops (Циклы)
for
for i in 1 2 3; do # Перебор значений
echo $i # Вывод текущего значения
done # Конец цикла
for file in *.txt; do # Перебор всех .txt файлов
echo $file
done
while
while read line; do # Читает файл построчно
echo $line
done < file.txt # Входные данные берутся из файла
Functions (Функции)
my_func() { # Объявление функции
echo "Hello $1" # $1 — первый аргумент функции
}
my_func "World" # Вызов функции
Arrays (Массивы)
ARR=(one two three) # Создание массива
echo ${ARR[0]} # Первый элемент массива
echo ${ARR[@]} # Все элементы массива
Case (Аналог switch)
case "$1" in
start) echo "Запуск" ;; # Если аргумент = start
stop) echo "Остановка" ;; # Если аргумент = stop
*) echo "Используй start|stop" ;; # Значение по умолчанию
esac
Redirection & Pipes (Перенаправление)
cmd > file.txt # Перезаписать файл выводом команды
cmd >> file.txt # Добавить вывод в конец файла
cmd < file.txt # Передать файл как ввод
cmd1 | cmd2 # Передать вывод одной команды в другую
Useful Commands (Полезные команды)
ls -la # Показать файлы (включая скрытые)
cd /path # Перейти в каталог
pwd # Показать текущий путь
cp src dst # Копировать файл
mv old new # Переименовать или переместить
rm -rf dir # Удалить каталог рекурсивно (ОПАСНО)
grep "text" file # Поиск текста в файле
find . -name "*.log" # Поиск файлов по имени
Exit Codes (Коды выхода)
echo $? # Код завершения последней команды
exit 0 # Успешное завершение
exit 1 # Завершение с ошибкой
Debugging (Отладка)
set -x # Показывать выполняемые команды
set -e # Остановить скрипт при ошибке