Bash-скрипты: любимый инструмент девопса, сисадмина и фулстека
easy

Bash-скрипты: любимый инструмент девопса, сисадмина и фулстека

Выполняем рутинные или сложные задачи за 5 минут

Разработчикам, системным администраторам и девопсам часто нужно выполнять одни и те же операции на компьютере или на сервере: следить за количеством свободного места, находить в логах ошибки и информацию о сбоях, смотреть, выполняются ли нужные программы в фоне и так далее. Это можно каждый раз делать вручную, а можно автоматизировать и запускать системный скрипт, который будет делать всё то же самое по одной команде. Для этого используют специальные файлы с набором команд — bash-скрипты, которые работают в ОС Linux и Unix, в том числе mac OS. На Windows такое тоже есть, но там всё работает чуть иначе. Рассказываем, что такое bash-скрипты и как ими пользоваться. 

Что такое bash-скрипт

Bash-скрипт — это файл с последовательностью команд, которые компьютер выполняет по очереди, строка за строкой. Если написать и сохранить эти команды в файл, можно повторять этот сценарий сколько угодно раз, просто запустив файл, а не вводя их каждый раз в командную строку.

Командами для таких скриптов служат:

  • команды и внутренние программы операционной системы;
  • любые исполняемые файлы на компьютере, часто вместе с дополнительными параметрами.

Bash-скрипты пишутся на скриптовых языках Bash и Shell (если точнее, то Bash — одна из разновидностей Shell). Эти языки поддерживают переменные, условные операторы, циклы и функции, благодаря чему на них можно писать сложные сценарии.

Bash (Bourne Again SHell) — это также командный интерпретатор, то есть оболочка командной строки, которая служит интерфейсом для взаимодействия пользователя с операционной системой. Bash распознаёт введённые команды, выполняет их и интерпретирует выходные данные для пользователя.

Проще говоря, всё, что можно выполнить в командной строке, можно использовать как команду в bash-скрипте.

Почему командная строка, а не удобный графический интерфейс

Большинство скриптов и настроек для их запуска делается в системах, основанных на Linux и UNIX. Всё дело в том, в этих операционных системах на первом месте стоит командная строка и управление текстовыми командами через терминал. В буквальном смысле эти операционки управляются текстом и выдают текст.

Графическая оболочка подобных систем — это надстройка над ядром. По сути, все эти кнопочки, иконки, стрелочки и поля ввода — это удобный способ давать компьютеру те же самые текстовые команды. Обычным пользователям нужны эти кнопочки, чтобы было интуитивно понятно, куда нажимать; но компьютеру они не нужны — внутри себя он оперирует текстовыми командами.

Это мы говорили про операционные системы семейства Linux, UNIX-подобные системы и Mac OS.

А вот Windows сразу проектировали так, что графический интерфейс был главным, а все консольные дела спрятали подальше. У них до сих пор неудобный интерфейс, в котором сложно разобраться, но часто это единственный способ настроить компьютер нужным образом.

Поэтому мы сначала расскажем, про bash-скрипты на Mac OS и Linux, а потом поговорим про Windows.

Что можно делать с помощью bash-скриптов

Вот для чего используют bash-скрипты в народном хозяйстве:

  • Автоматизация повторяющихся задач, например резервного копирования файлов, обновления ПО, переименования или перемещения файлов, создания отчётов и так далее.
  • Обработка и анализ данных в текстовых файлах, в том числе фильтрация, сортировка, поиск и изменение. Это может быть удобно при обработке лог-файлов или файлов формата CSV.
  • Запуск ping-тестов для проверки работоспособности сайтов и мониторинга производительности серверов.
  • Управление системными ресурсами, мониторинг процессов, очистка временных файлов или логов, определение использования памяти или диска и так далее.
  • Создание сценариев установки и настройки программ, изменения конфигурационных файлов и других действий для установки ПО на новой системе.
  • Работа с файловой системой: создание, копирование, перемещение, переименование или удаление файлов и папок, проверка существования файлов, редактирование прав доступа.
  • Вызов внешних команд, например системных, других скриптов или программ.

Смысл скриптов в том, что мы один раз пишем нужную последовательность команд, сохраняем её в файл, а потом вызываем этот файл — и вся последовательность выполняется автоматически. При этом скрипт может быть как на 5, так и на 500 строк — компьютеру неважен размер, он в любом случае выполнит все команды по очереди. А ещё скрипты можно вызывать из других скриптов и так создавать целые конвейеры по выполнению нужных задач на компьютере. 

Как начать работать с Bash

Чаще всего с помощью bash-скрипты работают с серверами, где нет интерфейсов, а есть только командная строка. Но использовать такие скрипты можно и на обычном компьютере.

Большинство дистрибутивов Linux и Unix-подобных систем поставляется с установленной по умолчанию оболочкой Bash. Например, если у вас операционная система mac OS, для начала работы с Bash достаточно запустить программу «Терминал».

В mac OS Catalina оболочку по умолчанию сменили на Zsh. Чтобы сменить её на bash, нужно открыть настройки терминала и указать полный путь: /bin/bash.

