Что такое .sh-файл? Руководство по shell-скриптам, Bash и Linux
- 4 ноября 2025 г.
- 22:51
- Уроки

Введение
Shell-скрипты — фундамент администрирования Linux и Unix. Они дают мощные возможности автоматизации, существенно повышая продуктивность и эффективность управления системой. Файл .sh — это скрипт на shell, специализированном языке для интерпретации команд и автоматизации повторяющихся задач.
Будь вы сисадмин с сотнями серверов, разработчик, автоматизирующий деплой-пайплайны, или просто Linux-энтузиаст, который хочет прокачать навыки — понимание shell-скриптов необходимо. Это полное руководство объясняет, что такое файлы .sh, как они работают, чем отличаются разные shell, и даёт практические примеры скриптинга из реальной жизни.
Что такое файл .sh?
Определение
A .sh file is a plain text file containing a series of shell commands executed sequentially by a shell interpreter. The .sh extension indicates the file is a shell script, though many shell scripts omit this extension in practice.
Shell-скрипты — это мост между интерактивным использованием командной строки и полноценным программированием. Они позволяют:
-
Автоматизировать повторяющиеся задачи
-
Объединять несколько команд в сложные рабочие процессы
-
Создавать переиспользуемые инструменты администрирования
-
Планировать автоматические операции обслуживания
-
Развёртывать приложения программно
Характеристики
Plain Text Format: Unlike compiled programs requiring compilation, shell scripts are human-readable text interpreted directly by the shell.
Interpreter-Based: Execution depends on the specified shell interpreter (Bash, Ksh, etc.), not the underlying system architecture.
Строка shebang: Большинство shell-скриптов начинаются с shebang (#!/bin/bash), указывающего, какой интерпретатор оболочки использовать.
Кроссплатформенность: Shell-скрипты выполняются единообразно на разных системах Unix/Linux (при условии установки соответствующих оболочек).
Реальные применения
-
Скрипты запуска и завершения работы системы
-
Автоматизация резервного копирования и восстановления
-
Мониторинг и оповещения серверов
-
Пайплайны развёртывания приложений
-
Обработка и анализ файлов логов
-
Создание учётных записей пользователей
-
Автоматизация конфигурации сети
-
Задачи обслуживания баз данных
Основы shell-скриптинга
Что такое shell?
Shell — это интерпретатор команд, обеспечивающий интерфейс между пользователями и ядром операционной системы. Он принимает пользовательские команды, интерпретирует их и выполняет соответствующие программы.
Функции shell:
-
Считывать и разбирать пользовательские команды
-
Искать исполняемые программы
-
Запускать программы с соответствующими аргументами
-
Обрабатывать перенаправление ввода/вывода
-
Управлять процессами
-
Реализовывать программные конструкции (циклы, условия)
Зачем использовать shell-скрипты?
Automation: Execute complex sequences automatically without manual intervention.
Efficiency: Complete in seconds what might take hours manually.
Согласованность: Обеспечьте идентичные операции на нескольких системах.
Документация: Комментарии в скрипте документируют процедуры для будущего использования.
Scalability: Scale operations from one server to hundreds without additional effort.
Recovery: Rebuild systems quickly using existing scripts.
Популярные реализации shell
Bash (Bourne-Again Shell)
Market Share: ~95% of Linux systems
Creator: Brian Fox (GNU Project)
Features: Полные feature set, scripting capabilities
Синтаксис: Совместим с оригинальной оболочкой Bourne
Сценарий использования: По умолчанию в большинстве дистрибутивов Linux
Bash — стандарт де-факто для shell-скриптов в Linux. Он сочетает совместимость с оригинальными shells и современные функции.
Ksh (Korn Shell)
Creator: David Korn (AT&T Bell Labs)
Features: Расширенные programming capabilities, faster execution
Syntax: Superset of Bourne shell
Use Case: Preferred on Unix systems (Solaris, AIX)
Advantages: Лучше performance for compute-intensive operations
Ksh остаётся распространённым в корпоративных Unix-средах, особенно на коммерческих Unix-системах.
Sh (Bourne Shell)
Original POSIX Standard Shell
Creator: Stephen Bourne (AT&T Bell Labs)
Features: Минимальные, standardized functionality
Modern Status: Largely historical; contemporary shells provide compatibility
Sh представляет стандарт POSIX, обеспечивая базовую совместимость на всех Unix-подобных системах.
Zsh (Z Shell)
Creator: Paul Falstad
Features: Interactive features, scripting capabilities
Modern Focus: Enhanced user experience over pure scripting
Use Case: Growing in popularity among developers
Zsh представляет современную эволюцию shell, сочетая мощь скриптинга с удобными интерактивными функциями.
Tcsh/Csh
Csh Creator: Bill Joy (Berkeley)
Modern Version: Tcsh (enhanced csh)
Features: C-like syntax
Status: Declining usage, maintained primarily for compatibility
Производные Csh сохраняются на некоторых системах, но предлагают убывающие преимущества по сравнению с Bash/Ksh.
Bash vs Ksh vs другие shell
Сравнительная таблица
| Feature | Bash | Ksh | Zsh | Sh |
|---|---|---|---|---|
| История команд | Yes | Yes | Yes | No |
| Автозавершение команд | Basic | Basic | Расширенные | No |
| Массивы | Индексированные | Индексированные + Ассоциативные | Yes | No |
| Сопоставление шаблонов | Шаблоны glob | Расширенные | Расширенные | Ограниченные |
| Функции | Yes | Yes | Yes | Yes |
| Арифметика | $(()) |
(()) |
$(()) |
Ограниченные |
| Соответствие POSIX | ~95% | 100% | ~90% | 100% |
| Производительность | Good | Лучше | Good | Самая быстрая |
| Возможности скриптинга | Полные | Более продвинутые | Самые продвинутые | Минимальные |
| Совместимость | Отличная | Отличная | Good | Универсальная |
| Кривая обучения | Умеренная | Умеренная | Круче | Самая лёгкая |
| Типичное использование | Linux по умолчанию | Корпоративный Unix | Выбор разработчиков | Compatibility |
When to Choose Each Shell
Выбирайте Bash, когда:
-
Максимальная совместимость с системами Linux
-
Работа с инструментами, ожидающими синтаксис Bash
-
Знакомство команды с Bash
-
Среды, ориентированные на Linux
Выбирайте Ksh, когда:
-
Операции, критичные к производительности
-
Корпоративный Unix environments
-
Требующие продвинутых возможностей программирования
-
Поддержка устаревших систем Unix
Выбирайте Zsh, когда:
-
Приоритет интерактивного использования оболочки
-
Расширенные user experience desired
-
Среды, ориентированные на разработчиков
-
Современные дистрибутивы Linux
Выбирайте Sh, когда:
-
Требуется максимальная POSIX-переносимость
-
Поддержка различных платформ Unix
-
Минимизация зависимостей
-
Лёгкое выполнение необходимо
Создание и выполнение shell-скриптов
Creating a Basic Shell Script
Step 1: Create Filetouch myscript.sh
Step 2: Edit Filenano myscript.sh
Step 3: Add Shebang and Commands#!/bin/bash
echo "Hello, World!"
date
Step 4: Make Executablechmod +x myscript.sh
Step 5: Execute./myscript.sh
Execution Methods
Direct Execution (requires executable permissions)./myscript.sh
Explicit Interpreterbash myscript.sh
Source Command (executes in current shell)source myscript.sh
or
. myscript.sh
Understanding the Shebang
The shebang (#!) specifies which interpreter executes the script:#!/bin/bash # Use Bash
#!/bin/ksh # Use Ksh
#!/usr/bin/env bash # Use Bash via environment (more portable)
#!/usr/bin/python # Use Python interpreter
Базовый синтаксис shell-скриптов
Variables
# Variable assignment (no spaces around =)
name="John"
age=30
# Using variables
echo "Name: $name"
echo "Age: $age"
# Command substitution
current_date=$(date)
file_count=$(ls -1 | wc -l)
# Arrays (Bash)
fruits=("Apple" "Banana" "Cherry")
echo ${fruits} # Access first element
Conditional Statements
# If-else
if [ $age -gt 18 ]; then
echo "Adult"else
echo "Minor"
fi
# Case statement
case $day in
Monday)
echo "Start of week"
;;
Friday) echo "End of week"
;;
*)
echo "Midweek"
;;esac
Loops
# For loopfor i in 1 2 3 4 5; do echo "Number: $i"done# While loop
count=0
while [ $count -lt 5 ]; do echo "Count: $count" ((count++))
done
# Until loop
until [ $count -eq 10 ]; do
echo "Count: $count" ((count++))
done
Functions
# Function definitiongreet() {echo "Hello, $1!"}# Function with return valueadd() {return $(($1 + $2))}# Function calls
greet "Alice"add 5 3echo "Sum: $?" # $? holds return valueПродвинутые приёмы скриптинга
Error Handling
#!/bin/bashset -e # Exit on error# Check command successif ! command_name; then echo "Command failed" exit 1fi# Trap errorstrap 'echo "Error on line $LINENO"' ERR
File Operations
# File existence checkingif [ -f "/path/to/file" ]; then echo "File exists"fi# Directory operationsif [ -d "/path/to/dir" ]; thenecho "Directory exists"fi# Read file line-by-linewhile IFS= read -r line; doecho "Line: $line"done < filename.txt
User Input
# Read from userread -p "Enter your name: " name
# Read multiple valuesread -p "Enter values: " val1 val2 val3
# Read into arrayread -a array_nameПрактические примеры
System Backup Script
#!/bin/bash# Backup important directoriesBACKUP_DIR="/backup"TIMESTAMP=$(date +%Y%m%d_%H%M%S)echo "Starting backup..."# Create backup directorymkdir -p "$BACKUP_DIR"# Backup home directorytar -czf "$BACKUP_DIR/home_$TIMESTAMP.tar.gz" /home
# Backup system configurationtar -czf "$BACKUP_DIR/etc_$TIMESTAMP.tar.gz" /etc
echo "Backup complete: $BACKUP_DIR/home_$TIMESTAMP.tar.gz"
Disk Space Monitor
#!/bin/bashTHRESHOLD=80ALERT_EMAIL="[email protected]"# Check disk usagedisk_usage=$(df / | awk 'NR==2 {print $5}' | cut -d'%' -f1)if [ $disk_usage -gt $THRESHOLD ]; thenecho "Disk usage critical: $disk_usage%" | mail -s "Alert" $ALERT_EMAILecho "Alert sent to $ALERT_EMAIL"fi
User Account Provisioning
#!/bin/bashread -p "Enter username: " usernameread -p "Enter email: " email
# Create useruseradd -m -s /bin/bash "$username"# Set password (prompt method recommended)echo "Set password for $username:"passwd "$username"# Add to groupsusermod -aG sudo "$username"echo "User $username created successfully"Почему удалённое управление серверами строится на shell-скриптах
Системные администраторы, управляющие удалёнными серверами через RDP- или SSH-соединения, часто выполняют shell-скрипты для:
-
Автоматизированные развёртывания: Развёртывайте приложения на нескольких серверах одновременно
-
Обслуживание системы: Планируйте и выполняйте регулярные задачи обслуживания
-
Monitoring: Continuously monitor system health and log anomalies
-
Backup Operations: Automate critical data backup procedures
-
Обновления безопасности: Развёртывайте патчи безопасности по всей инфраструктуре
Professional remote desktop management platforms like RDP.Monster enable shell script execution across enterprise infrastructure:
Управление инфраструктурой Linux с помощью RDP.Monster
Корпоративное управление Linux
-
SSH-доступ для удалённого выполнения shell-скриптов
-
Возможности автоматизированного развёртывания
-
Пакетные операции на нескольких серверах
-
Мониторинг и оповещение в реальном времени
VPS-решения для инфраструктуры скриптов
-
Выделенные ресурсы для скриптов с интенсивными вычислениями
-
Постоянное планирование cron-задач
-
Надёжное время безотказной работы для запланированных операций
-
Масштабируемая инфраструктура для растущей сложности скриптов
Deploy enterprise Linux infrastructure for sophisticated shell script operations with RDP.Monster
Заключение
Shell scripts represent a powerful automation tool essential for Linux system administration and development. Understanding .sh files, shell implementations, and scripting techniques enables IT professionals to dramatically increase productivity, ensure consistency, and manage complex infrastructure efficiently.
Используете ли вы Bash в Linux, Ksh в корпоративном Unix или Zsh для интерактивной разработки, владение shell-скриптингом отличает способных администраторов от просто компетентных. Инвестиции в развитие прочных навыков скриптинга приносят отдачу на протяжении десятилетий управления Linux-системами.
Managing complex Linux infrastructure requiring sophisticated automation? RDP.Monster provides SSH access and VPS infrastructure optimized for running mission-critical shell scripts at scale. Explore Linux-friendly VPS solutions today.
Мощный хостинг Linux VPS
Получите полный контроль и впечатляющую производительность с нашими Linux VPS. Идеально для хостинга приложений, администрирования серверов и оптимизации рабочих процессов.
Высокопроизводительные выделенные серверы
Нужны максимальный контроль и мощность? Наши выделенные серверы обеспечивают непревзойдённую производительность для самых требовательных задач.
Часто задаваемые вопросы
В чём разница между .sh и bash-скриптами?
Bash-скрипт работает как .sh, но не каждый .sh-скрипт — это bash.
Что использовать — #!/bin/bash или #!/usr/bin/env bash?
Почему мои скрипты падают при запуске из cron?
Используйте абсолютные пути, явно задавайте переменные окружения и указывайте полный путь интерпретатора в shebang.
Как сделать скрипт исполняемым?
Можно ли запускать shell-скрипты на Windows?
В нативном Windows для автоматизации предпочтительнее PowerShell.
В чём разница между командами . и source?
source нагляднее; . совместим с более старыми shell.
Как отлаживать shell-скрипт?
Используйте bash -x scriptname.sh для построчного трассирования или добавьте set -x внутри скрипта.
Можно ли передавать аргументы в shell-скрипты?
Используйте позиционные параметры: $1 (первый аргумент), $2 (второй) и т. д. $@ содержит все аргументы.
Связанные статьи




