Скриптовые языки: Bash, Python, PowerShell и Perl для админов и разработчиков

Скриптовые языки: Bash, Python, PowerShell и Perl для админов и разработчиков Полезное

Скриптовый язык — это язык программирования, на котором пишут скрипты (сценарии): небольшие программы, которые интерпретатор выполняет прямо из исходного кода, без отдельного шага сборки в машинный код. Такие языки чаще всего берут для автоматизации рутины: обработки файлов, обслуживания серверов, склейки готовых программ в один процесс.

Ниже разберу, чем скриптовые языки отличаются от компилируемых (и почему эта граница условна), пройдусь по четырем рабочим языкам системного администратора и разработчика — Bash, Python, PowerShell и Perl, покажу, где какой уместен, прогоню короткие скрипты на Bash и Python с реальным выводом и сведу все в таблицу сравнения.

Скриптовые и компилируемые языки: в чем разница

Классический компилируемый язык (C, C++, Go, Rust) сначала переводит весь исходный код в машинный код отдельной программой-компилятором, и только потом полученный файл запускается. Скриптовый язык работает иначе: программу читает и исполняет интерпретатор, отдельного бинарника на выходе нет. Отсюда практические свойства скриптов: их быстро писать и править, легко переносить между машинами (нужен только интерпретатор), но выполняются они, как правило, медленнее.

Важно: граница между скриптовыми и компилируемыми языками условна. Python и Perl перед выполнением компилируются в промежуточный байт-код, который затем исполняет виртуальная машина, а движки JavaScript применяют JIT-компиляцию прямо во время работы. Строго «интерпретируется построчно» из этого списка ведет себя разве что Bash. Поэтому «скриптовый» — это скорее про сценарий использования (быстрая автоматизация, запуск из исходника), чем про жесткую техническую категорию. Один и тот же язык может выступать и так, и иначе.

Общие признаки, по которым язык обычно относят к скриптовым:

  • запуск исходного кода без ручной сборки в исполняемый файл;
  • динамическая типизация (тип переменной определяется во время выполнения);
  • минимальная подготовка окружения — часто достаточно установленного интерпретатора.

Bash: автоматизация в Linux и Unix

Bash (Bourne Again Shell) — командная оболочка и скриптовый язык, стандартный интерпретатор в большинстве дистрибутивов Linux и доступный на macOS. Его стихия — системное администрирование: запуск и связывание утилит командной строки, обработка файлов, cron-задания, установочные и деплой-скрипты.

Bash силен там, где задача формулируется как «вызвать несколько консольных программ и передать данные между ними через конвейер». Как только логика усложняется (структуры данных, разбор JSON, арифметика с дробями), Bash становится неудобным — здесь обычно переходят на Python.

Пример: скрипт проверяет список сервисов и печатает отчет.

#!/usr/bin/env bash
services="nginx postgresql redis"
for s in $services; do
  echo "Проверяю сервис: $s"
done
echo "Всего сервисов: $(echo $services | wc -w | tr -d ' ')"

Вывод (проверено в Bash 5):

Проверяю сервис: nginx
Проверяю сервис: postgresql
Проверяю сервис: redis
Всего сервисов: 3

Здесь for перебирает слова из строки, $(...) подставляет результат команды, а wc -w считает количество слов. Это упрощенный пример: перебор $services через пробел годится для простого списка, но сломается на именах с пробелами — в реальных скриптах для этого используют массивы.

Python: универсальный язык автоматизации

Python — интерпретируемый язык общего назначения (создан Гвидо ван Россумом, первый выпуск в 1991 году), который одинаково хорошо годится и для скриптов, и для полноценных приложений. Для админа и разработчика это «второй язык после оболочки»: разбор логов, работа с API и JSON, генерация отчетов, задачи, которые уже не помещаются в Bash.

Сильные стороны — читаемый синтаксис, огромная стандартная библиотека и экосистема пакетов (pip/PyPI), кроссплатформенность. Актуальная линейка на 2026 год — Python 3.x; ветка Python 2 снята с поддержки еще в 2020 году, новые скрипты пишут только на Python 3.

Пример: скрипт считает, сколько строк лога приходится на каждый уровень.

# Считаем, сколько записей каждого уровня в логе
lines = [
    "INFO server started",
    "WARNING low disk space",
    "INFO request handled",
    "ERROR connection refused",
    "INFO request handled",
]

counts = {}
for line in lines:
    level = line.split()[0]
    counts[level] = counts.get(level, 0) + 1

for level, n in counts.items():
    print(f"{level}: {n}")

Вывод (Python 3):

INFO: 3
WARNING: 1
ERROR: 1

line.split()[0] берет первое слово строки (уровень), dict.get(level, 0) возвращает текущий счетчик или 0, если ключа еще нет. Порядок вывода совпадает с порядком первого появления уровней: начиная с Python 3.7 словарь гарантированно сохраняет порядок вставки ключей.

PowerShell: скрипты в мире Windows

PowerShell — оболочка и скриптовый язык от Microsoft, построенные на платформе .NET. Ключевое отличие от Bash: по конвейеру между командами передаются не строки текста, а объекты .NET с полями и методами, поэтому результат команды не нужно разбирать регулярными выражениями — к его свойствам обращаются напрямую.

