Bash (Bourne Again SHell) — это командный интерпретатор в Unix-подобных операционных системах, таких как Linux и macOS. Он предоставляет удобный способ взаимодействия с операционной системой через командную строку. Создание Bash-скриптов является мощным инструментом для автоматизации повседневных задач и улучшения процесса работы с системой. В этой статье мы рассмотрим основы написания Bash-скриптов для повседневной работы.

Основы синтаксиса Bash

Bash-скрипты пишутся в текстовых файлах и могут содержать команды, условия, циклы и многое другое. Основные правила синтаксиса:

Шебанг (Shebang): Начните скрипт с указания интерпретатора, например:

#!/bin/bash

Переменные: Используйте переменные для хранения данных. Присваивание значения переменной:

my_variable="test"

Вывод на экран: Для вывода текста используйте команду echo:

echo $my_variable

Комментарии: Используйте # для добавления комментариев:

# Это комментарий

Аргументы командной строки

Bash-скрипты могут принимать аргументы при запуске. Пример:

#!/bin/bash

echo "Первый аргумент: $1"
echo "Второй аргумент: $2"

Вызовите скрипт и передайте ему аргументы:

./myscript.sh arg1 arg2

Условные операторы

Условные операторы позволяют выполнять различные действия в зависимости от условий. Пример:

#!/bin/bash

if [ $1 -gt 10 ]; then
    echo "Переданное число больше 10"
else
    echo "Переданное число меньше или равно 10"
fi

Циклы

Циклы полезны для выполнения повторяющихся задач. Пример цикла for:

#!/bin/bash

for i in {1..5}; do
    echo "Это итерация номер $i"
done

Функции

Вы можете определить функции для организации кода:

#!/bin/bash

function greet {
    echo "Привет, $1!"
}

greet "Иван"

Работа с файлами и каталогами

Bash предоставляет множество команд для работы с файлами и каталогами. Например:

#!/bin/bash

if [ -f "myfile.txt" ]; then
    echo "Файл существует"
fi

if [ -d "mydir" ]; then
    echo "Каталог существует"
fi

Ошибки и отладка

Добавьте set -e в начало скрипта, чтобы он прекращал выполнение при обнаружении ошибки. Для отладки используйте set -x для вывода команд до их выполнения.

#!/bin/bash

set -e
set -x

# Ваш код здесь

Переменные окружения

Bash позволяет вам работать с переменными окружения, которые могут быть использованы в ваших скриптах. Пример:

#!/bin/bash

echo "Моя переменная окружения HOME: $HOME"

Чтение пользовательского ввода

Для чтения ввода от пользователя используйте команду read:

#!/bin/bash

echo "Введите ваше имя: "
read username

echo "Привет, $username!"

Массивы

Bash поддерживает массивы для хранения набора значений:

#!/bin/bash

my_array=("Значение1" "Значение2" "Значение3")

echo "Первый элемент массива: ${my_array[0]}"

Проверка наличия команд

Проверьте, установлена ли определенная команда, прежде чем ее использовать:

#!/bin/bash

if command -v some_command > /dev/null; then
    echo "some_command установлена"
else
    echo "some_command не установлена"
fi

Работа с условиями в строках

Вы можете использовать операторы для работы с условиями в строках, например, проверка наличия подстроки:

#!/bin/bash

my_string="Пример строки"

if [[ $my_string == *"строка"* ]]; then
    echo "Строка содержит подстроку 'строка'"
else
    echo "Строка не содержит подстроку 'строка'"
fi

Параллельное выполнение команд

Bash поддерживает запуск команд параллельно с использованием &. Пример:

#!/bin/bash

command1 &
command2 &
wait
echo "Все команды выполнены"

Пример скрипта на Bash

Давайте рассмотрим пример простого практичного Bash-скрипта, который создает резервные копии указанных файлов в заданном каталоге. Этот скрипт демонстрирует использование переменных, условий и циклов в Bash.

#!/bin/bash

# Путь к каталогу для резервных копий
backup_dir="/путь/к/резервным/копиям"

# Перечень файлов для резервного копирования
files_to_backup=("файл1.txt" "файл2.txt" "файл3.txt")

# Создаем каталог для резервных копий, если его нет
if [ ! -d "$backup_dir" ]; then
    mkdir -p "$backup_dir"
fi

# Цикл по файлам для резервного копирования
for file in "${files_to_backup[@]}"; do
    # Полный путь к файлу
    full_path="/путь/к/вашим/файлам/$file"

    # Проверяем, существует ли файл
    if [ -f "$full_path" ]; then
        # Создаем резервную копию файла в указанном каталоге
        cp "$full_path" "$backup_dir"
        echo "Резервная копия файла $file создана в $backup_dir"
    else
        echo "Внимание: Файл $file не существует!"
    fi
done

echo "Процесс резервного копирования завершен."

В этом примере:

  • backup_dir — это каталог, в который будут сохраняться резервные копии.
  • files_to_backup — массив файлов, которые мы хотим скопировать.
  • Скрипт создает каталог для резервных копий, если его нет.
  • Далее он проходит по каждому файлу в массиве, проверяет его наличие и, если файл существует, создает резервную копию в указанном каталоге.

Вы можете адаптировать этот пример для своих потребностей, добавлять новые файлы в массив или изменять пути к каталогам. Важно помнить, что перед использованием скрипта нужно дать ему права на выполнение с помощью команды chmod +x script.sh, где script.sh — имя вашего скрипта.