Как начать работать с Bash

После этого нужно перезагрузить терминал, и оболочка сменится на bash:

Как начать работать с Bash
Проверить тип оболочки в терминале можно командой ps

Как создавать bash-скрипты

Писать bash-скрипты можно как в текстовом редакторе, например блокноте, так и в терминале. В первом случае файл со скриптом нужно будет сохранить с расширением .sh, во втором — создать файл с помощью команды nano имя_скрипта.sh. Sh — это сокращение от Shell.

Любой bash-скрипт начинается с такой строки:

#!/bin/bash

Это позволит системе использовать Bash для выполнения.

Создадим самый простой скрипт с приветствием:

#!/bin/bash
echo "Привет, это журнал Код!"

Теперь достаточно сохранить файл и предоставить ему разрешение на выполнение с помощью такой команды:

chmod +x имя_скрипта.sh

Чтобы запустить скрипт, нужно использовать команду:

./имя_скрипта.sh

Рассмотрим чуть более сложный скрипт. Например, нам нужно проверить, сколько места осталось на сервере для почты. Такой скрипт сделает проверку и, если сервер заполнен на 90%, пришлёт email с уведомлением:

#!/bin/sh
# адрес получателя уведомления
EMAIL_TO="адрес_электронной почты"
# адрес, с которого будет отправлено уведомление
EMAIL_FROM="адрес_электронной_почты"
# пороговое значение свободного места на диске в процентах
THRESHOLD=90
# получаем информацию о свободном месте на диске, фильтруем вывод, выбираем нужные поля, сохраняем результаты в переменную output
df -PH | grep -vE '^Filesystem|tmpfs|cdrom|none' | awk '{ print $5 " " $1 }' | while read output;
# цикл проверки
do
  # содержимое переменной output
  echo $output
  # выбираем процент использования свободного места на диске из переменной output, удаляем символ процента, сохраняем результат в переменную usep
  usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1  )
  # выбираем имя раздела из переменной output, сохраняем результат в переменную partition
  partition=$(echo $output | awk '{ print $2 }' )
  # сравниваем значения usep и THRESHOLD (больше или равно)
  if [ $usep -ge $THRESHOLD ]; then
    # уведомление (ubuntu)
    echo "Осталось мало места \"$partition ($usep%)\" на сервере $(hostname) на дату $(date)" | mail -s "Внимание: на диске осталось мало места $usep%" $EMAIL_TO -aFrom:$EMAIL_FROM
    # уведомление (centos)
    #echo "Осталось мало места \"$partition ($usep%)\" на сервере $(hostname) на дату $(date)" | mail -s "Внимание: на диске осталось мало места $usep%" $EMAIL_TO -- -f $EMAIL_FROM
    # прерывание цикла, если условие выполнено
    break
  fi
# конец цикла
done

Bash и Windows

Bash-скрипты предназначены для unix-подобных операционных систем, а для Window существует формат bat-файлов. Так сложилось, потому что Windows изначально разрабатывали как операционную систему с собственным интерфейсом и своими средствами разработки. Поэтому в Windows нет встроенного доступа к unix-командам, таким как bash.

Теоретически в Windows можно использовать bash-скрипты с помощью виртуальной машины или эмулятора. Например, воспользоваться подсистемой Windows Subsystem for Linux (WSL), чтобы установить дистрибутив Linux из Microsoft Store по поиску «Ubuntu» или «Debian». После установки Bash будет доступен из меню «Пуск».

Но всё-таки bash-скрипты в Windows менее эффективны и удобны, чем bat-файлы — более «родные» для этой ОС. Фактически с их помощью можно делать то же самое, что и с bash-скриптами. Для работы со скриптами в Windows есть удобная оболочка PowerShell — мы уже работали с ней, когда настраивали свой сервер для облачного хранилища или запускали Stable Diffusion у себя на компьютере. На минимальном уровне в Windows можно писать такие же скрипты, как на Linux, но для полноценного администрирования на скриптах этого часто недостаточно.

Интерфейс Windows PowerShell
Интерфейс Windows PowerShell

Что дальше

В следующий раз мы напишем пару полезных скриптов для mac OS, а потом разберём создание подобных скриптов на компьютере с Windows. А заодно посмотрим, как эти две системы отличаются с этой стороны и где удобнее настраивать автоматизацию с помощью командной строки. Подпишитесь, чтобы не пропустить :-)

Текст:

Инна Долога

Редактор:

Михаил Полянин

Обложка:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Мария Дронова

Соцсети:

Юлия Зубарева

Фулстек-разработка —комплексные решения в ИТ
Новый курс «Практикума» о комплексной разработке сайтов основан на запросах работодателей. Весь современный стек технологий, поддержка наставников и помощь в трудоустройстве. Старт бесплатно.
Попробовать бесплатно
Фулстек-разработка —комплексные решения в ИТ Фулстек-разработка —комплексные решения в ИТ Фулстек-разработка —комплексные решения в ИТ Фулстек-разработка —комплексные решения в ИТ
Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
easy