Родная среда PowerShell — администрирование Windows: управление службами, реестром, пользователями Active Directory, конфигурацией серверов. При этом современная версия PowerShell 7 (линейка с открытым исходным кодом на базе .NET) кроссплатформенна и работает также на Linux и macOS. Отдельно существует встроенная в Windows версия Windows PowerShell 5.1 — она привязана к Windows и развитие получает именно ветка 7.x.

Perl: обработка текста и «клей» систем

Perl — один из старейших скриптовых языков (создан Ларри Уоллом в 1987 году), исторически знаменитый мощными встроенными средствами работы с текстом и регулярными выражениями. Долгие годы был основным языком системного администрирования и CGI-скриптов в вебе.

Сегодня Perl занимает более узкую нишу: обработка текстовых потоков, разбор логов, поддержка легаси-скриптов, которых в инфраструктуре все еще много. Для новых проектов в этих задачах чаще берут Python, но встретить и уметь читать Perl администратору по-прежнему полезно. Уточнение по версиям: живая линейка — Perl 5; язык, который когда-то назывался Perl 6, в 2019 году выделен в отдельный язык Raku и к Perl 5 отношения по коду не имеет.

Как выбрать язык под задачу

Опираться стоит не на «модность», а на среду и характер задачи:

  • Задача внутри Linux/Unix, связать консольные утилиты — Bash. Пока логика простая, ничего лучше нет.
  • Логика сложнее пары команд: API, JSON, структуры данных, отчеты — Python. Он же разумный выбор, если скрипт со временем может вырасти в приложение.
  • Администрирование Windows — PowerShell: доступ к службам, реестру и Active Directory идет через готовые командлеты и объекты.
  • Плотная обработка текста или поддержка существующего кода на Perl — Perl; для новых текстовых задач сопоставим с Python.

Таблица сравнения

Язык Типичная платформа Основная ниша Что передается по конвейеру
Bash Linux, Unix, macOS автоматизация ОС, связывание CLI-утилит текст
Python кроссплатформенный универсальные скрипты, API, отчеты, ML объекты (внутри программы)
PowerShell Windows; 7.x кроссплатформенный администрирование Windows, .NET-среда объекты .NET
Perl кроссплатформенный обработка текста, легаси, разбор логов текст

Таблица описывает типичное применение, а не жесткие ограничения: на Python пишут и системные утилиты для Linux, а PowerShell 7 запускается и на сервере с Linux.

Выводы

  • Скриптовый язык предназначен для скриптов — небольших программ, которые интерпретатор выполняет прямо из исходного кода, без отдельной сборки в машинный код.
  • Деление на скриптовые и компилируемые языки условно: Python и Perl компилируются в байт-код, JavaScript использует JIT; «скриптовый» описывает сценарий применения, а не строгую категорию.
  • Bash уместен для автоматизации внутри Linux и связывания консольных утилит; на сложной логике его сменяет Python.
  • Python — универсальный выбор для скриптов, которые переросли оболочку: разбор данных, API, отчеты; ветка Python 2 не поддерживается, пишут на Python 3.
  • PowerShell — язык администрирования Windows (передает по конвейеру объекты .NET), Perl — нишевый инструмент обработки текста и поддержки легаси.

Где применяется / связь с практикой

Скриптовые языки — повседневный инструмент системного администратора и DevOps-инженера: развертывание серверов, резервное копирование, мониторинг, сбор и разбор логов, обслуживание пользователей. Практика начинается с уверенного владения оболочкой Linux и Bash — на этой базе строятся и деплой-скрипты, и автоматизация в CI/CD.

Освойте тему на практике

Освоить работу в командной строке Linux и писать рабочие Bash-скрипты с нуля можно на курсе linux-basic в Otus. Посмотреть формат занятий и уровень до оплаты помогут бесплатные вебинары — там разбирают конкретные задачи и отвечают на вопросы.

Смежные темы: Скрипты: основы работы и использования, Что нужно знать о Perl, Языки программирования: характеристика, описание, виды.

FAQ

Можно ли писать скрипты на компилируемом языке вроде C или Go?
Технически да, и у Go для этого есть режим go run, запускающий исходник без ручной сборки. Но для одноразовой автоматизации это обычно избыточно: скриптовые языки дают тот же результат быстрее и с меньшим количеством кода.

JavaScript — это скриптовый язык?
Да, изначально это язык сценариев для веб-страниц, а с появлением Node.js на нем пишут и серверные скрипты. В статье он не рассматривается, потому что его ниша — веб и бэкенд, а не системное администрирование, но по природе он тоже скриптовый.

Скрипты всегда работают медленнее компилируемых программ?
Как правило, да, из-за интерпретации, но для типичных задач автоматизации это несущественно: узким местом обычно оказывается диск, сеть или база данных, а не сам интерпретатор. Там, где критична скорость вычислений, берут компилируемый язык или ускоряют горячие участки библиотеками на C.

OTUS Журнал
Скидка 5% 14-20 сентября на курсы (popup)